Springboot与Mybatis整合
最近自己用springboot和mybatis做了整合,记录一下:
1.先导入用到的jar包
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
- <dependency>
- <groupId>org.mybatis.generator</groupId>
- <artifactId>mybatis-generator-core</artifactId>
- <version>1.3.3</version>
- </dependency>
- <!-- 阿里数据源 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid.version}</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>1.3.0</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.4.0</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- </dependency>
2.配置配置文件(有些大家用不着的可以不配置)
- spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- spring.datasource.url=jdbc:mysql://localhost:3306/test
- spring.datasource.username=root
- spring.datasource.password=
- spring.datasource.initialSize=20
- spring.datasource.minIdle=50
- spring.datasource.maxActive=200
- spring.datasource.maxWait=60000
- spring.datasource.timeBetweenEvictionRunsMillis=60000
- spring.datasource.minEvictableIdleTimeMillis=300000
- spring.datasource.validationQuery=SELECT 1 FROM DUAL
- spring.datasource.testWhileIdle=true
- spring.datasource.testOnBorrow=false
- spring.datasource.testOnReturn=false
- spring.datasource.poolPreparedStatements=true
- spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
- spring.datasource.filters=stat,log4j
- spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
- #mybatis
mybatis.mapper-locations=classpath:/com/sxf/**/*Mapper.xml
mybatis.type-aliases-package=com.sxf.**.entity
3.解析数据源
- package com.sxf.config;
- import java.util.Properties;
- import javax.sql.DataSource;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.web.servlet.FilterRegistrationBean;
- import org.springframework.boot.web.servlet.ServletRegistrationBean;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.env.Environment;
- import com.alibaba.druid.pool.DruidDataSource;
- import com.alibaba.druid.support.http.StatViewServlet;
- import com.alibaba.druid.support.http.WebStatFilter;
- @Configuration
- public class DatasourceConfig {
- @Autowired
- private Environment env;
- @Bean
- public DataSource dataSource() {
- DruidDataSource druidDataSource = new DruidDataSource();
- druidDataSource.setDbType(env.getProperty("spring.datasource.type"));
- druidDataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
- druidDataSource.setUrl(env.getProperty("spring.datasource.url"));
- druidDataSource.setUsername(env.getProperty("spring.datasource.username"));
- druidDataSource.setPassword(env.getProperty("spring.datasource.password"));
- druidDataSource.setInitialSize(Integer.parseInt(env.getProperty("spring.datasource.initialSize")));
- druidDataSource.setMinIdle(Integer.parseInt(env.getProperty("spring.datasource.minIdle")));
- druidDataSource.setMaxActive(Integer.parseInt(env.getProperty("spring.datasource.maxActive")));
- druidDataSource.setMaxWait(Long.parseLong(env.getProperty("spring.datasource.maxWait")));
- // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
- druidDataSource.setTimeBetweenEvictionRunsMillis(
- Long.parseLong(env.getProperty("spring.datasource.timeBetweenEvictionRunsMillis")));
- // 配置一个连接在池中最小生存的时间,单位是毫秒
- druidDataSource.setMinEvictableIdleTimeMillis(
- Long.parseLong(env.getProperty("spring.datasource.minEvictableIdleTimeMillis")));
- druidDataSource.setValidationQuery(env.getProperty("spring.datasource.validationQuery"));
- druidDataSource.setTestWhileIdle(Boolean.getBoolean(env.getProperty("spring.datasource.testWhileIdle")));
- druidDataSource.setTestOnBorrow(Boolean.getBoolean(env.getProperty("spring.datasource.testOnBorrow")));
- druidDataSource.setTestOnReturn(Boolean.getBoolean(env.getProperty("spring.datasource.testOnReturn")));
- // 打开PSCache,并且指定每个连接上PSCache的大小
- druidDataSource.setPoolPreparedStatements(
- Boolean.getBoolean(env.getProperty("spring.datasource.poolPreparedStatements")));
- druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(
- Integer.parseInt(env.getProperty("spring.datasource.maxPoolPreparedStatementPerConnectionSize")));
- // 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
- // 通过connectProperties属性来打开mergeSql功能;慢SQL记录
- String cpStr = env.getProperty("spring.datasource.connectionProperties");
- if (null != cpStr) {
- Properties pro = new Properties();
- String[] kvArr = cpStr.split("\\;");
- if (null != kvArr && kvArr.length > 0) {
- for (String cp : kvArr) {
- String[] arr = cp.split("\\=");
- if (null != arr && arr.length == 2) {
- pro.put(arr[0], arr[1]);
- }
- }
- }
- druidDataSource.setConnectProperties(pro);
- }
- return druidDataSource;
- }
- @Bean
- public ServletRegistrationBean druidServlet() {
- return new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
- }
- }
这里配置@MapperScan扫描mybatis接口, 不需要在每个接口里面配置@Mapper
- package com.sxf.config;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.mybatis.spring.SqlSessionFactoryBean;
- import org.mybatis.spring.annotation.MapperScan;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.core.env.Environment;
- import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
- import org.springframework.core.io.support.ResourcePatternResolver;
- import org.springframework.jdbc.datasource.DataSourceTransactionManager;
- import org.springframework.transaction.PlatformTransactionManager;
- import org.springframework.transaction.annotation.EnableTransactionManagement;
- @Configuration
- @EnableTransactionManagement
- @MapperScan(basePackages="com.sxf.**.mapper", sqlSessionFactoryRef = "sqlSessionFactory")
- public class MyBatisConfig{
- @Autowired
- private DatasourceConfig dataSource;
- @Autowired
- private Environment env;
- @Bean(name = "sqlSessionFactory")
- public SqlSessionFactory sqlSessionFactoryBean() {
- SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
- bean.setDataSource(dataSource.dataSource());
- bean.setTypeAliasesPackage(env.getProperty("type-aliases-package"));
- //添加XML目录
- ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
- try {
- // bean.setConfigLocation(resolver.getResource(env.getProperty("mybatis.page-plugins-config")));
- bean.setMapperLocations(resolver.getResources(env.getProperty("mybatis.mapper-locations")));
- return bean.getObject();
- } catch(IllegalArgumentException e){
- e.printStackTrace();
- throw new RuntimeException(e);
- }catch (Exception e) {
- e.printStackTrace();
- e.getMessage();
- throw new RuntimeException(e);
- }
- }
- @Bean
- public PlatformTransactionManager annotationDrivenTransactionManager() {
- return new DataSourceTransactionManager(dataSource.dataSource());
- }
- }
mybatis接口,不需要添加@Mapper
- package com.sxf.profit.mapper;
- import com.sxf.profit.entity.InviteCode;
- public interface InviteCodeMapper {
- int deleteByPrimaryKey(Long id);
- int insert(InviteCode record);
- int insertSelective(InviteCode record);
- InviteCode selectByPrimaryKey(Long id);
- int updateByPrimaryKeySelective(InviteCode record);
- int updateByPrimaryKey(InviteCode record);
- }
4.写个测试controller,测试成功
- package com.sxf.controller;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.RestController;
- import com.sxf.profit.entity.InviteCode;
- import com.sxf.profit.mapper.InviteCodeMapper;
- @RestController
- public class InviteCodeController {
- @Autowired
- private InviteCodeMapper inviteCodeMapper;
- @GetMapping("/Hello/{id}")
- public InviteCode selectInviteCode(@PathVariable("id") Long id){
- return inviteCodeMapper.selectByPrimaryKey(id);
- }
- }
成功!!!
Springboot与Mybatis整合的更多相关文章
- SpringBoot与Mybatis整合方式01(源码分析)
前言:入职新公司,SpringBoot和Mybatis都被封装了一次,光用而不知道原理实在受不了,于是开始恶补源码,由于刚开始比较浅,存属娱乐,大神勿喷. 就如网上的流传的SpringBoot与Myb ...
- 30分钟带你了解Springboot与Mybatis整合最佳实践
前言:Springboot怎么使用想必也无需我多言,Mybitas作为实用性极强的ORM框架也深受广大开发人员喜爱,有关如何整合它们的文章在网络上随处可见.但是今天我会从实战的角度出发,谈谈我对二者结 ...
- SpringBoot+Shiro+mybatis整合实战
SpringBoot+Shiro+mybatis整合 1. 使用Springboot版本2.0.4 与shiro的版本 引入springboot和shiro依赖 <?xml version=&q ...
- SpringBoot系列——MyBatis整合
前言 MyBatis官网:http://www.mybatis.org/mybatis-3/zh/index.html 本文记录springboot与mybatis的整合实例:1.以注解方式:2.手写 ...
- SpringBoot与Mybatis整合实例详解
介绍 从Spring Boot项目名称中的Boot可以看出来,SpringBoot的作用在于创建和启动新的基于Spring框架的项目,它的目的是帮助开发人员很容易的创建出独立运行的产品和产品级别的基于 ...
- spring-boot、mybatis整合
一.MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 X ...
- springBoot和MyBatis整合中出现SpringBoot无法启动时处理方式
在springBoot和Myatis 整合中出现springBoot无法启动 并且报以下错误 Description: Field userMapper in cn.lijun.control ...
- springboot+Druid+mybatis整合
一.添加Druid.MySQL连接池.mybatis依赖 <!--整合Druid--> <dependency> <groupId>com.alibaba</ ...
- SpringBoot与Mybatis整合的设置
Mybatis和Spring Boot的整合有两种方式: 第一种:使用mybatis官方提供的Spring Boot整合包实现,地址:https://github.com/mybatis/spring ...
随机推荐
- Java起源
Java历史发展和特点 作为一名合格的程序员,如果不了解一些关于Java语言的起源是有一些不太合适的.下面就介绍一下我所了解的Java起源. 1.Java名字的来源 Java是印度尼西亚爪哇岛的英文名 ...
- Java序列化详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt228 以前在使用hibernate时候,domain域模型的JavaBean ...
- 记一次wiki数据爬取过程
最近有个爬取各国领导人信息的奇怪需求,要求百度和维基两种版本的数据,最要命的还要保持数据的结构不变.正好印象中隐约记得维基有专门的领导人列表页,不考虑爬取下来的格式不变的话应该很好爬的样子. 首先思路 ...
- poj 3621 二分+spfa
题意:给出一个有向图,问求一个回路,使得回路上的点权之和/边权之和最大. 这题主要是分析出如何确定ans值.我们将(a1*x1+a2*x2+..+an*xn)/(b1*x1+b2*x2+..+bn*x ...
- Push or Pull?
采用Pull模型还是Push模型是很多中间件都会面临的一个问题.消息中间件.配置管理中心等都会需要考虑Client和Server之间的交互采用哪种模型: 服务端主动推送数据给客户端? 客户端主动从服务 ...
- 小程序脚本语言WXS详解
WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就 ...
- linux命令每日一练:find与rm实现查找并删除目录或文件
linux命令每日一练 linux中find与rm实现查找并删除目录或文件 linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件 find 要查找的目录名 -name .s ...
- 个人作业2——英语学习APP案例分析(必应词典的使用)
第一部分 调研, 评测 1.使用环境:window 10 词典版本: 2.使用体验: 打开词典出现下面这一界面: 词典模块:出现了每日一词,每日一句,每日阅读板块,还提供了生词本,个人觉得最喜欢的是这 ...
- 201521123020《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 运用到了equ ...
- 201521123065 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 1.ArrayList只能存放对象: 2.对象包装类之间使用equals进行比较 ...