前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法。不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。

今天主要讲解Springboot整合Mybatis,并实现最基本的增删改查功能。MyBatis 是现如今最流行的 ORM 框架之一,同时也支持普通的 SQL 查询,存储过程等功能的持久层框架。 MyBatis 能让开发者用很简单的代码就能实现数据库操作,非常高效。

Spring Boot整合Mybatis的方式有两种:一种是注解形式的,也就是没有Mapper.xml文件,还有一种是XML形式的。MyBatis 以前只有 XML 配置这种使用的形式,到了后来注解使用特别广泛, MyBatis 也顺应潮流提供了注解的支持,接下来给大家介绍如何使用 XML 版本。

一、整合Mybatis

1、pom.xml增加mybatis相关依赖

我们只需要加上pom.xml文件这些依赖即可。

       <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.41</version></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.1</version></dependency><!--mapper--><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>1.2.4</version></dependency><!-- pagehelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.3</version></dependency><!-- druid 数据库连接框架--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.9</version></dependency><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.2</version><scope>compile</scope><optional>true</optional></dependency>

2、application.properties配置数据连接

application.properties中需要增加mybatis相关的数据库配置。

############################################################
# 数据源相关配置,这里用的是阿里的druid 数据源
############################################################
spring.datasource.url=jdbc:mysql://localhost:3306/zwz_test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.druid.initial-size=1
spring.datasource.druid.min-idle=1
spring.datasource.druid.max-active=20
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.stat-view-servlet.allow=true############################################################
# mybatis 相关配置
############################################################
mybatis.type-aliases-package=com.weiz.pojo
mybatis.mapper-locations=classpath:mapper/*.xml
mapper.mappers=com.weiz.utils.MyMapper    #这个MyMapper 就是我之前创建的mapper统一接口。后面所有的mapper类都会继承这个接口
mapper.not-empty=false
mapper.identity=MYSQL
# 分页框架
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql

这里的配置有点多,不过最基本的配置都在这。

3、在启动主类添加扫描器

在SpringBootStarterApplication 启动类中增加包扫描器。

@SpringBootApplication//扫描 mybatis mapper 包路径@MapperScan(basePackages = "com.weiz.mapper")     // 这一步别忘了。//扫描 所有需要的包, 包含一些自用的工具类包 所在的路径@ComponentScan(basePackages = {"com.weiz","org.n3r.idworker"})public class SpringBootStarterApplication {    public static void main(String[] args) {        SpringApplication.run(SpringBootStarterApplication.class, args);    }}

注意:这一步别忘了,需要在SpringBootStarterApplication 启动类中增加包扫描器,自动扫描加载com.weiz.mapper 里面的mapper 类。

以上,就把Mybatis 整合到项目中了。 接下来就是创建表和pojo类,mybatis提供了强大的自动生成功能。只需简单几步就能生成pojo 类和mapper。

二、代码自动生成工具

Mybatis 整合完之后,接下来就是创建表和pojo类,mybatis提供了强大的自动生成功能。只需简单几步就能生成pojo 类和mapper。Spring Boot有Mybatis  generator自动生成代码插件,能自动生成pojo实体类、接口、mapper.xml 文件,提高开发效率。这里就不介绍怎么安装使用mybatis  generator插件。介绍一个简单的GeneratorDisplay自动生成类。

1、增加generatorConfig.xml配置文件

在resources文件下创建generatorConfig.xml文件。此配置文件独立于项目,只是给自动生成工具类的配置文件,具体配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="MysqlContext" targetRuntime="MyBatis3Simple" defaultModelType="flat"><property name="beginningDelimiter" value="`"/><property name="endingDelimiter" value="`"/><plugin type="tk.mybatis.mapper.generator.MapperPlugin"><property name="mappers" value="com.weiz.utils.MyMapper"/></plugin><!-- 数据库连接配置--> <jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/zwz_test"userId="root"password="root"></jdbcConnection><!-- 对于生成的pojo所在包 --><javaModelGenerator targetPackage="com.weiz.pojo" targetProject="src/main/java"/><!-- 对于生成的mapper所在目录 --><sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/><!-- 配置mapper对应的java映射 --><javaClientGenerator targetPackage="com.weiz.mapper" targetProject="src/main/java" type="XMLMAPPER"/> <table tableName="sys_user"></table> </context> </generatorConfiguration>

2、数据库User表

需要在数据库中创建相应的表。这个表结构很简单,就是普通的用户表sys_user。

CREATE TABLE `sys_user` (`id` varchar(32) NOT NULL DEFAULT '',`username` varchar(32) DEFAULT NULL,`password` varchar(64) DEFAULT NULL,`nickname` varchar(64) DEFAULT NULL,`age` int(11) DEFAULT NULL,`sex` int(11) DEFAULT NULL,`job` int(11) DEFAULT NULL,`face_image` varchar(6000) DEFAULT NULL,`province` varchar(64) DEFAULT NULL,`city` varchar(64) DEFAULT NULL,`district` varchar(64) DEFAULT NULL,`address` varchar(255) DEFAULT NULL,`auth_salt` varchar(64) DEFAULT NULL,`last_login_ip` varchar(64) DEFAULT NULL,`last_login_time` datetime DEFAULT NULL,`is_delete` int(11) DEFAULT NULL,`regist_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

3、增加统一的mapper接口

在utils包中创建一个统一的mapper接口,
后面所有的mapper类都会继承这个接口
package com.weiz.utils;import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;/*** 继承自己的MyMapper** @author weiz* @since 2019-09-06 21:53*/
public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {//TODO//FIXME 特别注意,该接口不能被扫描到,否则会出错
}

MyMapper类是我自定义封装的Maper接口,它集成Mybatis的Mapper<T>, MySqlMapper<T>接口,这里面包含了默认的增删改查的方法。代码生成器自动生成的mapper类,都会统一集成MyMapper接口。

特别注意:该接口不能被扫描到,否则会出错。所以我把这个接口放在了utils包中。

4、创建GeneratorDisplay类

package com.weiz.utils;import java.io.File;
import java.util.ArrayList;
import java.util.List;import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;public class GeneratorDisplay {public void generator() throws Exception{List<String> warnings = new ArrayList<String>();boolean overwrite = true;//指定 逆向工程配置文件File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback, warnings);myBatisGenerator.generate(null);} public static void main(String[] args) throws Exception {try {GeneratorDisplay generatorSqlmap = new GeneratorDisplay();generatorSqlmap.generator();} catch (Exception e) {e.printStackTrace();}}
}

这个其实也是调用mybatis generator实现的。跟mybatis generator安装插件是一样的。

注意:利用Mybatis Generator自动生成代码,对于已经存在的文件会存在覆盖和在原有文件上追加的可能性,不宜多次生成。如需重新生成,需要删除已生成的源文件。

5、Mybatis Generator自动生成pojo和mapper

运行GeneratorDisplay 如下图所示,即可自动生成相关的代码。

三、实现增删改查

在项目中整合了Mybatis并通过自动生成工具生成了相关的mapper和配置文件之后,下面就开始项目中的调用。

1、在service包下创建UserService及UserServiceImpl接口实现类

创建com.weiz.service包,添加UserService接口类

package com.weiz.service;import com.weiz.pojo.SysUser;import java.util.List;public interface UserService {public void saveUser(SysUser user) throws Exception;public void updateUser(SysUser user);public void deleteUser(String userId);public SysUser queryUserById(String userId);public List<SysUser> queryUserList(SysUser user);public List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize);   public void saveUserTransactional(SysUser user);
}

创建com.weiz.service.impl包,并增加UserServiceImpl实现类,并实现增删改查的功能,由于这个代码比较简单,这里直接给出完整的代码。
package com.weiz.service.impl;import com.github.pagehelper.PageHelper;
import com.weiz.mapper.SysUserMapper;
import com.weiz.mapper.SysUserMapperCustom;
import com.weiz.pojo.SysUser;
import com.weiz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.thymeleaf.util.StringUtils;
import tk.mybatis.mapper.entity.Example;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate SysUserMapper userMapper;@Overridepublic void saveUser(SysUser user) throws Exception {userMapper.insert(user);}@Overridepublic void updateUser(SysUser user) {userMapper.updateByPrimaryKeySelective(user);}@Overridepublic void deleteUser(String userId) {userMapper.deleteByPrimaryKey(userId);}@Overridepublic SysUser queryUserById(String userId) {return userMapper.selectByPrimaryKey(userId);}@Overridepublic List<SysUser> queryUserList(SysUser user) {return null;}@Overridepublic List<SysUser> queryUserListPaged(SysUser user, Integer page, Integer pageSize) {     // 分页功能实现PageHelper.startPage(page,pageSize);Example example = new Example(SysUser.class);Example.Criteria criteria = example.createCriteria();if (!StringUtils.isEmptyOrWhitespace(user.getUsername())) {criteria.andLike("username", "%" + user.getUsername() + "%");}if (!StringUtils.isEmptyOrWhitespace(user.getNickname())) {criteria.andLike("nickname", "%" + user.getNickname() + "%");}List<SysUser> userList = userMapper.selectByExample(example);return userList;}@Overridepublic void saveUserTransactional(SysUser user) {}
}

2、编写controller层,增加MybatisController控制器

package com.weiz.controller;import com.weiz.utils.JSONResult;
import com.weiz.pojo.SysUser;
import com.weiz.service.UserService;
import org.n3r.idworker.Sid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.Date;
import java.util.List;@RestController
@RequestMapping("mybatis")
public class MyBatisCRUDController {@Autowiredprivate UserService userService;@Autowiredprivate Sid sid;@RequestMapping("/saveUser")public JSONResult saveUser() throws Exception {// 自动生成ID,也可以直接用uuidString userId = sid.nextShort();SysUser user = new SysUser();user.setId(userId);user.setUsername("spring boot" + new Date());user.setNickname("spring boot" + new Date());user.setPassword("abc123");user.setIsDelete(0);user.setRegistTime(new Date());userService.saveUser(user);return JSONResult.ok("保存成功");}@RequestMapping("/updateUser")public JSONResult updateUser() {SysUser user = new SysUser();user.setId("10011001");user.setUsername("10011001-updated" + new Date());user.setNickname("10011001-updated" + new Date());user.setPassword("10011001-updated");user.setIsDelete(0);user.setRegistTime(new Date());userService.updateUser(user);return JSONResult.ok("保存成功");}@RequestMapping("/deleteUser")public JSONResult deleteUser(String userId) {userService.deleteUser(userId);return JSONResult.ok("删除成功");}@RequestMapping("/queryUserById")public JSONResult queryUserById(String userId) {return JSONResult.ok(userService.queryUserById(userId));}@RequestMapping("/queryUserList")public JSONResult queryUserList() {SysUser user = new SysUser();user.setUsername("spring boot");user.setNickname("lee");List<SysUser> userList = userService.queryUserList(user);return JSONResult.ok(userList);}@RequestMapping("/queryUserListPaged")public JSONResult queryUserListPaged(Integer page) {if (page == null) {page = 1;}int pageSize = 10;SysUser user = new SysUser();List<SysUser> userList = userService.queryUserListPaged(user, page, pageSize);return JSONResult.ok(userList);}@RequestMapping("/queryUserByIdCustom")public JSONResult queryUserByIdCustom(String userId) {return JSONResult.ok(userService.queryUserByIdCustom(userId));}@RequestMapping("/saveUserTransactional")public JSONResult saveUserTransactional() {String userId = sid.nextShort();SysUser user = new SysUser();user.setId(userId);user.setUsername("lee" + new Date());user.setNickname("lee" + new Date());user.setPassword("abc123");user.setIsDelete(0);user.setRegistTime(new Date());userService.saveUserTransactional(user);return JSONResult.ok("保存成功");}}

3、测试

在浏览器输入controller里面定义的路径即可。只要你按照上面的步骤一步一步来,基本上就没问题,是不是特别简单。

最后

以上,就把Spring Boot整合Mybatis及实现增删改查介绍完了,Spring Boot 整合Mybatis 是整个Spring Boot 非常重要的功能,也是非常核心的基础功能,希望大家能够熟练掌握。后面会深入介绍Spring Boot的各个功能和用法。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码。获取这个系列课程的完整源码。

Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】相关推荐

  1. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  2. Spring Boot 入门系列(二十三)整合Mybatis,实现多数据源配置!

    d之前介绍了Spring Boot 整合mybatis 使用注解方式配置的方式实现增删改查以及一些复杂自定义的sql 语句 .想必大家对spring boot 项目中,如何使用mybatis 有了一定 ...

  3. Spring Cloud入门系列(1)- Spring生态体系发展史+全系框架介绍

    Spring发展史 2000年,Java EE和EJB迅速发展,很多知名公司都是采用此技术方案进行项目开发,但是EJB 属于重量级框架,开发繁琐.于是一个叫Rod Johnson的大佬写了一本叫做&l ...

  4. spring cloud 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config

    我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config. 它用来 ...

  5. spring cloud 入门系列六:使用Zuul 实现API网关服务

    通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通 ...

  6. springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!

    前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhon ...

  7. Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  8. 普歌-云言团队-Spring Boot入门:环境搭建Spring Boot HelloWorld

    Spring Boot入门:环境搭建Spring Boot HelloWorld 前言:SpringBoot 是来简化Spring应用开发, 约定大于配置, 去繁从简, just run就能创建一个独 ...

  9. C语言入门系列一之C语言介绍、环境配置和运行执行

    鉴于书本和教材文字过多.又难懂的缺点,所以我打算写一系列通俗移动的C语言入门教程,让大家在短时间内学习和掌握C语言,以及遇到C语言的一些问题该如何得到快速的解决.希望这些系列的教程,能够帮助到大家!该 ...

最新文章

  1. 明确REST接口开发的核心任务
  2. DataX在数据迁移中的应用
  3. 工作96:当前页面拿id
  4. Jquery根据JSON生成Table
  5. 今天react开发遇到个比较恶心的问题
  6. 服务台与事件管理解决方案
  7. 化学实验中计算机技术的应用,浅谈计算机在基础化学实验中的应用
  8. 【总结整理】javascript的函数调用时是否加括号
  9. Failed to register native method nativeSetStatusCallback in base.apk
  10. xcode6更新证书错误:No matching provisioning profiles found 解决方案
  11. 常用的平方根算法详解与实现
  12. Mac 安装Photoshop遇到一系列问题解决方法
  13. 从头认识Spring-1.14 SpEl表达式(3)-SpEl表达式的两个坑:Bean的顺序与Bean的toString方法
  14. js学到什么程度学框架_如何学到什么
  15. Tuxera NTFS for Mac 2022新版本安装
  16. 电梯默纳克系统服务器,电梯人必看:默纳克系统运行中报E51原因分析和处理方法...
  17. nodejs 处理zip文件的上传
  18. Navicat的1577 – Cannot proceed because system tables used by Event Scheduler where found damaged at s
  19. 哪种平板电脑适合一级计算机考证
  20. linux下c/c++实例之十四c实现的bt软件下载

热门文章

  1. android电视 怎么调电视机的信号源,如何设置智能电视、盒子信号源?原来这么简单!具体方法如下...
  2. 输出教师信息c语言作业,C语言教师管理系统代码(最新整理)
  3. 5月 CSDN 创作者之夜:获奖名单公布
  4. 【渝粤教育】电大中专机械设计基础 (2)作业 题库
  5. wincc与SQL Server数据库通讯的方法介绍
  6. 男人三十而立,被动收入,越早开始越好
  7. Vue中key属性的作用
  8. LeetCode:838. 推多米诺————中等
  9. JAVA的学习(在IDEA环境下)
  10. 激光雷达与相机融合(五)-------ros实时版点云投影到图像平面