day13-SpringBoot整合MyBatis/Plus

打印 上一主题 下一主题

主题 833|帖子 833|积分 2499

SpringBoot整合MyBatis/Plus

1.SpringBoot整合MyBatis

1.1整合案例

需求:整合SpringBoot和Mybatis,向数据库中查询数据。
项目结构:
1.1.1创建数据库和表
  1. -- 创建数据库
  2. DROP DATABASE IF EXISTS springboot_mybatis;
  3. CREATE DATABASE springboot_mybatis;
  4. USE springboot_mybatis;
  5. -- 创建表
  6. CREATE TABLE monster(
  7. `id` INT NOT NULL  AUTO_INCREMENT,
  8. `age` INT NOT NULL,
  9. `birthday` DATE DEFAULT NULL,
  10. `email` VARCHAR(255) DEFAULT NULL,
  11. `gender` CHAR(1) DEFAULT NULL,
  12. `name` VARCHAR(255) DEFAULT NULL,
  13. `salary` DOUBLE NOT NULL,
  14. PRIMARY KEY(`id`)
  15. )CHARSET=utf8;
复制代码
插入测试数据:
1.1.2引入依赖

在pom.xml中引入mybatis及相关的依赖
  1. <parent>
  2.     <artifactId>spring-boot-starter-parent</artifactId>
  3.     <groupId>org.springframework.boot</groupId>
  4.     <version>2.5.3</version>
  5. </parent>
  6. <dependencies>
  7.    
  8.     <dependency>
  9.         <groupId>org.springframework.boot</groupId>
  10.         <artifactId>spring-boot-starter-web</artifactId>
  11.     </dependency>
  12.    
  13.     <dependency>
  14.         <groupId>org.mybatis.spring.boot</groupId>
  15.         <artifactId>mybatis-spring-boot-starter</artifactId>
  16.         <version>2.2.2</version>
  17.     </dependency>
  18.    
  19.     <dependency>
  20.         <groupId>mysql</groupId>
  21.         <artifactId>mysql-connector-java</artifactId>
  22.     </dependency>
  23.    
  24.     <dependency>
  25.         <groupId>org.springframework.boot</groupId>
  26.         <artifactId>spring-boot-configuration-processor</artifactId>
  27.     </dependency>
  28.    
  29.     <dependency>
  30.         <groupId>org.projectlombok</groupId>
  31.         <artifactId>lombok</artifactId>
  32.     </dependency>
  33.    
  34.     <dependency>
  35.         <groupId>org.springframework.boot</groupId>
  36.         <artifactId>spring-boot-starter-test</artifactId>
  37.     </dependency>
  38.      
  39.     <dependency>
  40.         <groupId>com.alibaba</groupId>
  41.         <artifactId>druid</artifactId>
  42.         <version>1.1.17</version>
  43.     </dependency>
  44. </dependencies>
复制代码
1.1.3配置数据源

在resource/application.yml中配置数据源,并完成SpringBoot项目启动测试
  1. spring:
  2.   datasource: #配置数据源
  3.     url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
  4.     username: root
  5.     password: 123456
  6.     driver-class-name: com.mysql.cj.jdbc.Driver
  7. server:
  8.   port: 9090
复制代码
创建配置类,设置Druid数据源:
这里如果引入的依赖是druid-starter,可以直接在yml文件中配置
  1. package com.li.springboot.mybatis.config;
  2. import com.alibaba.druid.pool.DruidDataSource;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import javax.sql.DataSource;
  7. /**
  8. * @author 李
  9. * @version 1.0
  10. */
  11. @Configuration
  12. public class DruidDataSourceConfig {
  13.     @ConfigurationProperties("spring.datasource")
  14.     @Bean
  15.     public DataSource dataSource() {
  16.         DruidDataSource druidDataSource = new DruidDataSource();
  17.         return druidDataSource;
  18.     }
  19. }
复制代码
1.1.4指定mapper.xml路径

在application.yml文件中配置mybatis,指定要扫描的mapper.xml文件的路径
在ssm整合中,这一步也是在applicationContext.xml容器文件中指定
  1. mybatis:
  2.   mapper-locations: classpath:mapper/*.xml #指定要扫描的mapper.xml路径
复制代码
1.1.5代码实现

(1)创建JavaBean--Monster.java,用于表映射
  1. package com.li.springboot.mybatis.bean;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.util.Date;
  6. /**
  7. * @author 李
  8. * @version 1.0
  9. */
  10. @Data
  11. @NoArgsConstructor
  12. @AllArgsConstructor
  13. public class Monster {
  14.     private Integer id;
  15.     private Integer age;
  16.     private Date birthday;
  17.     private String email;
  18.     private String name;
  19.     private String gender;
  20.     private Double salary;
  21. }
复制代码
(2)创建mapper接口,用于声明方法
  1. package com.li.springboot.mybatis.mapper;
  2. import com.li.springboot.mybatis.bean.Monster;
  3. import org.apache.ibatis.annotations.Mapper;
  4. /**
  5. * @author 李
  6. * @version 1.0
  7. * 使用注解@mapper,就可以将mapper接口对象注入容器
  8. */
  9. @Mapper//除了使用注解,也可以直接指定要扫描的包
  10. public interface MonsterMapper {
  11.     //根据id查询数据记录
  12.     public Monster getMonsterById(Integer id);
  13. }
复制代码
(3)在resource/mapper目录下创建接口对应的mapper.xml文件,实现声明的方法
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4. <mapper namespace="com.li.springboot.mybatis.mapper.MonsterMapper">
  5.    
  6.     <select id="getMonsterById" resultType="com.li.springboot.mybatis.bean.Monster">
  7.         SELECT *
  8.         FROM `monster`
  9.         WHERE `id` = #{id}
  10.     </select>
  11. </mapper>
复制代码
(4)进行测试:
如果要写测试类,一定要写主程序
  1. package com.li.springboot.mybatis;
  2. import com.li.springboot.mybatis.bean.Monster;
  3. import com.li.springboot.mybatis.mapper.MonsterMapper;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.boot.test.context.SpringBootTest;
  6. import javax.annotation.Resource;
  7. /**
  8. * @author 李
  9. * @version 1.0
  10. */
  11. @SpringBootTest
  12. public class ApplicationTest {
  13.     @Resource
  14.     private MonsterMapper monsterMapper;//注入的实际上是它的代理类
  15.     //测试MonsterMapper接口是否可用
  16.     @Test
  17.     public void getMonsterMapper() {
  18.         Monster monster = monsterMapper.getMonsterById(1);
  19.         System.out.println("monster=" + monster);
  20.     }
  21. }
复制代码
测试结果:成功从数据库中获取信息。
接下来的Service、Controller层和ssm没有多大区别,这里不再赘述
1.1.6补充-对mybatis的配置


  • SpringBoot对mybatis的配置有两种方式:
(1)使用传统方式配置,即使用mybatis-config.xml。不过要先在application.yml文件中指定mybatis配置文件的路径。
  1. mybatis:
  2.   config-location:  #指定mybatis-config.xml文件的路径
复制代码
(2)直接使用application.yml文件进行配置,例如:
  1. mybatis:
  2.   type-aliases-package: com.li.springboot.mybatis.bean #指定别名
  3.   configuration:
  4.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #指定标准的日志输出
复制代码

  • 两种方式的选择:

    • 如果配置比较简单,可以在yml中直接配置
    • 如果配置内容较多,可以单独地做一个配置文件

1.2注意事项和使用细节

SpringBoot中日期默认是格林尼治标准时间,和中国标准时相差8小时,可以通过注解@JsonFormat解决此问题:
其中pattern表示日期格式,timezone表示时区,GMT是格林尼治时间
2.SpringBoot整合MyBatis-Plus

2.1MyBatis-Plus基本介绍

MyBatisPlus官方文档

  • MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。

  • 强大的CRUD操作:内置了通用Mapper、通用Service,通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类需求。
2.2整合案例

需求:整合SpringBoot和MyBatis-Plus,向数据库中查询数据。
2.2.1创建数据库和表

略,表结构同上。
2.2.2引入依赖

pom.xml文件中引入mybatis-plus starter和其他依赖。
  1. <parent>
  2.     <artifactId>spring-boot-starter-parent</artifactId>
  3.     <groupId>org.springframework.boot</groupId>
  4.     <version>2.5.3</version>
  5. </parent>
  6. <dependencies>
  7.    
  8.     <dependency>
  9.         <groupId>org.springframework.boot</groupId>
  10.         <artifactId>spring-boot-starter-web</artifactId>
  11.     </dependency>
  12.    
  13.     <dependency>
  14.         <groupId>com.baomidou</groupId>
  15.         <artifactId>mybatis-plus-boot-starter</artifactId>
  16.         <version>3.4.3</version>
  17.     </dependency>
  18.    
  19.     <dependency>
  20.         <groupId>mysql</groupId>
  21.         <artifactId>mysql-connector-java</artifactId>
  22.     </dependency>
  23.    
  24.     <dependency>
  25.         <groupId>org.springframework.boot</groupId>
  26.         <artifactId>spring-boot-configuration-processor</artifactId>
  27.     </dependency>
  28.    
  29.     <dependency>
  30.         <groupId>org.projectlombok</groupId>
  31.         <artifactId>lombok</artifactId>
  32.     </dependency>
  33.    
  34.     <dependency>
  35.         <groupId>org.springframework.boot</groupId>
  36.         <artifactId>spring-boot-starter-test</artifactId>
  37.     </dependency>
  38.    
  39.     <dependency>
  40.         <groupId>com.alibaba</groupId>
  41.         <artifactId>druid</artifactId>
  42.         <version>1.1.17</version>
  43.     </dependency>
  44. </dependencies>
复制代码
2.2.3配置数据源

(1)在resource/application.yml中配置数据源
  1. server:
  2.   port: 9090
  3. spring:
  4.   datasource:
  5.     driver-class-name: com.mysql.cj.jdbc.Driver
  6.     url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8
  7.     username: root
  8.     password: 123456
复制代码
(2)创建配置类,设置Druid数据源:这一步和mybatis整合相同,见上1.1.3操作
2.2.4代码实现

(1)创建JavaBean--Monster.java,用于表映射(同1.1.4的操作,略)
(2)创建mapper接口,用于声明方法
相比于mybatis需要自己声明方法,MP提供了一个通用的BaseMapper,有很多通用的方法,通过继承,我们就可以直接使用,简化开发
  1. package com.li.springboot.mybatisplus.mapper;
  2. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  3. import com.li.springboot.mybatisplus.bean.Monster;
  4. import org.apache.ibatis.annotations.Mapper;
  5. /**
  6. * @author 李
  7. * @version 1.0
  8. * BaseMapper是MyBatisPlus内置的通用Mapper,提供了很多的方法
  9. * 如果它提供的方法不能满足业务需求,我们可以在这里开发新的方法
  10. */
  11. @Mapper
  12. public interface MonsterMapper extends BaseMapper<Monster> {
  13.    
  14. }
复制代码
如果在这一步没有自定义的接口方法,就不需要使用Mapper.xml文件实现声明
(3)开发Service
MP也提供了一个通用的Service接口,里面也提供了很多方法
  1. package com.li.springboot.mybatisplus.service;
  2. import com.baomidou.mybatisplus.extension.service.IService;
  3. import com.li.springboot.mybatisplus.bean.Monster;
  4. /**
  5. * @author 李
  6. * @version 1.0
  7. * 1.在mybatis中,是在MonsterService声明方法,然后在其实现类实现
  8. * 2.而在MyBatis-Plus中,我们可以通过继承父接口:IService,从而使用里面的很多方法
  9. * 3.如果它提供的方法不能满足业务需求,再开发新的方法
  10. */
  11. @Service
  12. public interface MonsterService extends IService<Monster> {
  13. }
复制代码
注意:如果在业务Service接口声明了自定义方法,通常会创建一个实现类实现接口方法,问题是:由于业务Service接口继承了IService接口,那么业务Service的实现类要同时实现两个接口的方法才行,非常麻烦。
解决方案是:业务实现类通过继承ServiceImpl类解决问题。ServiceImpl类是MyBatis-Plus提供的一个类,它已经实现了IService的方法。这样业务实现类就只需要实现业务Service自定义的方法。
业务实现类MonsterServiceImpl:
  1. package com.li.springboot.mybatisplus.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.li.springboot.mybatisplus.bean.Monster;
  4. import com.li.springboot.mybatisplus.mapper.MonsterMapper;
  5. import com.li.springboot.mybatisplus.service.MonsterService;
  6. /**
  7. * @author 李
  8. * @version 1.0
  9. */
  10. public class MonsterServiceImpl
  11.         extends ServiceImpl<MonsterMapper, Monster>
  12.         implements MonsterService {
  13.     //通过继承ServiceImpl,这个实现类中就只用实现业务Service自定义的方法
  14. }
复制代码
controller层的实现和mybatis的大同小异,这里就不写了
2.2.5补充-对MP的配置


  • MyBatis-Plus的配置和MyBatis配置几乎没有区别,在SpringBoot中,同样可以通过如下方式进行配置:
(1)使用传统的配置文件配置,不过要先在application.yml文件中指定配置文件的路径:
  1. mybatis-plus:
  2.   config-location: xxx #指定mp配置文件的路径
复制代码
(2)直接使用application.yml文件进行配置,例如:
  1. mybatis-plus:
  2.   configuration: # 进行mybatis-plus配置,配置项和mybatis一样
  3.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
复制代码

  • @MapperScan注解(修饰于主程序)可以替代@Mapper(修饰于mapper接口),basePackages属性可以接收多个值

2.3注意事项和使用细节

MyBatis-Plus的注解
(1)@TableName
描述:表名注解,标识实体类对应的表。如果实体类的类名和表名一致,则该注解可以省略,否则需要通过@TableName指定表名
(2)为了开发方便,IDEA可以安装MyBatisX插件,参考文档。该插件具有如下功能:XML 跳转、生成代码(需先在 idea 配置 Database 配置数据源)、重置模板、JPA 提示(生成新增、生成查询、生成修改、生成删除)

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

涛声依旧在

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表