zoukankan      html  css  js  c++  java
  • SpringBoot | 3.2 整合MyBatis

    全局配置文件

    全局配置文件的书写方式有三种,分别是配置模式、注解模式以及混合模式。在配置之前,我们需要做些准备工作,让SpringBoot知道我们的配置文件写在哪里。

    准备工作:

    配置全局配置文件位置( 在application.yaml中指定Mapper配置文件的位置,以及指定全局配置文件的信息,建议配置在mybatis.configuration);

    mybatis:
      #全局配置文件位置
      config-location: classpath:mybatis/mybatis-config.xml  
      #sql映射文件位置
      mapper-locations: classpath:mybatis/mapper/*.xml 
      
      #定义别名扫描的包,需要与@Alias联合使用
      type-aliases-package: ……
      #具体类需要与@MappedJdbcTypes联合使用
      type-handlers-package: ……
      #执行器(Executor),可以配置STMPLE、REUSE、BATCH、默认为STMPLE
      executor-type: ……
      
      configuration:
        #配置MyBatis插件(拦截器等)
        interceptors: ……
        #级联延迟加载配置属性
        aggressive-lazy-loading: ……
      • 注意config-locationmapper-locations不能同在,理由如下:
      • 当需要使用mybatis-config.xml配置文件的时需要配置config-locationconfig-location的作用是确定mybatis-config.xml文件位置;而mapper-locations是用来注册xxxmapper.xml文件。如果使用了mybatis-config.xml,并且里面配置了mapper,那就不需要mapper-locations
    • 编写mapper接口,使用标准@Mapper注解( 也可以在启动类上加上@MapperScan替换@Mapper )

    @Mapper

    • 映射配置

    • 用在接口类上

    • 在接口类上添加了@Mapper,在编译之后会生成相应的接口实现类;

    • 如果有多组接口需要编译成实现类,需要在每个接口上标注一个@Mapper;

    @Mapper
    public interface UserDAO {
       //代码
    }

    @MapperScan

    • 映射扫描配置

    • 用在主启动类下;

    • 指定要变成实现类的接口所在的包,然后包下面的所有接口在编译之后都会生成相应的实现类;

    • 将MyBatis所需的对应接口扫描到Spring IOC容器中;

    • 可以解决@Mapper标注过多问题,直接在主启动类上加上一个@MapperScan即可;

    @SpringBootApplication
    //@MapperScan("com.dlhjw.mapper")
    @MapperScan(
        //指定扫描包
        basePackages = "com.dlhjw.mapper",
        //指定SqlSessionFactory,如果sqlSessionTemplate被指定,则作废
        sqlSessionFactoryRef = "sqlSessionFactory",
        //指定sqlSessionTemplate,将忽略sqlSessionFactory的配置(优先级高)
        sqlSessionTemplateRef = “sqlSessionTemplate”,
        //限制扫描接口,不常用
        //markerInterface = class.class,
        annotationClass = Repository.class
    )
    public class SpringbootMybatisDemoApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringbootMybatisDemoApplication.class, args);
        }
    }

    【以下不常用、不推荐】 上述两个接口都可以让SpringBoot知道用户配置的MyBatis映射关系在哪,除了用接口方式外,还可以:

    1. 通过MapperFactoryBean装配MyBatis;
    2. 使用MapperScannerConfigurer
    3. 使用MyBatis接口(因为SqlSessionFactory是SpringBoot自动生成好了,所以直接拿来使用);

    上面两个接口可改成如下代码:(不常用、不推荐)

    1. 通过MapperFactoryBean装配MyBatis:

    @Autowired
    SqlSessionFactory sqlSessionFactory = null;
    
    //定义一个MyBatis的Mapper接口
    @Bean
    public MapperFactoryBean<MyBatisUserDao> initMyBatisUserDao(){
        MapperFactoryBean<MyBatisUserDao> bean = new MapperFactoryBean<>();
        bean.setMapperInterface(UserDAO.class);
        bean.setSessionFactory(sqlSessionFactory);
        return beam;
    }

    2. 使用MapperScannerConfigurer:

    @Bean
    public MapperScannerConfigurer mapperScannerConfig(){
        //定义扫描器实例
        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
        //加载SqlSessionFactory,SpringBoot会自动生产,SqlSessionFactory实例
        mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
        //定义扫描的包
        mapperScannerConfigurer.setBeanPackage("com.dlhjw.mapper");
        //限定被标注@Repository的接口才被扫描
        mapperScannerConfigurer.setAnnotationClass(Repository.class);
        //通过继承某个接口限制扫描,一般使用不多
        //mapperScannerConfigurer.setMarkerInterface(....);
        return mapperScannerConfigurer;
    }

    3. 使用MyBatis接口:

    public interface MyBatisUserService{
        public User getUser(Long id);
    }
    
    @Service
    public class MyBatisUserServiceImpl implements MyBatisUserService{
        //因为在启动文件application.yaml配置了对应接口,所以直接依赖注入即可
        @Autowired
        private MyBatisUserDao myBatisUserDao = null;
    
        @Override
        public User getUser(Long id){
            return myBatisUserDao.getUser(id);
        }
    }

    https://www.cnblogs.com/dlhjw/p/15115803.html

    故乡明
  • 相关阅读:
    input输入框只能输入数字和 小数点后两位
    HAVING 子句
    GROUP BY 语句
    SUM()函数
    COUNT()函数
    MySQL AVG() 函数
    adb(16)-查看实时资源占用情况top
    adb(15)-刷机相关命令
    adb(14)-设备重启/检测root
    adb(13)-设置系统日期和时间
  • 原文地址:https://www.cnblogs.com/luweiweicode/p/15205295.html
Copyright © 2011-2022 走看看