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</ ...
随机推荐
- ViewPager封装工具类: 轻松实现APP导航或APP中的广告栏
相信做app应用开发的,绝对都接触过ViewPager,毕竟ViewPager的应用可以说无处不在:APP第一次启动时的新手导航页,APP中结合Fragment实现页面滑动,APP中常见的广告栏的自动 ...
- mysql数据库之linux版本
http://repo.mysql.com/yum/mysql-5.6-community/ 安装 ...
- Java变量以及内存分配
Java变量以及内存分配(非常重要) 堆栈 静态存储区域 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操 ...
- H3C 分页显示
- 小程序中使用threejs
webgl调试 起初使用threejs 在小程序里面调试,明明是按着官方的文档来,但是会发现开发者工具上面会提示getContext,经过一翻摸索,发现webgl调试只能在手机端调试. 总结:webg ...
- oracle避免使用耗费资源的操作
带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需 ...
- HMM(隐马尔科夫)用于中文分词
隐马尔可夫模型(Hidden Markov Model,HMM)是用来描述一个含有隐含未知参数的马尔可夫过程. 本文阅读了2篇blog,理解其中的意思,附上自己的代码,共同学习. 一.理解隐马尔科夫 ...
- npm镜像及配置方法
npm全称Node Package Manager,是node.js的模块依赖管理工具.由于npm的源在国外,所以国内用户使用起来各种不方便.下面整理出了一部分国内优秀的npm镜像资源,国内用户可以选 ...
- 递归求gcd(a,b)
int gcd(int a,int b) { ) return a; else return gcd(b,a%b); }
- Vue 动画的钩子函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...