前言:
此时我们对“spring集成mybatis”大约比较讲究,同学们都想要分析一些“spring集成mybatis”的相关知识。那么小编同时在网络上网罗了一些有关“spring集成mybatis””的相关知识,希望你们能喜欢,你们快快来了解一下吧!前面介绍了Spring Boot 中的整合Thymeleaf前端html框架,同时也介绍了Thymeleaf 的用法。不清楚的朋友可以看看之前的文章:。
今天主要讲解Springboot整合Mybatis实现一个最基本的增删改查功能。整合Mybatis是Spring Boot比较重要的功能,一般整合的方式有两种:一种是注解形式的,也就是没有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_testspring.datasource.username=rootspring.datasource.password=rootspring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.druid.initial-size=1spring.datasource.druid.min-idle=1spring.datasource.druid.max-active=20spring.datasource.druid.test-on-borrow=truespring.datasource.druid.stat-view-servlet.allow=true############################################################# mybatis 相关配置############################################################mybatis.type-aliases-package=com.weiz.pojomybatis.mapper-locations=classpath:mapper/*.xmlmapper.mappers=com.weiz.utils.MyMapper #这个MyMapper 就是我之前创建的mapper统一接口。后面所有的mapper类都会继承这个接口mapper.not-empty=falsemapper.identity=MYSQL# 分页框架pagehelper.helperDialect=mysqlpagehelper.reasonable=truepagehelper.supportMethodsArguments=truepagehelper.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 generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" ";><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、创建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、创建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;@Servicepublic class UserServiceImpl implements UserService { @Autowired private SysUserMapper userMapper; @Override public void saveUser(SysUser user) throws Exception { userMapper.insert(user); } @Override public void updateUser(SysUser user) { userMapper.updateByPrimaryKeySelective(user); } @Override public void deleteUser(String userId) { userMapper.deleteByPrimaryKey(userId); } @Override public SysUser queryUserById(String userId) { return userMapper.selectByPrimaryKey(userId); } @Override public List<SysUser> queryUserList(SysUser user) { return null; } @Override public 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; } @Override public 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 { @Autowired private UserService userService; @Autowired private Sid sid; @RequestMapping("/saveUser") public JSONResult saveUser() throws Exception { // 自动生成ID,也可以直接用uuid String 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的各个功能和用法。
标签: #spring集成mybatis #spring和mybatis整合步骤 #springmybatis #spring整个mybatis #mybatisspring