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);
}
输出结果