Spring Boot入门系列(六)Spring Boot如何使用Mybatis XML 配置版【附详细步骤】
前面介绍了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 配置版【附详细步骤】相关推荐
- 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 入门系列七:基于Git存储的分布式配置中心--Spring Cloud Config
我们前面接触到的spring cloud组件都是基于Netflix的组件进行实现的,这次我们来看下spring cloud 团队自己创建的一个全新项目:Spring Cloud Config. 它用来 ...
- 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就能创建一个独 ...
- C语言入门系列一之C语言介绍、环境配置和运行执行
鉴于书本和教材文字过多.又难懂的缺点,所以我打算写一系列通俗移动的C语言入门教程,让大家在短时间内学习和掌握C语言,以及遇到C语言的一些问题该如何得到快速的解决.希望这些系列的教程,能够帮助到大家!该 ...
最新文章
- 明确REST接口开发的核心任务
- DataX在数据迁移中的应用
- 工作96:当前页面拿id
- Jquery根据JSON生成Table
- 今天react开发遇到个比较恶心的问题
- 服务台与事件管理解决方案
- 化学实验中计算机技术的应用,浅谈计算机在基础化学实验中的应用
- 【总结整理】javascript的函数调用时是否加括号
- Failed to register native method nativeSetStatusCallback in base.apk
- xcode6更新证书错误:No matching provisioning profiles found 解决方案
- 常用的平方根算法详解与实现
- Mac 安装Photoshop遇到一系列问题解决方法
- 从头认识Spring-1.14 SpEl表达式(3)-SpEl表达式的两个坑:Bean的顺序与Bean的toString方法
- js学到什么程度学框架_如何学到什么
- Tuxera NTFS for Mac 2022新版本安装
- 电梯默纳克系统服务器,电梯人必看:默纳克系统运行中报E51原因分析和处理方法...
- nodejs 处理zip文件的上传
- Navicat的1577 – Cannot proceed because system tables used by Event Scheduler where found damaged at s
- 哪种平板电脑适合一级计算机考证
- linux下c/c++实例之十四c实现的bt软件下载
热门文章
- android电视 怎么调电视机的信号源,如何设置智能电视、盒子信号源?原来这么简单!具体方法如下...
- 输出教师信息c语言作业,C语言教师管理系统代码(最新整理)
- 5月 CSDN 创作者之夜:获奖名单公布
- 【渝粤教育】电大中专机械设计基础 (2)作业 题库
- wincc与SQL Server数据库通讯的方法介绍
- 男人三十而立,被动收入,越早开始越好
- Vue中key属性的作用
- LeetCode:838. 推多米诺————中等
- JAVA的学习(在IDEA环境下)
- 激光雷达与相机融合(五)-------ros实时版点云投影到图像平面