本文在个人技术博客【鸟不拉屎】同步发布,详情可猛戳 亦可扫描文章末尾二维码关注个人公众号【鸟不拉屎】

Mybatis 初期使用比较麻烦,需要各种配置文件、实体类、Dao 层映射关联、还有一大推其它配置。mybatis-spring-boot-starter 就是 Spring Boot+ Mybatis 可以完全注解不用配置文件,也可以简单配置轻松上手。

mybatis-spring-boot-starter

官方说明:MyBatis Spring-Boot-Starter will help you use MyBatis with Spring Boot

其实就是 Mybatis 看 Spring Boot 这么火热也开发出一套解决方案来凑凑热闹,但这一凑确实解决了很多问题,使用起来确实顺畅了许多。mybatis-spring-boot-starter主要有两种解决方案,一种是使用注解解决一切问题,一种是简化后的老传统。

当然任何模式都需要首先引入mybatis-spring-boot-starter的 Pom 文件,现在最新版本是 2.0.1

<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>

我一般使用的是XML极简模式,可能是由于之前用的hibernate用习惯了

极简 xml 版本

极简 xml 版本保持映射文件的老传统,接口层只需要定义空方法,系统会自动根据方法名在映射文件中找对应的 Sql .

1 添加相关 Maven 文件

<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

完整的 Pom 包这里就不贴了,大家直接看源码

2、application.yml相关配置

推荐使用application.yml进行配置,其实使用application.yml或者application.properties都是一样的效果,application.yml最终是转换为application.properties进行生效的,只不过application.yml视觉效果看起来更加明了。新建项目默认为application.properties,直接改为application.yml,另外新增一个application-test.yml用户不同环境使用不同的配置文件用。

application.yml配置:

#指定配置文件为test
spring:
profiles:
active: test #配置Mybatis
mybatis:
type-aliases-package: com.niaobulashi.entity
mapper-locations: classpath:mapper/*.xml
configuration:
# 开启驼峰命名转换,如:Table(create_time) -> Entity(createTime)。不需要我们关心怎么进行字段匹配,mybatis会自动识别`大写字母与下划线`
map-underscore-to-camel-case: true #打印SQL日志
logging:
level:
com.niaobulashi.dao: DEBUG

application-test.yml配置:

spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver

Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中,对了,你一切都不用管了,直接拿起来使用就行了。

在启动类中添加对 mapper 包扫描@MapperScan

@SpringBootApplication
@MapperScan("com.niaobulashi.dao")
public class MybatisApplication { public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
} }

或者直接在 Mapper 类上面添加注解@Mapper,建议使用上面那种,不然每个 mapper 加个注解也挺麻烦的

3、添加 User 的实例

@Data
public class SysUserEntity implements Serializable {
private static final long serialVersionUID = 1L;
//用户ID
private Long userId; //用户名
private String username; //密码
private String password; //盐
private String salt; //邮箱
private String email; //手机号
private String mobile; //状态 0:禁用 1:正常
private Integer status; //创建时间
private Date createTime;
}

4、添加 User 的映射文件

<mapper namespace="com.niaobulashi.dao.SysUserDao">

    <!--查询用户的所有菜单ID-->
<select id="queryUserInfo" resultType="com.niaobulashi.entity.SysUserEntity">
SELECT
ur.*
FROM
sys_user ur
WHERE
1 = 1
AND ur.user_id = #{userId}
</select> </mapper>

其实就是把上个版本中 Mapper 的 Sql 搬到了这里的 xml 中了

5、编写 Mapper 层的代码

public interface SysUserDao {
/**
* 根据userId查询用户信息
* @param userId 用户ID
*/
List<SysUserEntity> queryUserInfo(Long userId);
}

5、编写Service层的代码

SysUserService接口类:

public interface SysUserService {
/**
* 查询用户的所有菜单ID
*/
List<SysUserEntity> queryUserInfo(Long userId);
}

SysUserServiceImpl实现类:

@Service("sysUserService")
public class SysUserServiceImpl implements SysUserService {
@Resource
private SysUserDao sysUserDao;
/**
* 查询用户的所有菜单ID
* @param userId
* @return
*/
@Override
public List<SysUserEntity> queryUserInfo(Long userId) {
return sysUserDao.queryUserInfo(userId);
}
}

7、测试

经过上面5个步骤就可以完成基本的接口开发,省去了Controller层的开发

@RunWith(SpringRunner.class)
@SpringBootTest
public class MabatisTest {
private final static Logger logger = LoggerFactory.getLogger(MabatisTest.class); @Autowired
private SysUserService sysUserService; @Test
public void queryUserInfo() throws Exception {
SysUserEntity userEntity = new SysUserEntity();
userEntity.setUserId(1L);
List<SysUserEntity> list = sysUserService.queryUserInfo(userEntity.getUserId());
logger.info("list:" + list);
} }

最后项目目录结构

总结

SpringBoot和Mybatis这对CP,完美

示例代码-github


关于作者:

个人博客:鸟不拉屎

github主页:niaobulashi

github博客:鸟不拉屎

掘金:鸟不拉屎

博客园:鸟不拉屎

知乎:鸟不拉屎

微博:胡浪同學

公众号:鸟不拉屎

Spring Boot2(一):使用Spring Boot2集成Mybatis基础搭建的更多相关文章

  1. Spring Boot 2.X(二):集成 MyBatis 数据层开发

    MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...

  2. 学习Spring Boot:(七)集成Mybatis

    前面都是用的是spring data JPA,现在学习下Mybatis,而且现在Mybatis也像JPA那样支持注解形式了,也非常方便,学习一下. 数据库 mysql 5.7 添加依赖 在pom文件中 ...

  3. springboot集成mybatis环境搭建以及实现快速开发微服务商品模块基本的增删改查!

    之前学习了springboot和mybatis3的一些新特性,初步体会了springboot的强大(真的好快,,,,,),最近趁着复习,参考着以前学习的教程,动手写了一个springboot实战的小例 ...

  4. MyBatis 基础搭建及架构概述

    目录 MyBatis 是什么? MyBatis 项目构建 MyBatis 整体架构 接口层 数据处理层 基础支持层 MyBatis 是什么? MyBatis是第一个支持自定义SQL.存储过程和高级映射 ...

  5. Spring Boot集成MyBatis的2种方式

    目录 写在前面 准备工作 配置数据库驱动 配置数据源 原生集成MyBatis 依赖配置 注册MyBatis核心组件 定义并使用映射器 通过MyBatis-Spring-Boot-Starter集成 默 ...

  6. 构建第一个Spring Boot2.0应用之集成mybatis、Druid(七)

    一.环境: IDE:IntelliJ IDEA 2017.1.1 JDK:1.8.0_161 Maven:3.3.9 springboot:2.0.2.RELEASE 二.说明:      本文综合之 ...

  7. 构建第一个Spring Boot2.0应用之集成mybatis(六)

    一.环境: IDE:IntelliJ IDEA 2017.1.1 JDK:1.8.0_161 Maven:3.3.9 springboot:2.0.2.RELEASE 二.步骤 方式一:利用配置文件配 ...

  8. Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制

    前言 学习SpringBoot集成Mybatis的第二章,了解到Mybatis自带的缓存机制,在部署的时候踩过了一些坑.在此记录和分享一下Mybatis的缓存作用. 本文章的源码再文章末尾 什么是查询 ...

  9. Spring Boot2 系列教程(二十一)整合 MyBatis

    前面两篇文章和读者聊了 Spring Boot 中最简单的数据持久化方案 JdbcTemplate,JdbcTemplate 虽然简单,但是用的并不多,因为它没有 MyBatis 方便,在 Sprin ...

随机推荐

  1. PLC中ST语言的几种程序流程控制语句

    ST语言是IEC61131-3中规定的5中标准语言之一,目前常用见品牌的PLC都支持这种语言(施耐德,AB可以直接选择创建该类型的程序段或者功能块,西门子的略微麻烦一点),ST语言的一个好处是移植性好 ...

  2. Java 中override、overload、overwrite区别,以及与多态的关系【转】

    因为早期的翻译导致了override和overwrite的解释及理解混乱,需要重新梳理这几个词及相关内容. 转自:http://blog.csdn.net/lzhang007/article/deta ...

  3. 使用python移动飞信模块发送短信

    作者:miaoo 1.应用场景 由于自己做的一个系统需要用到发送短信到自己手机的功能,于是搜索了一下,发现了一个通过移动飞信通道发送短信开源库:PyFetion PyFetion 模拟实现了飞信的通信 ...

  4. 与jQuery的感情碰撞——由浅入深学jQuery

    原来的时候自己看过jQuery,但是对于什么是jQuery,除了知道jQuery是一种javascript类库外,除了会用几个网页特效外,其他的我这真的是不知道啊.眼看自己就要找工作了,所以自己需要好 ...

  5. python短信轰炸机版本smsbomb----------部分(post)

    用一些用手机号注冊且须要发送验证码的站点的漏洞.能够向不论什么人的手机号发送短信,当然短信内容,我们无法控制.所以主要工作还是寻找这种站点.然后利用Fiddler或者HttpWatch分析请求.使用p ...

  6. HDOJ 2189 悼念512四川汶川大地震遇难者——来生一起走 【生成函数】

    意甲冠军:没有解释的很清楚. 策略:如果, 这是改变一个简单的生成函数. 这道题做了好久,才明确是那有毛病.还是理解的不够深刻. AC代码: #include<stdio.h> #incl ...

  7. WPF ListBoxItem模板中添加CheckBox选中问题

    原文:WPF ListBoxItem模板中添加CheckBox选中问题 是这样的,需要一个ListBox来展示照片,并添加一个选中的CheckBox.这就需要对ListBox的ItemTemplate ...

  8. sql server 查询存储过程指令

    Sp_helptext PROCEDUREName 例子 创建存储过程 CREATE PROCEDURE SelectFromBitTable AS BEGIN select pkid,isdelet ...

  9. jquery子元素过滤器

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  10. wpf窗体定位

    原文:wpf窗体定位 据WPF外包小编了解,通常,不需要在屏幕上明确定位窗口.而是简单地将WindowState属性设置为Normal,并忽略其他所有细节.另一方面,很少会将WindowStartup ...