SpringBoot 2.X整合Mybatis
1、创建工程环境
勾选Web、Mybatis、MySQL,如下
依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
创建完成之后注意,MyBatis依赖的命名和其他库的命名不太一样,是的这个整合jar包并不是springboot自己的,这表示该starter是由第三方提供的,就像Druid
数据源一样,也是第三方的。
方便阅读,先贴出下面操作编写的类位置信息,如下图:
2、配置数据库连接信息
这里使用yml方式
spring:
datasource:
username: root
url: jdbc:mysql://localhost:3306/ufida?serverTimezone=UTC
password: 123456
driver-class-name: com.mysql.jdbc.Driver
#如果要使用Druid数据源就要导入相应jar包,当然也可以不指定type
type: com.alibaba.druid.pool.DruidDataSource
配置完成后,MyBatis就可以创建实体类来使用。
3、编写实体类
实体类:dao包下的Userdao
public class Userdao {
private int user_id;
private String userName;
private String passWord;
private int usertypeid;
getXXX...
setXXX...
toString...
}
4、编写Mapper接口类
Mapper接口类:mapper包下的UserMapper
@Mapper
@Repository
public interface UserMapper {
//只是整合测试,为了可读性,只写了一个方法
List<Userdao> queryUserList();
}
这里要注意一下@Mapper注解,@Mapper注解添加位置在接口类上面它的作用是在编译之后会生成相应的接口实现类,这种方法也是官方推荐使用的!这里只是测试整合mybatis编写一个Mapper接口即可,如果有需求要很多接口都要变成实现类,那么需要在每个接口类上加上@Mapper注解,比较麻烦,解决这个问题用@MapperScan注解。简单点说@MapperScan注解就相当于直接扫描指定包,上面的代码所在包是com.yichunnnn.jdbcboot.mapper
包下,如果要用@MapperScan注解,就相当于如下即可
@MapperScan("com.yichunnnn.jdbcboot.mapper") //相当于@Mapper
@SpringBootApplication
public class JdbcbootApplication {
public static void main(String[] args) {
SpringApplication.run(JdbcbootApplication.class, args);
}
}
5、编写Mapper映射文件
Mapper映射文件编写的位置以及名字为:classpath:mybatis/mapper/UserMapper.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.yichunnnn.jdbcboot.mapper.UserMapper">
<select id="queryUserList" resultType="Userdao">
select * from user
</select>
</mapper>
考虑到可读性,这里只编写一个查询的方法,同时特别注意
只要错了一处都会报错!
6、SpringBoot 整合Mybatis
实际上Mybatis的整合过程像极了我们程序员的一生。
在SpringBoot 整合Mybatis之前,我们回忆回忆以前 MyBatis 单独使用时,myBatis 核心配置文件要配置数据源、事务、连接数据库账号、密码....是的全是这货一个人干,都要亲力亲为。这就是我们的低谷期
myBatis 与 spring 整合的时候,配置数据源、事务、连接数据库的账号什么的都交由 spring 管理就行,就不用什么都自己管理自己去干。这就是我们春风得意的时候,事业有着落...
再后来,SpringBoot 整合Mybatis的时候,数据源什么的,springboot都默认准备好了,甚至不使用mybatis配置文件也没问题,如果我们自己已经编写了 myBatis 的映射配置文件,则只要告诉 spring boot 这些文件的位置的好了,如下(yml写法),这简直是事业有成,迎娶白富美,走上人生巅峰...
#整合Mybatis #指定myBatis的核心配置文件与Mapper映射文件
mybatis:
mapper-locations: classpath:mybatis/mapper/*.xml
#注意:对应实体类的路径
type-aliases-package: com.yichunnnn.jdbcboot.dao
故事是美好的,然而事实却是骨感的.....
最后的配置文件也就如上图效果所示,如果需要完全理解配置文件可以从 org.mybatis.spring.boot.autoconfigure.MybatisProperties
类中查看(鼠标点击属性就可以进入),当然也可以从官方文档中查阅:http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
7、编写controller层代码
@RestController
public class MybatisController {
@Autowired
private UserMapper userMapper;
@GetMapping("/selectUser")
public String selectUser(){
List<Userdao> userdaos = userMapper.queryUserList();
for (Userdao user : userdaos) {
System.out.println(user);
}
return "select success == SpringBoot 2.X整合Mybatis成功!";
}
}
运行测试
效果如上,则整合成功!
8、SpringBoot 2.X整合Mybatis原理
SpringBoot 2.X整合Mybatis原理实际上就隐含在org.mybatis.spring.boot.autoconfigure
包中,这里面蕴含着SpringBoot 整合Mybatis的精华原理所在,具体位置如下
在myBatis 与 spring 整合的时候,开发者需要自己提供两个Bean
,一个SqlSessionFactoryBean
,还有一个是MapperScannerConfigurer
,在Spring Boot
中,这两个东西虽然不用开发者自己提供了,但是并不意味着这两个Bean不需要了,在org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
类中,我们可以看到Spring Boot提供了这两个Bean,关键源码如下:
@org.springframework.context.annotation.Configuration
@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(MybatisProperties.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration implements InitializingBean {
@Bean
@ConditionalOnMissingBean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource);
return factory.getObject();
}
@Bean
@ConditionalOnMissingBean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
ExecutorType executorType = this.properties.getExecutorType();
if (executorType != null) {
return new SqlSessionTemplate(sqlSessionFactory, executorType);
} else {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
@org.springframework.context.annotation.Configuration
@Import({ AutoConfiguredMapperScannerRegistrar.class })
@ConditionalOnMissingBean(MapperFactoryBean.class)
public static class MapperScannerRegistrarNotFoundConfiguration implements InitializingBean {
@Override
public void afterPropertiesSet() {
logger.debug("No {} found.", MapperFactoryBean.class.getName());
}
}
}
从类上的注解可以看出,当当前类路径下存在SqlSessionFactory
、 SqlSessionFactoryBean
以及DataSource
时,这里的配置才会生效,SqlSessionFactory
和SqlTemplate
都被提供了。这段代码的意义就在于Spring Boot
中MyBatis
多数据源的配置时做了重要的参考!
当然如果对mybatis的配置属性感兴趣的也可以参考MybatisProperties
类,要探索更多原理主要以org.mybatis.spring.boot.autoconfigure
包为中心进行参考!
如果本文对你有一点点帮助,那么请点个赞呗,谢谢~
最后,若有不足或者不正之处,欢迎指正批评,感激不尽!如果有疑问欢迎留言,绝对第一时间回复!
欢迎各位关注我的公众号,里面有一些java学习资料和一大波java电子书籍,比如说周志明老师的深入java虚拟机、java编程思想、核心技术卷、大话设计模式、java并发编程实战.....都是java的圣经,不说了快上Tomcat车,咋们走!最主要的是一起探讨技术,向往技术,追求技术,说好了来了就是盆友喔...
参考:
http://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
https://blog.csdn.net/u012702547/article/details/88643598
SpringBoot 2.X整合Mybatis的更多相关文章
- 【springboot spring mybatis】看我怎么将springboot与spring整合mybatis与druid数据源
目录 概述 1.mybatis 2.druid 壹:spring整合 2.jdbc.properties 3.mybatis-config.xml 二:java代码 1.mapper 2.servic ...
- SpringBoot当中如何整合mybatis和注入
[学习笔记] 6.整合mybatis和注入: 马克-to-win@马克java社区: 根据第3部分的helloworld例子,用那个项目做底子.pom.xml只需要加入mybatis和mysql的部分 ...
- springboot笔记07——整合MyBatis
前言 Springboot 整合 MyBatis 有两种方式,分别是:"全注解版" 和 "注解.xml混合版". 创建项目 创建Springboot项目,选择依 ...
- springboot学习2 整合mybatis
springboot整合mybatis 一.添加mybatis和数据库连接的依赖 <!--整合mybatis--> <dependency> <groupId>or ...
- SpringBoot学习之整合Mybatis
本博客使用IDEA开发工具,通过Maven构建SpringBoot项目,初始化项目添加的依赖有:spring-boot-starter-jdbc.spring-boot-starter-web.mys ...
- SpringBoot | 3.2 整合MyBatis
目录 前言 1. 导入MyBatis场景 1.1 初始化导向 1.2 手动导入 2. *MyBatis自动配置原理 3. 全局配置文件 @Mapper @MapperScan 3.1 配置模式 3.2 ...
- 利用IDEA搭建SpringBoot项目,整合mybatis
一.配置文件.启动项目 生成之后这几个文件可以删掉的 配置application spring.datasource.url=jdbc:mysql://localhost:3306/test?serv ...
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...
- SpringBoot学习:整合Mybatis,使用HikariCP超高性能数据源
一.添加pom依赖jar包: <!--整合mybatis--> <dependency> <groupId>org.mybatis.spring.boot</ ...
随机推荐
- Python 2.X 版本 600行入门基础
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...
- oracle函数 ABS(x)
[功能]返回x的绝对值 [参数]x,数字型表达式 [返回]数字 [示例] select abs(100),abs(-100) from dual; sign(x) [功能]返回x的正负值 [参数]x, ...
- poj 3743 LL’s cake (PSLG,Accepted)
3743 -- LL’s cake 搞了好久都过不了,看了下题解是用PSLG来做的.POJ 2164 && LA 3218 Find the Border (Geometry, PSL ...
- H3C 网络接口层
- C#循环语句练习(二)
1.求1!+2!+...+n! 所有阶乘的和 2.求100以内的质数 (1)第一种做法 (2)另一种做法 3. 总数=幼兔+小兔+成兔成兔=上个月的小兔+上个月的成兔小兔=上个月的幼兔幼兔=这个月的成 ...
- DOMjudge配置
DOMjudge配置补充 系统环境为 Debbian GNU/Linux 9 (stretch) 64-bit 在Web server configuration中, ln -s etc/apache ...
- H3C PPP MP配置示例二
- Vue 各个阶段生命周期函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- H3C RIP路由表的初始化
- UVA 11400"Lighting System Design"
传送门 错误思路 正解 AC代码 参考资料: [1]:https://www.cnblogs.com/Kiraa/p/5510757.html 题意: 现给你一套照明系统,这套照明系统共包含 n 种类 ...