MyBatis采坑记录

3,694 阅读1分钟

MyBatis 官方中文文档 www.mybatis.org/mybatis-3/z…

Java API问题

字段查不到

text类型字段查不到

原因:MyBatis selectByExample方法不会查询类型为text的字段,需要使用selectByExampleWithBLOBs()进行查询

@Mapper和@MapperScan

@Mapper和@MapperScan

解释:自定义mapper接口后,为了让mybatis将他扫描成Bean,需要在每个接口上加@Mapper注解,或者使用@MapperScan注解指定要扫描的所有包,并且可以使用‘*’通配符

@SpringBootApplication
@MapperScan({"com.kk.mysql.*.mapper", "com.kk.tidb.mapper"})
public class MyBatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyBatisApplication.class, args);
    }
}

@MapperScan扫描不同包中的同名Mapper会报冲突

解释:假设有两个数据源(即两个库),则启动文件会把两个库的mapper都扫描上,但如果两个包中都有OrderMapper,就会导致无法启动,比较不优化的是,@MapperScan没有一个排除列表,只能是改表名(两个数据源的mapper包中不能有重名的mapper)

sqlSession

sqlSession创建过程

  1. 定义一个Configuration对象,其中包含数据源、事务、mapper文件资源以及影响数据库行为属性设置settings(可以通过mybatis-config配置,spring-boot项目也可以通过设置application配置文件)
  2. 通过配置对象,则可以创建一个SqlSessionFactoryBuilder对象或者SqlSessionFactoryBean
  3. 通过SqlSessionFactoryBuilder或者SqlSessionFactoryBean获得SqlSessionFactory的实例
  4. SqlSessionFactory的实例可以获得操作数据的SqlSession实例,通过这个实例对数据库进行操作