本博客介绍一下SpringBoot集成Mybatis,数据库连接池使用alibaba的druid,使用SpringBoot微框架虽然集成Mybatis之后可以不使用xml的方式来写sql,但是用惯了xml的其实也可以用xml来实现的,实现上具体用什么方式并不重要,主要是搭建一遍,对框架的运转就比较清晰。本博客还是用xml的方式来实现Mybatis的sql编写,不用注解方式。

maven配置

 <!-- springboot mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency>

当然要引入druid,mysql等等jar的话可以参考我一个项目里的parent工程的maven配置:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.muses.taoshop</groupId><artifactId>taoshop</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><name>taoshop</name><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.7.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!-- 模块版本 --><taoshop-web-portal.version>1.0</taoshop-web-portal.version><!-- 外部依赖 --><log4j.version>1.2.17</log4j.version><mysql.version>5.1.27</mysql.version><mybatis.version>3.4.0</mybatis.version><mybatis.spring.version>1.3.0</mybatis.spring.version><mybatis.springboot.version>1.3.1</mybatis.springboot.version><mysql-connector.version>5.1.39</mysql-connector.version><spring-boot.version>1.5.7.RELEASE</spring-boot.version><druid.version>1.1.2</druid.version><github.pagehelper.version>4.2.1</github.pagehelper.version><fastjson.version>1.2.7</fastjson.version><lombok.version>1.16.10</lombok.version></properties><modules><module>taoshop-quartz</module><module>taoshop-search</module><module>taoshop-common</module><module>taoshop-provider-api</module><module>taoshop-provider</module><module>taoshop-manager</module><module>taoshop-portal</module><module>taoshop-cms</module><module>taoshop-order</module><module>taoshop-sso</module></modules><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources><plugins><!-- 设置源文件编译 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.6.1</version><configuration><source>1.8</source><target>1.8</target><compilerVersion>1.8</compilerVersion><encoding>UTF-8</encoding><skipMain></skipMain><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></path></annotationProcessorPaths></configuration></plugin><!-- 解决资源文件的编码问题 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.0.2</version><configuration><encoding>UTF-8</encoding></configuration></plugin></plugins></build><dependencies><!-- Spring boot --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version></dependency><!-- redis --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>${spring-boot.version}</version></dependency><!-- springboot mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.springboot.version}</version></dependency><!-- 热部署--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!--  alibaba druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid.version}</version></dependency><!-- Themeleaf --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>${github.pagehelper.version}</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector.version}</version></dependency><!-- fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.35</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!-- 其他工具包--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.2.2</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.9</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version></dependency></dependencies><!--  设定Maven主仓库为阿里私服 --><repositories><repository><id>repos</id><name>Repository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></repository></repositories><!--  设定插件仓库 --><pluginRepositories><pluginRepository><id>pluginsRepos</id><name>PluginsRepository</name><url>http://maven.aliyun.com/nexus/content/groups/public</url></pluginRepository></pluginRepositories></project>

SpringBoot配置文件

server:port: 8081
#logging:
#  config: classpath:logback_spring.xml.bat
#  level:
#    com.muses.taoshop: debug
#  path: /data/logsspring:datasource:# 主数据源shop:url: jdbc:mysql://127.0.0.1:3306/taoshop?autoReconnect=true&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=falseusername: rootpassword: rootdriver-class-name: com.mysql.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource# 连接池设置druid:initial-size: 5min-idle: 5max-active: 20# 配置获取连接等待超时的时间max-wait: 60000# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000# 配置一个连接在池中最小生存的时间,单位是毫秒min-evictable-idle-time-millis: 300000# Oracle请使用select 1 from dualvalidation-query: SELECT 'x'test-while-idle: truetest-on-borrow: falsetest-on-return: false# 打开PSCache,并且指定每个连接上PSCache的大小pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,slf4j# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000# 合并多个DruidDataSource的监控数据use-global-data-source-stat: true#  jpa:
#    database: mysql
#    hibernate:
#      show_sql: true
#      format_sql: true
#      ddl-auto: none
#      naming:
#        physical-strategy: org.hibernate.boot.entity.naming.PhysicalNamingStrategyStandardImpl#  mvc:
#    view:
#      prefix: /WEB-INF/jsp/
#      suffix: .jsp#添加Thymeleaf配置thymeleaf:cache: falseprefix: classpath:/templates/suffix: .htmlmode: HTML5encoding: UTF-8content-type: text/html#Jedis配置
#  jedis :
#    pool :
#      host : 127.0.0.1
#      port : 6379
#      password : redispassword
#      timeout : 0
#      config :
#        maxTotal : 100
#        maxIdle : 10
#        maxWaitMillis : 100000

Application启动类

package com.muses.taoshop;import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.*;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.web.bind.annotation.*;
/**** <pre>*  SpringBoot启动配置类* </pre>* @author nicky* @version 1.00.00* <pre>* 修改记录*    修改后版本:     修改人:  修改日期:     修改内容:* </pre>*/
@Controller
@EnableScheduling//开启对计划任务的支持
@EnableTransactionManagement//开启对事务管理配置的支持
@EnableCaching
@EnableAsync//开启对异步方法的支持
@EnableAutoConfiguration
@ServletComponentScan
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,MybatisAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class})
public class PortalApplication {@RequestMapping("/")@ResponseBodyString home() {return "portal web!";}@RequestMapping("/doTest")@ResponseBodyString doTest(){System.out.println(Thread.currentThread().getName());String threadName = Thread.currentThread().getName();return threadName;}public static void main(String[] args) throws Exception {SpringApplication.run(PortalApplication.class, args);}}

@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,
MybatisAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class}),这个注释是必须的,开启自动扫描数据源和Mybatis配置文件

数据库配置
做好SpringBoot启动类的注解之后,需要编写Mybatis和数据源的配置类

写一个Constants类:

package com.muses.taoshop.common.core.database.config;/*** <pre>*  基本配置类* </pre>** @author nicky* @version 1.00.00* <pre>* 修改记录*    修改后版本:     修改人:  修改日期:     修改内容:* </pre>*/
public class BaseConfig {/*** 设置主数据源名称*/public static final String DATA_SOURCE_NAME = "shop";/*** 加载配置文件信息*/public static final String DATA_SOURCE_PROPERTIES = "spring.datasource.shop";/*** repository 所在包*/public static final String REPOSITORY_PACKAGES = "com.muses.taoshop.**.repository";/*** mapper 所在包*/public static final String MAPPER_PACKAGES = "com.muses.taoshop.**.mapper";/*** 实体类 所在包*/public static final String ENTITY_PACKAGES = "com.muses.taoshop.*.entity";/*** 自定义TypeHandler*/public static final String TYPE_HANDLERS_PACKAGES = "com.muses.taoshop.common.core.database.typehandlers";/*** Mybatis session 工厂*/public static final String SQL_SESSION_FACTORY = "sqlSessionFactory";/*** Mybatis 事务管理器*/public static final String MYBATIS_TRANSACTION_MANAGER = "mybatisTransactionManager";/*** Jedis连接池*/public static final String JEDIS_POOL = "jedisPool";/*** Jedis连接池配置*/public static final String JEDIS_POOL_CONFIG = "jedisPoolConfig";}

DataSource配置类:

package com.muses.taoshop.common.core.database.config;import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;import static com.muses.taoshop.common.core.database.config.BaseConfig.DATA_SOURCE_NAME;
import static com.muses.taoshop.common.core.database.config.BaseConfig.DATA_SOURCE_PROPERTIES;/*** <pre>*  DataSource配置类* </pre>** @author nicky* @version 1.00.00* <pre>* 修改记录*    修改后版本:     修改人:  修改日期:     修改内容:* </pre>*/
@Configuration
public class DataSourceConfig {@Bean(name = DATA_SOURCE_NAME)@ConfigurationProperties(prefix = DATA_SOURCE_PROPERTIES)public DataSource dataSource() {return DruidDataSourceBuilder.create().build();}
}

Mybatis配置类:

package com.muses.taoshop.common.core.database.config;//import com.muses.taoshop.common.core.database.annotation.MybatisRepository;
import com.muses.taoshop.common.core.database.annotation.TypeAliasesPackageScanner;
import org.apache.ibatis.io.VFS;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.*;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource;import static com.muses.taoshop.common.core.database.config.BaseConfig.*;/*** <pre>*  Mybatis配置类* </pre>** @author nicky* @version 1.00.00* <pre>* 修改记录*    修改后版本:     修改人:  修改日期:     修改内容:* </pre>*/
@MapperScan(basePackages = MAPPER_PACKAGES,//annotationClass = MybatisRepository.class,sqlSessionFactoryRef = SQL_SESSION_FACTORY
)
@ComponentScan
@EnableTransactionManagement
@Configuration
public class MybatisConfig {//@Autowired//MybatisSqlInterceptor mybatisSqlInterceptor;TypeAliasesPackageScanner packageScanner = new TypeAliasesPackageScanner();@Bean(name = DATA_SOURCE_NAME)@ConfigurationProperties(prefix = DATA_SOURCE_PROPERTIES)@Primarypublic DataSource dataSource(){return DataSourceBuilder.create().build();}@Primary@Bean(name = SQL_SESSION_FACTORY)public SqlSessionFactory sqlSessionFactory(@Qualifier(DATA_SOURCE_NAME)DataSource dataSource)throws Exception{//SpringBoot默认使用DefaultVFS进行扫描,但是没有扫描到jar里的实体类VFS.addImplClass(SpringBootVFS.class);SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();//factoryBean.setPlugins(new Interceptor[]{mybatisSqlInterceptor});factoryBean.setDataSource(dataSource);//factoryBean.setConfigLocation(new ClassPathResource("mybatis-config.xml"));ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();try{factoryBean.setMapperLocations(resolver.getResources("classpath*:/mybatis/*Mapper.xml"));String typeAliasesPackage = packageScanner.getTypeAliasesPackages();factoryBean.setTypeAliasesPackage(typeAliasesPackage);SqlSessionFactory sqlSessionFactory = factoryBean.getObject();return sqlSessionFactory;}catch (Exception e){e.printStackTrace();throw new RuntimeException();}}@Bean(name = MYBATIS_TRANSACTION_MANAGER)public DataSourceTransactionManager transactionManager(@Qualifier(DATA_SOURCE_NAME)DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}}

通配符别名扫描
这里需要注意一点,因为项目业务需要,这里的别名扫描是做到了竟然通配符的,详情可以参考我之前的博客:https://blog.csdn.net/u014427391/article/details/84723292

Mybatis例子实践
所以,SpringBoot集成Mybatis就基本搭建好了,下面来实践一个例子:
注意:Mybatis的xml文件都要放在resources资源文件夹下面的一个Mybatis文件夹里面,因为已经做了配置

factoryBean.setMapperLocations(resolver.getResources("classpath:/mybatis/Mapper.xml"));

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.muses.taoshop.item.mapper.ItemMapper" ><sql id="BaseColumnList" >id ,sku_code ,sku_name ,price ,stock ,last_modify_time as lastModifyTime,create_time as createTime</sql><sql id="OrderBy">ORDER BY price</sql><!-- 商品详情--><select id="getItemDetail" resultType="ItemDetail">SELECTitb.brand_name AS brandName,s.shop_name AS shopName,spu.item_name AS itemName,sku.price,sku.promotion_price AS promotionPrice,sku.img_path AS imgPath,sku.stockFROMitem_spu spuRIGHT JOIN item_brand itbON itb.id = spu.brand_idRIGHT JOIN shop_info sON s.id = spu.shop_idLEFT JOIN(SELECTs.price,s.promotion_price,s.spu_id,s.img_path,s.stockFROMitem_sku sGROUP BY s.spu_id) skuON sku.spu_id = spu.id<where>spu.id = #{spuId}</where></select></mapper>

Mapper接口类:

package com.muses.taoshop.item.mapper;import com.muses.taoshop.item.entity.ItemDetail;
import com.muses.taoshop.item.entity.ItemPortal;
import com.muses.taoshop.item.entity.ItemSpec;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.List;@Mapper
public interface ItemMapper {ItemDetail getItemDetail(@Param("spuId")int spuId);}

业务接口类:

package com.muses.taoshop.item.service;import com.muses.taoshop.item.entity.ItemDetail;
import com.muses.taoshop.item.entity.ItemPortal;
import com.muses.taoshop.item.entity.ItemSpec;
import com.muses.taoshop.item.mapper.ItemMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;/*** <pre>*  商品信息服务实现类* </pre>** @author nicky* @version 1.00.00* <pre>* 修改记录*    修改后版本:     修改人:  修改日期: 2018.06.24 22:37    修改内容:* </pre>*/
@Service
public class ItemServiceImpl implements IItemService {@AutowiredItemMapper itemMapper;/*** 获取商品详情信息* @return ItemDetail*/@Overridepublic ItemDetail getItemDetailInfo(int spuId){ItemDetail itemDetail = itemMapper.getItemDetail(spuId);return  itemDetail;}}

代码取自个人的开源项目:https://github.com/u014427391/taoshop,有需要可以参考

转载于:https://www.cnblogs.com/mzq123/p/10359195.html

SpringBoot+Mybatis集成搭建相关推荐

  1. springboot+mybatis集成自定义缓存ehcache用法笔记

    今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...

  2. SpringBoot+MyBatis+Shiro 搭建杂谈

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:用好Java中的枚举,真的没有那么简单!个人原创+1博客:点击前往,查看更多 链接:https://www.cn ...

  3. SpringBoot+MyBatis极速搭建教程

    数据库:mysql 框架:SpringBoot 上一篇文章中已经搭建好了springboot基础的web框架,并且已经可以访问页面展现出效果,但是这还不够,不能访问数据库的程序太low了.下面就是基于 ...

  4. springboot+mybatis+mysql搭建后端接口案例

    首先导入springboot项目 项目结构图如下 1.下载依赖,在pom.xml文件添加如下代码 <dependency><groupId>mysql</groupId& ...

  5. SPringBoot+mybatis 框架搭建例子

    2019独角兽企业重金招聘Python工程师标准>>> https://blog.csdn.net/qq_33768099/article/details/79787215 转载于: ...

  6. mysql carnation_14 springboot+mybatis集成pageHelper分页

    1.pom依赖 com.github.pagehelper pagehelper-spring-boot-starter 1.2.3 2.分页配置application.properties page ...

  7. springboot mybatis 事务_SpringBoot 下 Mybatis 的缓存

    "IT魔幻屋"致力于让你遇见更好的自己! 说起 mybatis,作为 Java 程序员应该是无人不知,它是常用的数据库访问框架.与 Spring 和 Struts 组成了 Java ...

  8. 【Java从0到架构师】SpringBoot - MyBatis

    SpringBoot - MyBatis 集成 MyBatis 引入依赖 数据源配置 - 源码 MyBatis 配置 - 源码 扫描 Dao MyBatis 主配置 - XML.注解.applicat ...

  9. SpringBoot+Mybatis+Swagger2环境搭建

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:calebman https://www.jianshu.c ...

最新文章

  1. 解决 webstrom sass 注释中文出错问题
  2. 半价秒杀,最后一天!戴尔i7高配电脑低至2750元!
  3. JVM实用参数(一)JVM类型以及编译器模式
  4. ps3无线无法与服务器通信,psp上网出现无法与服务器通信(8001006F)
  5. 分享一个JAVA专业接口开发利器,牛牛牛新鲜出炉!!!
  6. TCP超时设置的客户端重发5次
  7. mysql like html_mysql - MySQL RLIKE查找,然后替换打开和关闭HTML标记之间的所有字符 - 堆栈内存溢出...
  8. python︱用asyncio、aiohttp实现异步及相关案例
  9. 用jdbc操作mysql 实现注册功能_JDBC链接Mysql数据库---实现登陆注册功能
  10. osm数据下载 python_用Python编写小工具下载OSM路网数据
  11. Python少儿编程入门篇(1)基本数据类型
  12. 伪随机数的爆破--2
  13. 从返利网站看如何经营用户
  14. echarts 3D 柱状图
  15. PMBOK第六版工具与技术:数据收集数据分析数据表现
  16. SEM竞价和SEO优化有哪些区别?
  17. MATLAB 冒泡算法
  18. 编程命名规范—四种命名方法
  19. C++ Style and Technique FAQ (
  20. 【STM32】芯片自锁、No Cortex-M SW Device Found/HardFault_Handler无法下载等问题的解决办法

热门文章

  1. 基于 FPGA 的智力抢答器设计
  2. linux限制ip带宽,apache如何限制并发数 IP 带宽?
  3. linux用户开机.bashrc,验证linux shell在启动时会自动执行用户主目录下的.bashrc脚本...
  4. linux常用文件操作命令
  5. idea中springBoot项目修改html之类的文件后服务不自动更新
  6. Mozart Update 1(杯具额…)
  7. 删除MSSQL数据库text字段中恶意脚本Script=***.js/script的方法
  8. 数据库维护管理和监视新特性
  9. java arraylist 添加对象_如何在Java中将对象添加到ArrayList
  10. win7旗舰恢复出厂设置_iphone12怎么恢复出厂设置 iphone12还原所有设置方法介绍