SpringBoot2.x系列教程43--整合使用Mybatis

作者:一一哥

在上一节中,我带大家学习了Spring Boot中整合JPA,那接下来这一章节中,我继续带领大家学习如何在Spring Boot中整合Mybatis。

一. Mybatis简介

1. MyBatis概述

MyBatis是一款优秀的持久层框架,它本来是apache的一个开源项目iBatis。在2010年的时候,这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis;2013年11月又迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。

2. Mybatis特点

  • 支持定制化 SQL、存储过程以及高级映射。
  • MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射。
  • 提供对象关系映射标签,支持对象关系组建维护。
  • 提供xml标签,支持编写动态sql。

3. Mybatis的发展历程

Mybatis 初期使用比较麻烦,需要各种配置文件、实体类、Dao 层映射关联、还有一大推其它配置。

然后 Mybatis 就发现了这种弊端,为了解决这种弊端,就开发了generator逆向工程,可以根据表结构自动生成实体类、配置文件和 Dao 层代码,可以减轻一部分开发量。

后期也进行了大量的优化,可以使用注解进一步简化开发,自动管理 Dao 层和配置文件等。

到了今天Mybatis进一步简化到极致,那就是mybatis-spring-boot-starter 的出现。我们可以利用 Spring Boot 整合 Mybatis,即使完全不用配置文件,也可以简单配置轻松实现数据库操作。

二. Spring Boot中整合Mybatis

SpringBoot中整合Mybatis有2种实现方式:

  • 1.注解方式;
  • 2.xml方式。

由于注解方式更为简易普遍,所以本案例讲解以注解方式实现的案例。

1. 创建Web项目

我们按照之前的经验,创建一个web程序,并将之改造成Spring Boot项目,具体过程略。

2. 添加依赖包

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version>
</dependency>

3. 添加配置文件

Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中。

spring:datasource:url: jdbc:mysql://localhost:3306/db4?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=truetype: com.alibaba.druid.pool.DruidDataSourceusername: rootpassword: sycdriver-class-name: com.mysql.jdbc.Driver #驱动
mybatis:type-aliases-package: com.yyg.boot.mapper

spring.datasource.url: 数据库连接字符串;
spring.datasource.username: 数据库用户名;
spring.datasource.password: 数据库密码;
spring.datasource.driver-class-name: 驱动类型(注意MySQL 8.0的值是com.mysql.cj.jdbc.Driver和之前不同);
mybatis.type-aliases-package 配置mapper包名。

4. 创建DataSource配置类(可以省略)

用druid提供的DataSource来替换默认的DataSource。

package com.yyg.boot.config;import com.alibaba.druid.pool.DruidDataSource;
import lombok.Data;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;import javax.sql.DataSource;/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description 第二种配置数据源的方式*/
@Data
@ComponentScan
@Configuration
@ConfigurationProperties(prefix="spring.datasource")
@MapperScan("com.yyg.boot.mapper")
public class DbConfig {private String url;private String username;private String password;@Beanpublic DataSource getDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}}

可以在这个类上添加@MapperScan("com.yyg.boot.mapper"),指定Mapper接口所在包位置。

5. 创建实体类

package com.yyg.boot.domain;import lombok.Data;
import lombok.ToString;/*** @Author 一一哥Sun* @Date Created in 2020/3/30* @Description Description*/
@Data
@ToString
public class User {private Long id;private String username;private String birthday;private String sex;private String address;}

6. 创建UserMapper接口

package com.yyg.boot.mapper;import com.yyg.boot.domain.User;
import org.apache.ibatis.annotations.*;/*** @Author 一一哥Sun* @Date Created in 2020/3/31* @Description 在Mybatis的Mapper接口中,增删改查都有对应的注解.@Insert,@Select,@Delete,@Update*/
public interface UserMapper {@Select("select * from user where id = #{id}")User queryUserById(@Param(value = "id") int id);@Insert("insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})")void insertUser(User user);@Update("UPDATE user SET sex=#{sex} WHERE username=#{username}")void updateUser(User user);@Delete("DELETE FROM user WHERE id =#{id}")void deleteById(@Param("id") int id);
}

Mapper中常用注解

  • @Select 是查询类的注解,所有的查询均使用这个;
  • @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰;
  • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值;
  • @Update 负责修改,也可以直接传入对象;
  • @delete 负责删除。

7. 创建Controller控制器

package com.yyg.boot.web;import com.yyg.boot.domain.User;
import com.yyg.boot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;/*** @Author 一一哥Sun* @Date Created in 2020/3/31* @Description Description*/
@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;@GetMapping("/{id}")public User findUserById(@PathVariable("id") Integer id) {return userMapper.queryUserById(id);}@PostMapping("")public String addUser(@RequestBody User user) {userMapper.insertUser(user);return "success";}@PostMapping("/update")public String updateUser(@RequestBody User user) {userMapper.updateUser(user);return "success";}@DeleteMapping("/{id}")public String delUserById(@PathVariable("id") Integer id) {userMapper.deleteById(id);return "success";}}

8. 创建Application入口类

注意:

也可以在入口类上添加@MapperScan("com.yyg.boot.mapper"),指定Mapper接口所在包位置。

package com.yyg.boot;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** @Author 一一哥Sun* @Date Created in 2020/3/31* @Description Description*/
@SpringBootApplication
//@MapperScan("com.yyg.boot.mapper")
public class MybatisApplication {public static void main(String[] args) {SpringApplication.run(MybatisApplication.class, args);}}

9. 启动程序进行测试

测试查询方法:

测试添加方法:

可以看到数据库中多了一个id=28的新的记录。

测试修改方法:

可以看到数据库中的sex数据被修改了。

测试删除方法:

看数据库的表中,已经没有了id为28的数据!

mybatis实体类注解_SpringBoot2.x系列教程43--整合使用Mybatis相关推荐

  1. springboot接收文件_SpringBoot2.x系列教程61--SpringBoot整合MQ之ActiveMQ实现消息传递

    SpringBoot2.x系列教程61--SpringBoot整合消息队列之ActiveMQ代码实现消息传递 作者:一一哥 我在上一章节中,给大家介绍了ActiveMQ,本节中我会介绍Spring B ...

  2. elasticsearch 9300端口连接不上_SpringBoot2.x系列教程54--SpringBoot整合ElasticSearch方式一...

    SpringBoot2.x系列教程54--NoSQL之SpringBoot整合ElasticSearch方式一 作者:一一哥 一. Elastic Search 1. Elastic Search简介 ...

  3. SpringBoot24 SpringDataJPA环境搭建、实体类注解、关联查询

    1 版本说明 JDK:1.8 MAVEN:3.5 SpringBoot:2.0.4 IDEA:旗舰版207.2 MySQL:5.5 2 SpringDataJPA环境搭建(SpringBoot版本) ...

  4. 使用 MyBatis 实体类里的 Double 类型查询不到值

    使用 MyBatis 实体类里的 double 类型查询不到值.查询实体类时,里面的 Integer 和 String 类型都可以查询到,update 各个属性也都可以修改成功. 因为 MyBatis ...

  5. SpringBoot2.x系列教程75--SpringBoot整合JPA、Redis实现分布式的Session共享

    SpringBoot2.x系列教程75--SpringBoot整合JPA.Redis实现分布式的Session共享 一.SpringBoot整合JPA.Redis实现分布式的Session共享 1. ...

  6. STM32 基础系列教程 43 – SRAM

    前言 STM32F407ZGT6 自带了 192K 字节的 SRAM,对一般应用来说,已经足够了,不过在一些对内存要求高的场合, 比如跑算法或者跑 GUI 等,自带的这些内存就不够用了.比如跑算法或者 ...

  7. 注解方式—解决mybatis实体类属性名和数据库字段名不一致问题

    表 tb_brand 实体类 Brand属性名 解决方式一(为表字段取别名) // 根据字段id查询 @Select("select id, brand_name as brandName, ...

  8. exchange无法收发邮件_SpringBoot2.x系列教程69--SpringBoot中整合邮件发送

    SpringBoot2.x系列教程69--SpringBoot中整合邮件发送 作者:一一哥 注: 本文案例以QQ邮箱发送的实现为例! 一. 邮件发送概述 1. 概述 在Spring框架中提供了一个Ja ...

  9. exchange无法收发邮件_SpringBoot2.x系列教程69--SpringBoot中整合Mail实现邮件发送

    SpringBoot2.x系列教程69--SpringBoot中整合邮件发送 作者:一一哥 注: 本文案例以QQ邮箱发送的实现为例! 一. 邮件发送概述 1. 概述 在Spring框架中提供了一个Ja ...

最新文章

  1. leetcode874
  2. 【学习笔记】含委托加工(转包)的标准成本估算
  3. spring3依赖包下载
  4. sklearn自学指南(part47)--主成分分析
  5. SAP UI5 return sap.ui.view的实现
  6. 工作87:element-ui el-table sortable属性 参数详解
  7. 修改csdn中字体颜色
  8. 在MyEclipse(2015)中上传项目到github的步骤(很详细)
  9. ARINC429总线收发器 -- HI-3582调试记录
  10. Unity一键修改NGUI字体的编辑器脚本
  11. excel 模糊查询
  12. android手机禁止休眠_Android的屏幕禁止休眠和锁屏的方法
  13. android 图片加载 软引用_Android 异步加载网络图片并缓存到本地 软引用 学习分享(转)...
  14. 华清远见嵌入式培训_第六周回顾与反思
  15. 新颖的 USB HUB快充方案助您无忧!!(兼容PD、QC、AFC等快充协议)
  16. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除
  17. 【k8s系列十二】k8s 之 Service的类型
  18. ldap服务器的虚拟属性,搭建LDAP验证服务器
  19. 组态王与网络mysql数据库通过ODBC连接
  20. 1分钟链圈 | 快播创始人王欣成立区块链公司,获3000万美元融资

热门文章

  1. pytorch设计卷积神经网络的广义分析
  2. python 爬预警没解析前的
  3. php中一个经典的!==的用法
  4. Spring MVC 中使用 Google kaptcha 验证码
  5. 以太网迎新增长 专家眼中的车载以太网及AVB技术
  6. 智慧城市资金瓶颈亟待突破
  7. Ionic css组成(三)
  8. Codeforces 611D New Year and Ancient Prophecy DP
  9. BW:Start Routine
  10. 大数据时代的创新者们