通用Mapper怎么开接口扫描

作者简介:大家好,我是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()不起作用,它还是物理删除:

通用Mapper怎么开接口扫描_第1张图片

  • 你喜欢用xxx还是xxxSelective()?比如insert()和insertSelective()选哪个?为什么?

建议使用带Selective的方法,因为它不是全量操作,可以避免修改其他无关字段,不影响数据库默认值。

  • 通用Mapper支持批量操作吗?

默认提供了几个接口,可以实现批量查询(IN)、批量插入(全字段,如果不设置值则插入null)、批量物理删除,没提供批量更新。建议实际开发时手写批量操作的SQL,注意避免全表操作!

  • 使用Example需要注意什么问题?

注意对 条件全空 or 集合size为0 的判断。

你可能感兴趣的:(面试,java,mapper)