作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
阶段1、深入多线程
阶段2、深入多线程设计模式
阶段3、深入juc源码解析
阶段4、深入jdk其余源码解析
阶段5、深入jvm源码解析
- 通用Mapper怎么开启接口扫描?
/**
* 注意,这里的@MapperScan是tk包下的,而不是org
* @author qiyu
*/
@MapperScan("com.bravo.happy.dao")
@SpringBootApplication
public class HappyDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HappyDemoApplication.class, args);
}
}
注意,这只是开启了接口扫描,和mapper.xml无关,要想扫描XML要另外配置。
- 引入了通用Mapper还能写XML吗?如果能,怎么做?
- SpringBoot环境下,MyBatis怎么开启SQL日志打印?
- 通用Mapper的接口方法是支持自动驼峰映射的,但我们手写的SQL如何开启驼峰映射?
# 打印SQL
logging:
level:
com.bravo.happy.dao: debug
mybatis:
# XML扫描路径
mapper-locations: classpath:mapper/**/*.xml
# 通用Mapper的方法会自动转换驼峰,但手写的SQL需要开启才能转换
configuration:
map-underscore-to-camel-case: on
- 通用Mapper能控制要查询的列吗?
/**
* SELECT id , name FROM tk_user WHERE ( ( age = ? ) )
*
* 虽然通用Mapper也能只查询指定列,但是复用性不好,每次都要在service层重新写一遍
*/
@Test
public void testSelectByExample() {
Example example = new Example(TkUserPojo.class);
// 指定查询列只查询id和name,指定条件列为age
example.selectProperties("id", "name").createCriteria().andEqualTo("age", 16);
userMapper.selectByExample(example);
}
通用Mapper可以指定查询的列,但只能通过Example对象,但其他诸如selectByPrimaryKey()方法是全列查询,因为mapper对象无法直接设置selectProperties()。
- 通用Mapper默认的是逻辑删除还是物理删除?怎么配置逻辑删除?
默认是物理删除,可以给业务含义为“删除”的字段加@LogicDelete注解实现逻辑删除。但是很遗憾,@LogicDelete对TkBaseMapper中的deleteByIdList()不起作用,它还是物理删除:
- 你喜欢用xxx还是xxxSelective()?比如insert()和insertSelective()选哪个?为什么?
建议使用带Selective的方法,因为它不是全量操作,可以避免修改其他无关字段,不影响数据库默认值。
- 通用Mapper支持批量操作吗?
默认提供了几个接口,可以实现批量查询(IN)、批量插入(全字段,如果不设置值则插入null)、批量物理删除,没提供批量更新。建议实际开发时手写批量操作的SQL,注意避免全表操作!
- 使用Example需要注意什么问题?
注意对 条件全空 or 集合size为0 的判断。