Fluent Mybatis讓你擺脫Xml文件的技巧
一、啥是Fluent-Mybatis
與Mybatis-Plus類似,是對Mybaits進(jìn)一步的封裝,使之語法簡潔明了,更重要的是不需要在自主創(chuàng)建Xml文件,可以只用一個(gè)實(shí)體類對象,通過代碼生成器,在編譯的過程中生成所需要的各類文件,簡化了項(xiàng)目的基礎(chǔ)構(gòu)建,提高開發(fā)效率。

二、SpringBoot + Fluent-Mybatis
1、創(chuàng)建數(shù)據(jù)庫測試表
DROP TABLE IF EXISTS `t_user`;
create table `t_user`
(
id bigint auto_increment comment '主鍵ID' primary key,
name varchar(30) charset utf8 null comment '姓名',
age int null comment '年齡',
email varchar(50) charset utf8 null comment '郵箱',
gmt_create datetime null comment '記錄創(chuàng)建時(shí)間',
gmt_modified datetime null comment '記錄最后修改時(shí)間',
is_deleted tinyint(2) default 0 null comment '邏輯刪除標(biāo)識'
);
2、創(chuàng)建一個(gè)Springboot項(xiàng)目,pom文件如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mybatis.fluent</groupId>
<artifactId>fluent_mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>fluent_mybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<fluent.mybatis.version>1.5.6</fluent.mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--JDBC驅(qū)動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--Mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<!-- fluent mybatis依賴-->
<dependency>
<groupId>com.github.atool</groupId>
<artifactId>fluent-mybatis</artifactId>
<version>${fluent.mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.github.atool</groupId>
<artifactId>fluent-mybatis-processor</artifactId>
<version>${fluent.mybatis.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3、代碼生成器
import cn.org.atool.generator.FileGenerator;
import cn.org.atool.generator.annotation.Table;
import cn.org.atool.generator.annotation.Tables;
public class AppEntityGenerator {
public static void main(String[] args) {
FileGenerator.build(Abc.class);
}
@Tables(
/** 數(shù)據(jù)庫連接信息 **/
url = "jdbc:mysql://IP:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai",
username = "XXXXXX",
password = "XXXXXX",
/** Entity類parent package路徑 **/
basePack = "com.mybatis.fluent.fluent_mybatis",
/** Entity代碼源目錄 **/
srcDir = "/src/main/java",
/** Dao代碼源目錄 **/
daoDir = "/src/main/java",
/** 如果表定義記錄創(chuàng)建,記錄修改,邏輯刪除字段 **/
gmtCreated = "gmt_create", gmtModified = "gmt_modified", logicDeleted = "is_deleted",
/** 需要生成文件的表 **/
tables = @Table(value = {"t_user"})
)
static class Abc {
}
}
需要注意,默認(rèn)的是MySQL數(shù)據(jù)庫,如果需要其他數(shù)據(jù)庫,需要手動配置dbType和driver,其他選項(xiàng)按照需要修改。例如oralce
import cn.org.atool.generator.FileGenerator;
import cn.org.atool.generator.annotation.Table;
import cn.org.atool.generator.annotation.Tables;
import cn.org.atool.generator.database.DbType;
public class AppEntityGenerator {
public static void main(String[] args) {
FileGenerator.build(Abc.class);
}
@Tables(
/** 數(shù)據(jù)庫連接信息 **/
dbType= DbType.ORACLE,
driver= "oracle.jdbc.OracleDriver",
url = "jdbc:oracle:thin:@IP:1521:orcl",
username = "XXXXXX",
password = "XXXXXX",
/** Entity類parent package路徑 **/
basePack = "com.mybatis.fluent.fluent_mybatis",
/** Entity代碼源目錄 **/
srcDir = "/src/main/java",
/** Dao代碼源目錄 **/
daoDir = "/src/main/java",
/** 如果表定義記錄創(chuàng)建,記錄修改,邏輯刪除字段 **/
gmtCreated = "INSERT_DATE_TIME",
/** 需要生成文件的表 **/
tables = @Table(value = {"table_name"})
)
static class Abc {
}
}
main方法啟動執(zhí)行,生成的項(xiàng)目結(jié)構(gòu),如果在執(zhí)行是出現(xiàn)異常

需要暫時(shí)注釋

當(dāng)生成好對應(yīng)文件,項(xiàng)目目錄如下

此時(shí)TUserDaoImpl會有錯誤

此時(shí)將需要將之前注釋的provided打開,在執(zhí)行

執(zhí)行過后,異常消除。此時(shí)你就擁有的對數(shù)據(jù)庫此表的強(qiáng)大操作能力。
4、測試CURD
import cn.org.atool.fluent.mybatis.model.IPagedList;
import cn.org.atool.fluent.mybatis.model.StdPagedList;
import com.mybatis.fluent.fluent_mybatis.dao.impl.HospitalinfoDaoImpl;
import com.mybatis.fluent.fluent_mybatis.dao.impl.TUserDaoImpl;
import com.mybatis.fluent.fluent_mybatis.entity.HospitalinfoEntity;
import com.mybatis.fluent.fluent_mybatis.entity.TUserEntity;
import com.mybatis.fluent.fluent_mybatis.helper.TUserWrapperHelper;
import com.mybatis.fluent.fluent_mybatis.wrapper.HospitalinfoQuery;
import com.mybatis.fluent.fluent_mybatis.wrapper.TUserQuery;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;
@SpringBootTest
class FluentMybatisApplicationTests {
@Resource
private TUserDaoImpl dao;
@Test
void add() {
TUserEntity entity = new TUserEntity().setAge(20).setEmail("122@163.com").setName("lisi").setIsDeleted(false);
Serializable id = dao.save(entity);
System.out.println("插入后返回的主鍵ID為:" + id);
}
@Test
void select(){
/**
* 分頁查詢構(gòu)造條件
*/
TUserQuery query = TUserQuery.query().limit(0,1);
List<TUserEntity> list = dao.listEntity(query);
System.out.println(list);
}
@Test
void upData(){
TUserEntity entity = dao.selectById(1L);
System.out.println(entity);
entity.setAge(2000).setEmail("120098922@qq.com").setName("lisi111").setIsDeleted(true);
System.out.println(entity);
boolean b = dao.updateById(entity);
System.out.println(b);
}
@Test
void delete(){
boolean b = dao.deleteById(1L);
System.out.println(b);
TUserQuery query = TUserQuery.query();
List<TUserEntity> list = dao.listEntity(query);
System.out.println(list);
}
}
三、官方鏈接
官方網(wǎng)站提供了完整切詳細(xì)的構(gòu)建和使用的文檔,本文的內(nèi)容僅為學(xué)習(xí)練習(xí)的Demo
到此這篇關(guān)于Fluent Mybatis讓你擺脫Xml文件的技巧的文章就介紹到這了,更多相關(guān)Fluent Mybatis Xml文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springboot 整合fluent mybatis的過程,看這篇夠了
- Fluent MyBatis實(shí)現(xiàn)動態(tài)SQL
- Fluent Mybatis快速入門詳細(xì)教程
- Fluent Mybatis零xml配置實(shí)現(xiàn)復(fù)雜嵌套查詢
- Fluent Mybatis如何做到代碼邏輯和sql邏輯的合一
- FluentMybatis實(shí)現(xiàn)mybatis動態(tài)sql拼裝和fluent api語法
- Fluent Mybatis實(shí)際開發(fā)中的優(yōu)勢對比
- Fluent Mybatis,原生Mybatis,Mybatis Plus三者功能對比
- Fluent Mybatis 批量更新的使用
相關(guān)文章
Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本分享
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)json數(shù)據(jù)處理的常用腳本,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以學(xué)習(xí)一下2023-03-03
JAVA發(fā)送HTTP請求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實(shí)例代碼
這篇文章主要介紹了JAVA發(fā)送HTTP請求,返回HTTP響應(yīng)內(nèi)容,應(yīng)用及實(shí)例代碼,需要的朋友可以參考下2014-02-02
Java通過JsApi方式實(shí)現(xiàn)微信支付
本文講解了Java如何實(shí)現(xiàn)JsApi方式的微信支付,代碼內(nèi)容詳細(xì),文章思路清晰,需要的朋友可以參考下2015-07-07
JAVA實(shí)現(xiàn)簡單停車場系統(tǒng)代碼
JAVA項(xiàng)目中正號需要一個(gè)停車收費(fèi)系統(tǒng),就整理出來java實(shí)現(xiàn)的一個(gè)簡單的停車收費(fèi)系統(tǒng)給大家分享一下,希望對大家有所幫助2017-04-04
Java打印出所有的水仙花數(shù)的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java打印出所有的水仙花數(shù)的實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-02-02
Sentinel熱門詞匯限流的實(shí)現(xiàn)詳解
這篇文章主要介紹了使用Sentinel對熱門詞匯進(jìn)行限流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Java實(shí)現(xiàn)英文句子中的單詞順序逆序輸出的方法
這篇文章主要介紹了Java實(shí)現(xiàn)英文句子中的單詞順序逆序輸出的方法,涉及java字符串遍歷、判斷、截取、輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01

