1、IDEA中mapperxml出现如下界面
解决方法:Ctrl+ALt 然后出现的第一条点进去,然后第二个子类表中会显示出来有个disable选项的,点击一下就可以解决了。
2、@MapperScan
作用:指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类,好处是可以不用在dao层或者mapper层(这两层其实是一个意思)添加@Mapper注解,直接在启动类上面定义就可以了
添加位置:是在Springboot启动类上面添加,
3、测试方法中
3.1实现步骤
(1)、一个XXXDao(XXXMapper)对应一个XXXDaoTest,使用的时候直接在mapper中,选择一个方法,然后右键,出现Goto后,点击列表最下面的test语句,进行勾选,选择的是junit4,来进行测试
(2)、测试的时候先extends继承主的test类,主要是拿到主的test类中的@RunWith(SpringRunner.class)和@SpringBootTest,因为每次都要把这两个注解加到子测试类中,还不如直接继承父类
(3)、继承好了之后就引入对应的Dao,在Dao上面写上注解@Autowied或者@Resource引入这个Dao(Mapper)类
(4)、在每一个测试类下面进行测试
附图~~~~~~
4.编写代码中遇到的一些区别
4.1 Count(*)和Count(1)的区别
一般情况下,Select Count ()和Select Count(1)两着返回结果是一样的假如表沒有主键(Primary key), 那么count(1)比count()快,如果有主键的话,那主键作为count的条件时候count(主键)最快
优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描
4.2 insert和insertSelective区别
两者的区别在于如果选择insert 那么所有的字段都会添加一遍即使没有值
但是如果使用insertSelective就会只给有值的字段赋值(会对传进来的值做非空判断)
4.3 jdbcType=“DATE"和jdbcType=” TIMESTAMP"的区别
当传入null值时,jdbcType 会防止null空指针异常报错
Mybatis 中jdbcType=“DATE” ,日期精确到年月日 剩余分秒 填0补齐
jdbcType=" TIMESTAMP",日期精确到分秒
5、@Transactional
事务,这个之前写那个权限管理系统的时候也有提到过,然后的话,这个现在加在测试类上面,
起到一个回滚的作用,可以避免那些数据写到数据库里面,对数据造成污染
5.1 控制台打印SQL语句
在配置文件中加入这一行代码即可,实现在控制台打印SQL语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
6、Postman+IDEA 进行调试
6.1 传入的值和后台的值不一致的时候,使用@RequestParam(“username”)
这个经常会在前后台交接的时候出现,所以这个我们改成@RequestParam(“username”)的值
再次执行Postman的PostMapping,可以得到以下如图所示的数据
6.2 传入的是JSON格式的时候,参数列表中加上@RequestBody
传入JSON的时候,加上@RequestBody,用于接收到那个JSON