zoukankan      html  css  js  c++  java
  • mybatis配置

    mybatis在项目中需要三类文件

    1. 配置文件

    · 配置和数据连接的相关信息,例如事务管理、数据库连接池等信息。

    · 加载映射文件

    2. 映射文件

     定义如何操作数据库(增删改查等),指定sql输出结果所映射的java类型对象

    3. model类

    ----------------------------------------------------------------

    常用配置

    datasource

    数据源

    说明:数据源基于数据库连接池技术,方便连接数据库及管理连接。

    sqlSessionFactory

    简介: 字面上可以理解为一个创建sqlSession的工厂,基本mybatis中,sqlSessionFactory可以通过sqlSessionFactoryBuilder类创建,而在 MyBatis-Spring 中,则使用 SqlSessionFactoryBean 来替代。     

    内容:

    1. 设置数据源 

    2. 设置model

    3. 设置mapper

    4. 设置插件(分页插件等)

    dataSourceTransactionManager

    MyBatis-Spring利用spring的DataSourceTransactionManager,允许MyBatis参与到Spring的事务管理中,而不是给MyBatis创建一个新的特定的事务管理器。

    配置完成后可以在Spring中你通常的做法来配置事务。如@Transactional注解和AOP样式的配置都是支持的。在事务处理期间,一个单独的SqlSession对象将会被创建和使用。当事务完成时,这个session会以合适的方式提交或回滚。

    一旦事务创建之后,MyBatis-Spring 将会透明的管理事务。在你的 DAO 类中就不需要额 外的代码了。  

    内容: 

    1. 设置数据源

    sessionTemplate

    简介: sqlSession用来执行映射语句,提交或回滚操作,(sqlSession是一个接口)

    在MyBatis中, 我们可以使用SqlSessionFactory来创建SqlSession。

    而使用MyBatis-Spring之后, 你不再需要直接使用SqlSessionFactory, 因为你的bean可以通过一个线程安全的SqlSession来注入,基于Spring的事务配置来自动提交,回滚,关闭session,

    SqlSessionTemplate实现了SqlSession接口并保证使用的 SqlSession 是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。

    这就是说,在代码中无需对MyBatis的 SqlSession 进行替换。 SqlSessionTemplate 通常是被用来替代默认的 MyBatis 实现的 DefaultSqlSession ,

    内容: 

    1. sqlSessionFactory

     ---------------------

    映射mapper到service,有两种方式:

    1. MapperFactoryBean

    直接将数据映射器接口(mapper)到你的service层中(就像给类加上@Service), 需要时直接调用即可,省去不少调用mapper的代码

    内容:

    1. 设置mapper地址

    2. 设置SqlSessionFactory

    2. MapperScannerConfigurer

    MapperScannerBean每次只能注册一个映射器,而他能注册一个包底下的所有mapper

    内容: 1、设置mapper路径

    备注:  

    sqlSession

    sqlSession是应用程序与持久层进行交互的一个单线程对象,也是mybatis执行持久化操作的关键对象。

    包含以数据库为背景的,所有SQL操作的方法

    原理: 底层封装JDBC连接

    特点: 不是线程安全的,因此决不能将sqlSession实例的引用放在类的静态字段(多实例公用)甚至是实例字段,使用完sqlSession后关闭Session很重要

    实例:

    package com.sunland.apollo.configurer;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
    import com.github.pagehelper.PageHelper;
    import org.apache.ibatis.plugin.Interceptor;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    import org.springframework.core.io.support.ResourcePatternResolver;
    import org.springframework.jdbc.datasource.DataSourceTransactionManager;
    import tk.mybatis.spring.annotation.MapperScan;
    import tk.mybatis.spring.mapper.MapperScannerConfigurer;
    
    import javax.sql.DataSource;
    import java.util.Properties;
    
    import static com.sunland.apollo.configurer.ProjectConstant.*;
    
    
    @Configuration
    @MapperScan(basePackages = MASTER_MAPPER_PACKAGE, sqlSessionTemplateRef = "masterSqlSessionTemplate") //指定扫描的mapper包及所用sqlSessionTemplate
    public class MasterMybatisConfigurer {
        //配置数据源,这里用DruidDataSource
        @Bean(name = "masterDataSource", destroyMethod = "close", initMethod = "init")
        @ConfigurationProperties("spring.datasource.druid.master") //数据源配置
        @Primary
        public DruidDataSource druidDataSource() {
            return DruidDataSourceBuilder.create().build(); //数据源初始化
        }
      
      
    //配置事务管理 @Bean(name
    = "masterTransactionManager") @Primary public DataSourceTransactionManager masterTransactionManager(@Qualifier("masterDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
    //配置SqlSession工厂 @Bean(name
    = "masterSqlSessionFactory") @Primary public SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); factory.setDataSource(dataSource); factory.setTypeAliasesPackage(MASTER_MODEL_PACKAGE); //配置分页插件,详情请查阅官方文档 PageHelper pageHelper = new PageHelper(); Properties properties = new Properties(); properties.setProperty("pageSizeZero", "true");//分页尺寸为0时查询所有纪录不再执行分页 properties.setProperty("reasonable", "true");//页码<=0 查询第一页,页码>=总页数查询最后一页 properties.setProperty("logImpl", "STDOUT_LOGGING"); properties.setProperty("supportMethodsArguments", "true");//支持通过 Mapper 接口参数来传递分页参数 properties.setProperty("autoDialect", "false"); properties.setProperty("dialect", "mysql"); pageHelper.setProperties(properties); //添加插件 factory.setPlugins(new Interceptor[]{pageHelper}); //添加XML目录 ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factory.setMapperLocations(resolver.getResources(MASTER_MAPPER_LOCAL)); return factory.getObject(); }
       //配置sqlSession模板 @Bean(name
    = "masterSqlSessionTemplate") @Primary public SqlSessionTemplate masterSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory factory) { return new SqlSessionTemplate(factory); } //扫描、配置包下所有mapper @Bean(name = "masterMapperScannerConfigurer") public MapperScannerConfigurer masterMapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("masterSqlSessionFactory"); mapperScannerConfigurer.setBasePackage(MASTER_MAPPER_PACKAGE); //配置通用Mapper,详情请查阅官方文档 Properties properties = new Properties(); properties.setProperty("mappers", MAPPER_INTERFACE_REFERENCE); properties.setProperty("notEmpty", "false");//insert、update是否判断字符串类型!='' 即 test="str != null"表达式内是否追加 and str != '' properties.setProperty("IDENTITY", "MYSQL"); mapperScannerConfigurer.setProperties(properties); return mapperScannerConfigurer; } }
  • 相关阅读:
    可能是最简单的解决本地开发接口请求跨域问题的方案
    《Visual Studio程序员箴言》笔记
    vue后台项目记录
    新版本微信导致的ios表单bug
    longzhuapp项目笔记
    Session、LocalStorage、SessionStorage、Cache-Ctrol比较
    css3实现不同进度条
    axios请求接口的踩坑之路
    实现不同尺寸的图片在固定的区块内实现水平垂直居中
    for循环查找元素怎么跳出for循环
  • 原文地址:https://www.cnblogs.com/yanze/p/9718730.html
Copyright © 2011-2022 走看看