此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

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; } }

 

posted @ 2018-09-28 18:38  炎泽  阅读(304)  评论(0编辑  收藏  举报