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

今天主要讲解Springboot整合Mybatis,并实现最基本的增删改查功能。Spring Boot整合Mybatis的方式有两种:一种是注解形式的,也就是没有Mapper.xml文件,还有一种是XML形式的,我推荐的是使用注解形式,为什么呢?因为更加的简介,减少不必要的错误。

一、整合Mybatis

第一步:数据库新建Person表

这个表结构很简单,就是普通的用户表。

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;

第二步:增加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>

第三步:增加统一的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 特别注意,该接口不能被扫描到,否则会出错
}

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

第四步:更改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

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

二、代码自动生成工具

Spring Boot有mybatis  generator自动生成代码插件,能自动生成pojo实体类、接口、mapper.xml 文件,提高开发效率。这里就不介绍怎么安装使用mybatis  generator插件。介绍一个简单的GeneratorDisplay自动生成类。

第五步:创建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安装插件是一样的。

第六步:增加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>

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

第七步:Mybatis Generator自动生成代码

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

第八步:在service包下创建UserService及UserServiceImpl接口实现类

1. 创建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);
}

2. 创建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) {}
}

第九步:编写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("保存成功");}}

第十步:在启动主类添加扫描器

在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);    }

}

第十一步:测试

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

最后

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

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

Spring Boot入门系列(六)Spring Boot如何整合Mybatis【附详细步骤】相关推荐

  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 入门系列六:使用Zuul 实现API网关服务

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

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

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

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

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

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

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

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

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

  9. Spring Boot入门(01):Spring Boot的奋斗成长史

    作者:bug菌 博客:CSDN.掘金.infoQ.51CTO等 简介:CSDN/阿里云/华为云/51CTO博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/ ...

最新文章

  1. Kubernetes — 生产环境架构简述
  2. java default locale_Java JSON.defaultLocale方法代码示例
  3. 关于python测试webservice接口的视频分享
  4. 并查集判断是否有环存在
  5. 同省异地社保卡要换吗_攀枝花社保卡在成都住院可直接结算吗,要办理异地就医备案才行...
  6. php zip 归档使用工具,PHP 压缩与归档扩展 Zip_编程学问网
  7. 如何在Linux中的virtualbox中安装Windows 10
  8. FISCO BCOS Solidity 智能合约 接收数组参数
  9. oracle developer连接access
  10. 做java项目_初学者做java项目的流程
  11. ImageButton属性
  12. 计算机设置调整吃鸡,绝地求生韦神托马斯主播的电脑画面设置灵敏度_绝地求生主播的电脑画面设置和灵敏度介绍_游戏吧...
  13. convert bitset descriptor - cv::Mat
  14. 笔试题6——幸福数字
  15. linux外置光驱调速,买内置不如买外置 五款外置光驱推荐
  16. 标准美式计算机键盘,简体中文美式键盘如何添加【图解】
  17. 聚划算影响淘宝搜索权重?客服:未接到通知
  18. 2021/06/27 Uncaught SyntaxError: Cannot use import statement outside a module
  19. IEEE 802.15.4协议完整中文版 - 4.2 IEEE 802.15.4 WPAN 的组件
  20. python如何求解微分方程_用Python数值求解偏微分方程

热门文章

  1. 【期末复习】技术经济学(南邮储成祥)
  2. 华为 DAYU 整体介绍
  3. ST官方的IIC实例解析(第一部分)
  4. 自整理---Mysql高级笔记
  5. 高速PCB基础——电阻,电容,电感(第三讲)
  6. ios微信浏览器App下载链接怎样跳转到苹果App Store
  7. 设计模式之观察者模式——猫抓老鼠1
  8. vue3 打印插件 vue-print-nb
  9. ckeditor5 全屏功能
  10. linux内核和发行版本的关系,简述Linux内核和Linux发行版的区别