Spring boot和MyBatis的整合

来源:互联网 发布:苏州淘宝模特招聘 编辑:程序博客网 时间:2024/05/21 07:51

Spring Boot和MyBatis的整合有两种方案:
1. 使用MyBatis官方提供的Spring Boot整合包实现,地址:https://github.com/mybatis/spring-boot-starter
2. 使用MyBatis和Spring的整合方式,也就是我们常规的整合方式。
推荐使用第二种,第一种在做后续的扩展不太方便,采用第二种,详细代码如下

第一步:创建MyBatis的配置文件

Spring Boot所谓的零配置是指和Spring相关的配置零配置,尽可能省去一切和Spring相关xml配置,但是MyBatis自身的配置还是要的,它和Spring有没有啥关系,只不过两者进行整合,但它还是一个独立的个体,配置MyBatis的基本xml文件:mybatis-config.xml。

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <!-- springboot省去的xml是指不需要Spring相关的xml配置,MyBatis自己的xml配置还是要保留 -->    <settings>        <!-- 驼峰的自动映射 -->        <setting name="mapUnderscoreToCamelCase" value="true" />    </settings>    <plugins>        <plugin interceptor="com.github.pagehelper.PageHelper">            <property name="dialect" value="mysql" />            <!-- 设置为true时,使用RowBounds分页会进行count查询 -->            <property name="rowBoundsWithCount" value="true" />        </plugin>        <plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">            <!--主键自增回写方法,默认值MYSQL,详细说明请看文档 -->            <property name="IDENTITY" value="MYSQL" />            <!--通用Mapper接口,多个通用接口用逗号隔开 -->            <property name="mappers" value="com.github.abel533.mapper.Mapper" />        </plugin>    </plugins></configuration>

第二步:配置数据源

MyBatis是对数据库的操作,涉及到连接池,所以需要数据源,可以直接在Spring Boot的启动类中进行配置

package com.hhu.cart;import javax.sql.DataSource;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.PropertySource;import com.jolbox.bonecp.BoneCPDataSource;@Configuration@SpringBootApplication//@ComponentScan(basePackages="com.hhu")@PropertySource(value={"classpath:env.properties","classpath:httpclient.properties","classpath:jdbc.properties","classpath:log4j.properties"}, ignoreResourceNotFound=true)public class TaotaoApplication {    @Value("${jdbc.username}")    private String jdbcUsername;    @Value("${jdbc.password}")    private String jdbcPassword;    @Value("${jdbc.url}")    private String jdbcUrl;    @Value("${jdbc.driverClassName}")    private String jdbcDriverClassName;    @Bean(destroyMethod="close")    public DataSource dataSource() {        BoneCPDataSource boneCPDataSource = new BoneCPDataSource();        boneCPDataSource.setUsername(jdbcUsername);        boneCPDataSource.setPassword(jdbcPassword);        boneCPDataSource.setJdbcUrl(jdbcUrl);        boneCPDataSource.setDriverClass(jdbcDriverClassName);        //设置和数据库连接池中空间连接的时间剪个,默认240,如果取消则设为0        boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);        //设置连接池中未使用的连接最大存活时间,默认值60,如果永远存活则设为0        boneCPDataSource.setIdleMaxAgeInMinutes(30);        //每个分区最大的连接数        boneCPDataSource.setMaxConnectionsPerPartition(100);        //每个区最小的连接数        boneCPDataSource.setMinConnectionsPerPartition(5);        return boneCPDataSource;    }    public static void main(String[] args) {        SpringApplication.run(TaotaoApplication.class, args);    }}

第三步:配置Spring对MyBatis管理的配置

这一步其实就是通过Spring对MyBatis的管理获取SqlSessionFactoryBean,代码如下:

package com.hhu.cart.spring.config;import javax.sql.DataSource;import org.mybatis.spring.SqlSessionFactoryBean;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.core.io.support.ResourcePatternResolver;/** * MyBatis和Spring的整合,以往多是xml的配置方式,这里改为注解的方式 * @author Weiguo Liu * @data 2017年11月27日 */@Configurationpublic class MyBatisConfig {    /*     * 在Application中创建了DateSource,这里配置MyBatis时直接注入即可     * 如果这里不使用@Autowired注入,那么在下面sqlSessionFactoryBean     * 方法中可以直接以形参的方式直接写,Spring会自动注入     */    @Autowired    private DataSource dataSource;    /*     * 主要作用就是创建这个SqlSessionFactory     */    @Bean    @ConditionalOnMissingBean //当容器里没有指定的Bean的情况下创建该对象    public SqlSessionFactoryBean sqlSessionFactoryBean() {        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        // 设置数据源        sqlSessionFactoryBean.setDataSource(dataSource);        // 设置mybatis的主配置文件        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();        Resource mybatisConfigXml = resolver.getResource("classpath:mybatis/mybatis-config.xml");        sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);        // 设置别名包        sqlSessionFactoryBean.setTypeAliasesPackage("com.hhu.cart.pojo");        return sqlSessionFactoryBean;    }}

第四步:配置MyBatis的扫描类

MyBatis对数据库的操作少不了SQL语句的mapper文件,这里主要实现对mapper文件的扫描。

package com.hhu.cart.spring.config;import org.mybatis.spring.mapper.MapperScannerConfigurer;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configuration//知名它是一个配置类@AutoConfigureAfter(MyBatisConfig.class) //保证在MyBatisConfig实例化(存在SqlSessionFactory)之后再实例化该类public class MapperScannerConfig {    // mapper接口的扫描器    @Bean    public MapperScannerConfigurer mapperScannerConfigurer() {        MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();        mapperScannerConfigurer.setBasePackage("com.hhu.cart.mapper");        return mapperScannerConfigurer;    }}

其他的和以前的SSM整合大同小异

原创粉丝点击