目录
1. 配置打印 MyBatis 执行的SQL
2. 查询操作
2.1 通过用户 ID 查询用户信息、查询所有用户信息
(1) Mapper 接口
(2)UserMapper.xml 查询所有用户的具体实现 SQL
(3)进行单元测试
3. 增加操作
3.1 在 mapper(interface)里面添加增加方法的声明
3.2 在 XMl 中添加 标签和增加的 sql 代码
3.3 生成测试类
4.修改操作
4.1 在 mapper(interface)里面添加修改方法的声明
4.2 在 XMl 中添加 标签和修改的 sql 代码
4.3 生成测试类
5. 删除操作
5.1 在 mapper(interface)里面添加删除方法的声明
5.2 在 XMl 中添加 标签和删除的 sql 代码
5.3 生成测试类
1. 配置打印 MyBatis 执行的SQL
#mybatis 中 xml 保存路径
mybatis:mapper-locations:- classpath:mybatis/**Mapper.xmlconfiguration: # 配置打印 MyBatis 执行的 SQLlog-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 配置打印 MyBatis 执行的 SQL
logging:level:com:example:demo: debug
可以看出MyBatis的底层就是JDBC,最终还是会生成JDBC的,只是MyBatis帮我们去执行了
2. 查询操作
2.1 通过用户 ID 查询用户信息、查询所有用户信息
(1) Mapper 接口
@Mapper// 和五大类注解是一样的
public interface UserMapper {/*** 根据用户 id 查询用户信息* @param id* @return*/Userinfo getUserById(@Param("id") Integer id);/*** 查询全部* @return*/List<Userinfo> getAllUser();
}
(2)UserMapper.xml 查询所有用户的具体实现 SQL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.ssmdemo1.mapper.UserMapper"><select id="getUserById" resultType="com.example.ssmdemo1.entity.Userinfo">select * from userinfo where id=#{id}</select><select id="getAll" resultType="com.example.ssmdemo1.entity.Userinfo">select * from userinfo</select>
</mapper>
(3)进行单元测试
单元测试知识点击此处
添加单元测试业务逻辑
@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {@Autowired// 2.注入测试对象:属性注入private UserMapper userMapper;@Test
// @Transactionalvoid getUserById() {// 3.添加单元测试的业务代码Userinfo userinfo = userMapper.getUserById(1);System.out.println(userinfo);Assertions.assertEquals("admin",userinfo.getUsername());}@Testvoid getAllUser() {List<Userinfo> list = userMapper.getAllUser();Assertions.assertEquals(1,list.size());}
}
3. 增加操作
3.1 在 mapper(interface)里面添加增加方法的声明
/*** 添加操作* @return*/int add(Userinfo userinfo);
3.2 在 XMl 中添加 标签和增加的 sql 代码
在这里我们传的是个对象,该怎么写呢?
是不是需要对象打点呢,不需要,直接去写对象的具体的属性就行了
<!-- 只能得到受影响的行数--><insert id="add">insert into userinfo (username,password,createtime,updatetime)values(#{username},#{password},#{createtime},#{updatetime})</insert>
注意:insert 操作只能得到受影响的行数,所以不需要添加resultType
3.3 生成测试类
@SpringBootTest// 1.表明当前单元测试是运行在Spring Boot环境中的
@Transactional // 开启一个事务,执行完恢复数据
class UserMapperTest {@Autowired// 2.注入测试对象:属性注入private UserMapper userMapper;@Testvoid add() {// 伪代码,构建对象并设置相应的值Userinfo userinfo = new Userinfo();userinfo.setUsername("李四");userinfo.setPassword("123456");userinfo.setCreatetime(LocalDateTime.now());userinfo.setUpdatetime(LocalDateTime.now());// 调用MyBatis 添加方法执行添加操作int resule = userMapper.add(userinfo);int uid = userinfo.getId();System.out.println("user2的ID = " + uid);Assertions.assertEquals(1,resule);}
在这里我抱着试一试的想法去看能不能得到用户的id
可以看见用这个方法是拿不到的
4.修改操作
4.1 在 mapper(interface)里面添加修改方法的声明
@Mapper
public interface UserMapper {/*** 修改用户*/int updateUserName(Userinfo userinfo);
}
4.2 在 XMl 中添加 标签和修改的 sql 代码
<!-- 默认返回受影响的行数--><update id="updateUserName">update userinfo set username=#{username} where id=#{id}</update>
4.3 生成测试类
@Testvoid updateUserName() {// 伪代码,构建测试数据Userinfo userinfo = new Userinfo();userinfo.setId(5);// 修改id为5的用户userinfo.setUsername("老五");int result = userMapper.updateUserName(userinfo);System.out.println("修改:" + result);Assertions.assertEquals(1,result);}
5. 删除操作
5.1 在 mapper(interface)里面添加删除方法的声明
@Mapper// 和五大类注解是一样的
public interface UserMapper {/*** 删除对象*/int delByName(@Param("id") Integer id);
}
5.2 在 XMl 中添加 标签和删除的 sql 代码
<!-- 默认返回受影响的行数--><delete id="delByName">delete from userinfo where id = ${id}</delete>
5.3 生成测试类
@Testvoid delByName() {Integer id = 5;int resule = userMapper.delByName(id);System.out.println("删除:" + resule);Assertions.assertEquals(1,resule);}