SpringBoot整合MyBatis/Plus
1.SpringBoot整合MyBatis
1.1整合案例
需求:整合SpringBoot和Mybatis,向資料庫中查詢資料,
專案結構:
1.1.1創建資料庫和表
-- 創建資料庫
DROP DATABASE IF EXISTS springboot_mybatis;
CREATE DATABASE springboot_mybatis;
USE springboot_mybatis;
-- 創建表
CREATE TABLE monster(
`id` INT NOT NULL AUTO_INCREMENT,
`age` INT NOT NULL,
`birthday` DATE DEFAULT NULL,
`email` VARCHAR(255) DEFAULT NULL,
`gender` CHAR(1) DEFAULT NULL,
`name` VARCHAR(255) DEFAULT NULL,
`salary` DOUBLE NOT NULL,
PRIMARY KEY(`id`)
)CHARSET=utf8;
插入測驗資料:
1.1.2引入依賴
在pom.xml中引入mybatis及相關的依賴
<!--匯入SpringBoot父工程-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.3</version>
</parent>
<dependencies>
<!--web starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!--mysql驅動,使用版本仲裁-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--配置處理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--springboot test starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--druid 資料源,也可以使用默認的資料源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
</dependencies>
1.1.3配置資料源
在resource/application.yml中配置資料源,并完成SpringBoot專案啟動測驗
spring:
datasource: #配置資料源
url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 9090
創建配置類,設定Druid資料源:
這里如果引入的依賴是druid-starter,可以直接在yml檔案中配置
package com.li.springboot.mybatis.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
/**
* @author 李
* @version 1.0
*/
@Configuration
public class DruidDataSourceConfig {
@ConfigurationProperties("spring.datasource")
@Bean
public DataSource dataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
1.1.4指定mapper.xml路徑
在application.yml檔案中配置mybatis,指定要掃描的mapper.xml檔案的路徑
在ssm整合中,這一步也是在applicationContext.xml容器檔案中指定
mybatis:
mapper-locations: classpath:mapper/*.xml #指定要掃描的mapper.xml路徑
1.1.5代碼實作
(1)創建JavaBean--Monster.java,用于表映射
package com.li.springboot.mybatis.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author 李
* @version 1.0
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Monster {
private Integer id;
private Integer age;
private Date birthday;
private String email;
private String name;
private String gender;
private Double salary;
}
(2)創建mapper介面,用于宣告方法
package com.li.springboot.mybatis.mapper;
import com.li.springboot.mybatis.bean.Monster;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 李
* @version 1.0
* 使用注解@mapper,就可以將mapper介面物件注入容器
*/
@Mapper//除了使用注解,也可以直接指定要掃描的包
public interface MonsterMapper {
//根據id查詢資料記錄
public Monster getMonsterById(Integer id);
}
(3)在resource/mapper目錄下創建介面對應的mapper.xml檔案,實作宣告的方法
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.li.springboot.mybatis.mapper.MonsterMapper">
<!--配置getMonsterById方法-->
<select id="getMonsterById" resultType="com.li.springboot.mybatis.bean.Monster">
SELECT *
FROM `monster`
WHERE `id` = #{id}
</select>
</mapper>
(4)進行測驗:
如果要寫測驗類,一定要寫主程式
package com.li.springboot.mybatis;
import com.li.springboot.mybatis.bean.Monster;
import com.li.springboot.mybatis.mapper.MonsterMapper;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
/**
* @author 李
* @version 1.0
*/
@SpringBootTest
public class ApplicationTest {
@Resource
private MonsterMapper monsterMapper;//注入的實際上是它的代理類
//測驗MonsterMapper介面是否可用
@Test
public void getMonsterMapper() {
Monster monster = monsterMapper.getMonsterById(1);
System.out.println("monster=" + monster);
}
}
測驗結果:成功從資料庫中獲取資訊,
接下來的Service、Controller層和ssm沒有多大區別,這里不再贅述
1.1.6補充-對mybatis的配置
- SpringBoot對mybatis的配置有兩種方式:
(1)使用傳統方式配置,即使用mybatis-config.xml,不過要先在application.yml檔案中指定mybatis組態檔的路徑,
mybatis:
config-location: #指定mybatis-config.xml檔案的路徑
(2)直接使用application.yml檔案進行配置,例如:
mybatis:
type-aliases-package: com.li.springboot.mybatis.bean #指定別名
configuration:
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和其他依賴,
<!--匯入SpringBoot父工程-->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.5.3</version>
</parent>
<!--引入必要依賴-->
<dependencies>
<!--web starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MyBatis-plus starter-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!--mysql驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--配置處理器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--springboot test starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--druid 資料源,也可以使用默認的資料源-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.17</version>
</dependency>
</dependencies>
2.2.3配置資料源
(1)在resource/application.yml中配置資料源
server:
port: 9090
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_mybatisplus?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: 123456
(2)創建配置類,設定Druid資料源:這一步和mybatis整合相同,見上1.1.3操作
2.2.4代碼實作
(1)創建JavaBean--Monster.java,用于表映射(同1.1.4的操作,略)
(2)創建mapper介面,用于宣告方法
相比于mybatis需要自己宣告方法,MP提供了一個通用的BaseMapper,有很多通用的方法,通過繼承,我們就可以直接使用,簡化開發
package com.li.springboot.mybatisplus.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.li.springboot.mybatisplus.bean.Monster;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 李
* @version 1.0
* BaseMapper是MyBatisPlus內置的通用Mapper,提供了很多的方法
* 如果它提供的方法不能滿足業務需求,我們可以在這里開發新的方法
*/
@Mapper
public interface MonsterMapper extends BaseMapper<Monster> {
}
如果在這一步沒有自定義的介面方法,就不需要使用Mapper.xml檔案實作宣告
(3)開發Service
MP也提供了一個通用的Service介面,里面也提供了很多方法
package com.li.springboot.mybatisplus.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.li.springboot.mybatisplus.bean.Monster;
/**
* @author 李
* @version 1.0
* 1.在mybatis中,是在MonsterService宣告方法,然后在其實作類實作
* 2.而在MyBatis-Plus中,我們可以通過繼承父介面:IService,從而使用里面的很多方法
* 3.如果它提供的方法不能滿足業務需求,再開發新的方法
*/
@Service
public interface MonsterService extends IService<Monster> {
}
注意:如果在業務Service介面宣告了自定義方法,通常會創建一個實作類實作介面方法,問題是:由于業務Service介面繼承了IService介面,那么業務Service的實作類要同時實作兩個介面的方法才行,非常麻煩,
解決方案是:業務實作類通過繼承ServiceImpl類解決問題,ServiceImpl類是MyBatis-Plus提供的一個類,它已經實作了IService的方法,這樣業務實作類就只需要實作業務Service自定義的方法,
業務實作類MonsterServiceImpl:
package com.li.springboot.mybatisplus.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.li.springboot.mybatisplus.bean.Monster;
import com.li.springboot.mybatisplus.mapper.MonsterMapper;
import com.li.springboot.mybatisplus.service.MonsterService;
/**
* @author 李
* @version 1.0
*/
public class MonsterServiceImpl
extends ServiceImpl<MonsterMapper, Monster>
implements MonsterService {
//通過繼承ServiceImpl,這個實作類中就只用實作業務Service自定義的方法
}
controller層的實作和mybatis的大同小異,這里就不寫了
2.2.5補充-對MP的配置
- MyBatis-Plus的配置和MyBatis配置幾乎沒有區別,在SpringBoot中,同樣可以通過如下方式進行配置:
(1)使用傳統的組態檔配置,不過要先在application.yml檔案中指定組態檔的路徑:
mybatis-plus:
config-location: xxx #指定mp組態檔的路徑
(2)直接使用application.yml檔案進行配置,例如:
mybatis-plus:
configuration: # 進行mybatis-plus配置,配置項和mybatis一樣
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 提示(生成新增、生成查詢、生成修改、生成洗掉)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548132.html
標籤:Java
上一篇:jwt 學習筆記
下一篇:三天吃透Spring面試八股文
