Spring Boot入门系列(六)Spring Boot如何整合Mybatis【附详细步骤】
前面介绍了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【附详细步骤】相关推荐
- Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...
- Spring Boot 入门系列(二十三)整合Mybatis,实现多数据源配置!
d之前介绍了Spring Boot 整合mybatis 使用注解方式配置的方式实现增删改查以及一些复杂自定义的sql 语句 .想必大家对spring boot 项目中,如何使用mybatis 有了一定 ...
- Spring Cloud入门系列(1)- Spring生态体系发展史+全系框架介绍
Spring发展史 2000年,Java EE和EJB迅速发展,很多知名公司都是采用此技术方案进行项目开发,但是EJB 属于重量级框架,开发繁琐.于是一个叫Rod Johnson的大佬写了一本叫做&l ...
- spring cloud 入门系列六:使用Zuul 实现API网关服务
通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通 ...
- springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!
前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhon ...
- Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!
之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...
- 普歌-云言团队-Spring Boot入门:环境搭建Spring Boot HelloWorld
Spring Boot入门:环境搭建Spring Boot HelloWorld 前言:SpringBoot 是来简化Spring应用开发, 约定大于配置, 去繁从简, just run就能创建一个独 ...
- Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】
前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法.不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/z ...
- Spring Boot入门(01):Spring Boot的奋斗成长史
作者:bug菌 博客:CSDN.掘金.infoQ.51CTO等 简介:CSDN/阿里云/华为云/51CTO博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/ ...
最新文章
- Kubernetes — 生产环境架构简述
- java default locale_Java JSON.defaultLocale方法代码示例
- 关于python测试webservice接口的视频分享
- 并查集判断是否有环存在
- 同省异地社保卡要换吗_攀枝花社保卡在成都住院可直接结算吗,要办理异地就医备案才行...
- php zip 归档使用工具,PHP 压缩与归档扩展 Zip_编程学问网
- 如何在Linux中的virtualbox中安装Windows 10
- FISCO BCOS Solidity 智能合约 接收数组参数
- oracle developer连接access
- 做java项目_初学者做java项目的流程
- ImageButton属性
- 计算机设置调整吃鸡,绝地求生韦神托马斯主播的电脑画面设置灵敏度_绝地求生主播的电脑画面设置和灵敏度介绍_游戏吧...
- convert bitset descriptor - cv::Mat
- 笔试题6——幸福数字
- linux外置光驱调速,买内置不如买外置 五款外置光驱推荐
- 标准美式计算机键盘,简体中文美式键盘如何添加【图解】
- 聚划算影响淘宝搜索权重?客服:未接到通知
- 2021/06/27 Uncaught SyntaxError: Cannot use import statement outside a module
- IEEE 802.15.4协议完整中文版 - 4.2 IEEE 802.15.4 WPAN 的组件
- python如何求解微分方程_用Python数值求解偏微分方程