公司建设网站的通知书,湖北住房和城乡建设部网站,seo优化服务公司,湖北企业网站建设开启mybatis sql日志打印
可以在日志中看到sql中执行的语句 在配置文件中加上下面这几条语句
mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demodebug查询操作
根据用户id查询用户
UserMapper#xff1a;
User…开启mybatis sql日志打印
可以在日志中看到sql中执行的语句 在配置文件中加上下面这几条语句
mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl
logging.level.com.example.demodebug查询操作
根据用户id查询用户
UserMapper
UserInfo getUserById(Param(user_id) Integer id);UserMapper.xml:
select idgetUserById resultTypecom.example.demo.entity.UserInfoselect * from userinfo where id${user_id}
/select我们可以使用单元测试来测试查询到的信息是否正确 单元测试有如下特点
快速生成一个方法来测试一个功能模块只有所有单元测试通过才会打包防止程序出现bug用单元测试的事务可以回滚到未测试状态不会污染数据库的数据
可以看到spring中自带单元测试的依赖我们不用再引用junit了 只需要在要测试的类中右键选择generatetest即可创建单元测试 勾选需要添加的单元测试方法 然后就会在test包下生成对应的测试类
添加SpringBootTest注解可以让当前测试类运行在springBoot环境中
添加Transactional注解可以创建事务运行完测试类后会回滚到初始状态不会污染数据
SpringBootTest
Transactional
class UserMapperTest {AutowiredUserMapper userMapper;Testvoid getUserById(){UserInfo userInfo userMapper.getUserById(1);System.out.println(userInfo); Assertions.assertEquals(admin,userInfo.getUsername());}
}可以看到查询到对应的userinfo对象并且控制台中有详细的sql语句 也可以使用#通配符
select idgetUserById resultTypecom.example.demo.entity.UserInfoselect * from userinfo where id#{user_id}
/select可以发现使用$是直接用1替换id而使用#则是先使用占位符再在后面的语句中用1替换
查询所有用户
UserMapper
ListUserInfo getAll();UserMapper.xml:
select idgetAll resultTypecom.example.demo.entity.UserInfoselect * from userinfo
/selectUserMapperTest
Test
void getAll() {ListUserInfo list userMapper.getAll();Assertions.assertEquals(1, list.size());
}根据用户名查询用户
UserMapper:
ListUserInfo getUserByName(String username);UserMapper.xml:
select idgetUserByName resultTypecom.example.demo.entity.UserInfoselect * from userinfo where username#{username}
/selectUserMapperTest
Test
void getUserByName() {ListUserInfo list userMapper.getUserByName(admin);System.out.println(list.size());
}这时查找是成功的 如果使用$则会不成功
select idgetUserByName resultTypecom.example.demo.entity.UserInfoselect * from userinfo where username${username}
/select可以看到sql语句中直接将username替换成admin而没有加上因此导致了查询操作不成功
#和$的区别
同样是占位符#是预编译处理也就是先将sql中的#{}内容替换成然后在使用PreparedStatement的set方法来赋值操作 因此在替换时admin会自动加上
而$则是直接替换操作因此admin没有加上
而直接替换也有好处例如我们要按顺序查找数据时,就不需要了因此需要使用$
select idgetAllBySort resultTypecom.example.demo.entity.UserInfoselect * from userinfo order by id ${sort}
/select增添操作
UserMapper
Integer add(UserInfo userInfo);UserMapper.xml: 除了查找操作其他的几种操作都不需要指定返回类型了并且可以直接使用对象中的属性来进行插入操作
insert idaddinsert into userinfo(username,password,createtime,updatetime)values(#{username},#{password},#{createTime},#{updateTime})
/insertUserMapperTest:
Test
void add() {UserInfo userInfo new UserInfo();userInfo.setUsername(san);userInfo.setPassword(123);userInfo.setCreateTime(LocalDateTime.now());userInfo.setUpdateTime(LocalDateTime.now());int result userMapper.add(userInfo);System.out.println(result);Assertions.assertEquals(1, result);
}添加自增id
在xml中将useGeneratedKeys设置为true表示mybatis中使用数据库内部生成的主键
而keyProperty的值可以指定唯一识别对象的属性也就是说mybatis会使用getGeneratedKeys的返回值来设置值
insert idaddGetId useGeneratedKeystrue keyPropertyidinsert into userinfo(username,password,createtime,updatetime)values(#{username},#{password},#{createTime},#{updateTime})
/insert修改操作
UserMapper
int upUserName(UserInfo userInfo);UserMapper.xml:
update idupUserNameupdate userinfo set username#{username} where id#{id}
/updateUserMapperTest
Test
void upUserName() {UserInfo userInfo new UserInfo();userInfo.setId(2);userInfo.setUsername(si);int result userMapper.upUserName(userInfo);System.out.println(result);Assertions.assertEquals(1,result);
}删除操作
UserMapper
int delById(Param(id) Integer id);UserMapper.xml:
delete iddelByIddelete from userinfo where id#{id}
/deleteUserMapperTest
Test
void delById() {Integer id 2;int result userMapper.delById(id);System.out.println(result);Assertions.assertEquals(1,result);
}