MyBatis教程[2]----完成CRUD操作

CRUD即create, read, update,delete,本文在上一篇文章的基础上继续讨论。

上一篇教程链接:MyBatis教程[1]

0.编写CRUD接口

先把接口全部写出来

@Mapper
public interface UserMapper {

    /**
     * 根据id查找单条记录
     * @param id 主键id
     * @return
     */
    User selectById(@Param("id") Long id);

    /**
     * 插入数据
     * @param user 要插入的实体对象
     * @return
     */
    boolean insert(@Param("u") User user);

    /**
     * 根据id删除单条记录
     * @param id 主键id
     * @return
     */
    boolean deleteById(@Param("id") Long id);

    /**
     * 根据id更新单条记录
     * @param user
     * @return
     */
    boolean updateById(@Param("u") User user);

    /**
     * 根据多个条件查找
     * @param u user对象
     * @return
     */
    List<User> select(@Param("u") User u);
}

1.完成新增操作

新增操作采用insert标签,UserMapper.xml中添加以下代码

	<!--
        用insert标签进行新增操作
        id:对应接口方法名
        insert语句不需要写resultType
    -->
    <insert id="insert">
        INSERT INTO `user`(`name`, `phone`, `birthday`) VALUES (#{u.name}, #{u.phone}, #{u.birthday})
    </insert>

测试:

	@Test
    void insert() throws ParseException {
        User user = new User();
        user.setName("李明");
        user.setPhone("11111111111");
        user.setBirthday(new SimpleDateFormat("yyyy-MM-dd").parse("1996-07-18"));

        userMapper.insert(user);
    }

可以看到成功插入了一条记录到数据库中
在这里插入图片描述

2.完成删除操作

删除操作采用delete标签,UserMapper.xml中添加以下代码

	<!--
        用delete标签来进行删除操作
    -->
    <delete id="deleteById">
        DELETE FROM `user` WHERE id = #{id}
    </delete>

测试:

	@Test
    void deleteById() {
        userMapper.deleteById(6L);
    }

3.完成更新操作

更新操作采用update标签,UserMapper.xml中添加以下代码

	<!--
        用update标签来进行修改操作
    -->
    <update id="updateById">
        UPDATE `user` SET `name` = #{u.name}, `phone` = #{u.phone}, `birthday` = #{u.birthday} 
        	WHERE `id` = #{u.id};
    </update>

测试:

	@Test
    void update() {

        User user = userMapper.selectById(5L);
        user.setPhone("12345678");
        userMapper.updateById(user);
    }

把id=5的记录的记录的电话号码改为了12345678
在这里插入图片描述

4.使用动态SQL语句完成查询操作

实现的效果:使用name属性进行模糊查询,使用phone属性进行精确查询。

编写映射文件代码:

	<!--
        1=1: 永远为真,目的是拼接后面的AND语句
        在这里用到了动态SQL语句,根据属性值是否为空来动态生成SQL语句
    -->
    <select id="select" resultType="com.yky.springboot.entities.User">
        SELECT * FROM `user` WHERE 1=1
        <if test="u.name != null and u.name != ''">
            AND `name` LIKE CONCAT('%',#{u.name},'%')
        </if>
        
        <if test="u.phone != null and u.phone != ''">
            AND `phone` = #{u.phone}
        </if>
    </select>

测试

    @Test
    void select() {
        //模糊查询名字中带有小的
        User user = new User();
        user.setName("小");
        List<User> users = userMapper.select(user);
        System.out.println(users);

        //模糊查询名字中带有明的
        User user1 = new User();
        user1.setName("明");
        users = userMapper.select(user1);
        System.out.println(users);

        //精准查询手机号是12345678的
        User user2 = new User();
        user2.setPhone("12345678");
        users = userMapper.select(user2);
        System.out.println(users);
    }

输出结果
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章