之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询。虽然目前 mybatis 使用xml 配置的方式 已经极大减轻了配置的复杂度,支持 generator 插件 根据表结构自动生成实体类、配置文件和dao层代码,减轻很大一部分开发量;但是 java 注解的运用发展到今天。约定取代配置的规范已经深入人心。开发者还是倾向于使用注解解决一切问题,注解版最大的特点是具体的 SQL 文件需要写在 Mapper 类中,取消了 Mapper 的 XML 配置 。这样不用任何配置文件,就可以简单配置轻松上手。所以今天就介绍Spring Boot 整合mybatis 使用注解的方式实现数据库操作 。

Spring Boot 整合mybatis 使用xml配置版之前已经介绍过了,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。

一、整合Mybatis

Spring Boot  整合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提供了强大的自动生成功能的插件。mybatis generator插件只需简单几步就能生成pojo 类和mapper。操作步骤和xml 配置版也是类似的,唯一要注意的是 generatorConfig.xml 的部分配置,要配置按注解的方式生成mapper 。

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="DB2Tables"  targetRuntime="MyBatis3"><commentGenerator><property name="suppressDate" value="true"/><!-- 是否去除自动生成的注释 true:是 : false:否 --><property name="suppressAllComments" value="true"/></commentGenerator><!--数据库链接URL,用户名、密码 --><jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://127.0.0.1:3306/zwz_test" userId="root" password="root"></jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false"/></javaTypeResolver><!-- 生成模型的包名和位置--><javaModelGenerator targetPackage="com.weiz.pojo" targetProject="src/main/java"><property name="enableSubPackages" value="true"/><property name="trimStrings" value="true"/></javaModelGenerator><!-- 生成映射文件的包名和位置--><sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources"><property name="enableSubPackages" value="true"/></sqlMapGenerator><!-- 生成DAO的包名和位置--><!-- XMLMAPPER生成xml映射文件, ANNOTATEDMAPPER生成的dao采用注解来写sql --><javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.weiz.mapper" targetProject="src/main/java"><property name="enableSubPackages" value="true"/></javaClientGenerator><!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名--><table tableName="sys_user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table></context>
</generatorConfiguration>

注意:

这里的配置 <javaClientGenerator type="ANNOTATEDMAPPER" targetPackage="com.weiz.mapper" targetProject="src/main/java">

type 的值很重要:
  XMLMAPPER : 表示生成xml映射文件。

  ANNOTATEDMAPPER: 表示生成的mapper 采用注解来写sql。

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、创建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安装插件是一样的。

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

4、Mybatis Generator自动生成pojo和mapper

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

上图可以看到,pojo 包里面自动生成了User 实体对象 ,mapper包里面生成了 UserMapper 和UserSqlProvider 类。UserMapper 是所有方法的实现。UserSqlProvider则是为UserMapper 实现动态SQL。

注意:

  UserMapper 中的所有的动态SQL脚本,都定义在类UserSqlProvider中。若要增加新的动态SQL,只需在UserSqlProvider中增加相应的方法,然后在UserMapper中增加相应的引用即可,

  如:@UpdateProvider(type=UserSqlProvider.class, method="updateByPrimaryKeySelective")。

三、实现增删改查

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

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

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

package com.weiz.service;import com.weiz.pojo.User;public interface UserService {public int saveUser(User user);public int updateUser(User user);public int deleteUser(String userId);public User queryUserById(String userId);
}

创建com.weiz.service.impl包,并增加UserServiceImpl实现类,并实现增删改查的功能,由于这个代码比较简单,这里直接给出完整的代码。

package com.weiz.service.impl;import com.weiz.mapper.UserMapper;
import com.weiz.pojo.User;
import com.weiz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic int saveUser(User user) {return userMapper.insertSelective(user);}@Overridepublic int updateUser(User user) {return userMapper.updateByPrimaryKeySelective(user);}@Overridepublic int deleteUser(String userId) {return userMapper.deleteByPrimaryKey(userId);}@Overridepublic User queryUserById(String userId) {return userMapper.selectByPrimaryKey(userId);}
}

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

package com.weiz.controller;import com.weiz.pojo.User;
import com.weiz.utils.JSONResult;
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;@RestController
@RequestMapping("mybatis")
public class MyBatisCRUDController {@Autowiredprivate UserService userService;@Autowiredprivate Sid sid;@RequestMapping("/saveUser")public JSONResult saveUser() {String userId = sid.nextShort();User user = new User();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() {User user = new User();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));}
}

3、测试

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

最后

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

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

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

  1. 02.Mybatis的动态代理方式实现增删改查

    动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...

  2. springboot整合mybatis实现简单的单表增删改查(完整代码可下载)

    搭建项目 项目简单效果,前端效果丑的一批,主要是后端功能实现: springboot增删改查 csdn完整代码下载链接: springboot+mybatis Gitee下载地址: Gitee下载地址 ...

  3. MySQL燕十八老师课程笔记:第二课:增删改查

    增: tee D:\1010.sql 回车后显示:Logging to file 'D:\1010.sql' 这句话是把敲的sql及结果都输出到一个sql文件里,便于复习. create table ...

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

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

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

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

  6. Reflex WMS入门系列十八:如何看年终盘点的Inventory report数据?

    Reflex WMS入门系列十八:如何看年终盘点的Inventory report数据? Reflex WMS系统中的盘点分为cycle count(循环盘点)和physical inventory( ...

  7. Springboot整合JDBC和DBUtils,实现简单的增删改查.

    Springboot整合JDBC和DBUtils,实现简单的增删改查. 一.pom.xml文件 <?xml version="1.0" encoding="UTF- ...

  8. Spring Boot入门系列(六)Spring Boot如何整合Mybatis【附详细步骤】

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

  9. Spring Boot 入门系列(二十八) JPA 的实体映射关系,一对一,一对多,多对多关系映射!...

    前面讲了Spring Boot 使用 JPA,实现JPA 的增.删.改.查的功能,同时也介绍了JPA的一些查询,自定义SQL查询等使用.JPA使用非常简单,功能非常强大的ORM框架,无需任何数据访问层 ...

最新文章

  1. AI寒冬论作者:通用人工智能仍是白日梦
  2. 腾讯——这可是一只“骨骼清奇”的狗
  3. 1 用存储过程实现分页,除了上一页,下一页,第一页,和末页外还要有go按钮,以及go到那里的文本框。另外还要在Lable显示“当前x页,一共y页”。注意验证控件的使用和 链接存储过程的内容。...
  4. 并发加对象锁_通用并发对象池
  5. 消息称谷歌Pixel系列手机默认禁用美颜功能
  6. Struts2学习笔记(六) 结果(Result)(上)
  7. 将object类型转换成时间,如果能转的话。
  8. 软件开发必备英语汇总(持续更新)
  9. ORCAD生成BOM单时不显示元器件封装
  10. 细说背包问题 - 完全背包
  11. 专用计算机有,什么计算机是内嵌在其他设备中的专用计算机
  12. 原子范数最小化(Atomic Norm Minimization)
  13. mac 显示器分辨率_如何在Mac上选择精确的显示分辨率
  14. 使用.htaccess 开启gzip 缓存文件 网页 提高速度 和 .htaccess文件用法集锦
  15. C#宿舍管理系统(C#课程设计含源码)
  16. javascript网页自动填表_javascript 自动填写表单
  17. VMware-WorkStation 序列号(转)
  18. VB与VB.NET的区别
  19. request获取不到参数一种情况
  20. 【路径规划】FMM快速行进法船舶路径规划【含Matlab源码 2291期】

热门文章

  1. 制作Linux内存镜像+制作对应的volatility profile
  2. 实用主义学python【笔记】
  3. 室内定位的电子地图编辑工具
  4. GIS基本功 | 14 地图投影及其相关概念
  5. 如何在mac上使用虚拟机中的oracle
  6. 云服务器测速脚本_Superspeed.sh:包含很多个测速节点的 VPS 一键测速脚本
  7. PM00-愿景, 战略和项目
  8. 【leetcode】838. 推多米诺(模拟)
  9. Allan方差读图分析IMU误差指标
  10. 用Java代码编程实现模拟机器人对话