在 Java 項(xiàng)目中,我們經(jīng)常需要與數(shù)據(jù)庫(kù)進(jìn)行交互,而 Mybatis 是一個(gè)流行的持久層框架,它可以將 Java 對(duì)象映射到 SQL 語(yǔ)句,從而簡(jiǎn)化數(shù)據(jù)庫(kù)操作。
不過(guò)在使用 Mybatis 做開(kāi)發(fā)時(shí),最頭痛的事情就是處理復(fù)雜業(yè)務(wù)查詢(xún),如果將業(yè)務(wù)轉(zhuǎn)移到service層,就會(huì)增加訪問(wèn)數(shù)據(jù)庫(kù)的次數(shù)。
如果放到dao層,就要手動(dòng)在xml中寫(xiě)復(fù)雜的sql,用插件自動(dòng)生成mapper時(shí),會(huì)覆蓋xml中的修改,非常讓人頭疼
Fluent Mybatis 是一個(gè)基于 Mybatis 的擴(kuò)展庫(kù),它提供了更加簡(jiǎn)潔、易讀的 API,使得我們能夠更加高效地進(jìn)行數(shù)據(jù)庫(kù)操作。
本文將介紹如何使用 Fluent Mybatis 進(jìn)行基本的增刪改查操作。
使用 Fluent Mybatis 很簡(jiǎn)單,分為以下5步:
在開(kāi)始使用 Fluent Mybatis 之前,我們需要確保已經(jīng)安裝了 Java 開(kāi)發(fā)環(huán)境、Maven 以及 MySQL 數(shù)據(jù)庫(kù)。接下來(lái),我們需要在項(xiàng)目的 pom.xml 文件中添加 Fluent Mybatis 的依賴(lài):
<dependencies><!--引入fluent-mybatis運(yùn)行依賴(lài)包,scope為compile--> <dependency> <groupId>com.github.atool</groupId> <artifactId>fluent-mybatis</artifactId> <version>1.9.3</version> </dependency> <!--引入fluent-mybatis-processor,scope設(shè)置為provider編譯需要,運(yùn)行時(shí)不需要--> <dependency> <groupId>com.github.atool</groupId> <artifactId>fluent-mybatis-processor</artifactId> <version>1.9.3</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency></dependencies>CREATE TABLE `user_info` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id', `user_name` varchar(64) DEFAULT NULL COMMENT '用戶(hù)名稱(chēng)', `user_age` int NOT NULL DEFAULT '0' COMMENT '用戶(hù)年齡', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用戶(hù)信息表';@FluentMybatis(table = "user_info") // 定義表名稱(chēng)@Datapublic class UserInfoEntity extends RichEntity { private Long id; private String userName; private Integer userAge; @Override public Class<? extends IEntity> entityClass() { return UserInfoEntity.class; }}mvn clean compile自動(dòng)生成如下類(lèi):
圖片
首先,我們需要配置 Mybatis 的相關(guān)信息,如數(shù)據(jù)源、SQL 會(huì)話工廠等。這里,我們使用 Spring Boot 進(jìn)行配置:
@ComponentScan(basePackages = "com.test")@MapperScan("com.test.mapper")@Configurationpublic class DataSourceConfig { @Bean public DataSource dataSource() { final HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"); dataSource.setUsername("root"); dataSource.setPassword("1234"); return dataSource; } /** * 定義mybatis的SqlSessionFactoryBean * * @param dataSource * @return */ @Bean public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); return bean; } @Bean public MapperFactory mapperFactory() { return new MapperFactory(); }}下面我們使用 Fluent Mybatis 進(jìn)行增刪改查的基本操作演示:
public class UserServiceTest { @Autowired private UserInfoMapper mapper; @Test public void insert() { UserInfoEntity entity = new UserInfoEntity(); entity.setUserAge(10); entity.setUserName("zhangsan"); mapper.insert(entity); }}在這個(gè)示例中,我們首先創(chuàng)建了一個(gè)新的 UserInfoEntity 對(duì)象,并設(shè)置了其 userName 和 userAge 屬性。然后,我們調(diào)用 UserInfoMapper.insert(entity) 方法將新用戶(hù)插入到數(shù)據(jù)庫(kù)中。
public class UserService { @Autowired private UserInfoMapper mapper; @Test public void select() { UserInfoEntity entity = mapper.findOne(mapper.query() .where.userName().like("zhangsan").end() .limit(1)); System.out.println(entity); }在這個(gè)示例中,我們展示了如何使用 Fluent Mybatis 進(jìn)行不同類(lèi)型的查詢(xún)操作。我們可以根據(jù)用戶(hù)名模糊查詢(xún)用戶(hù)。
public class UserService { @Autowired private UserInfoMapper mapper; @Test public void update() { mapper.updateBy(mapper.updater() .set.userName().is("lisi") .set.userAge().is(20).end() .where.id().eq(1L).end() ); }}在這個(gè)示例中,我們首先根據(jù) ID 查詢(xún)到需要更新的用戶(hù)。然后,我們修改用戶(hù)的 name 和 age 屬性,并調(diào)用 UserMapper.updateBy() 方法將更新后的用戶(hù)信息保存到數(shù)據(jù)庫(kù)中。
public class UserService { @Autowired private UserInfoMapper mapper; @Test public void delete() { mapper.delete(mapper.query() .where.id().eq(1L).end()); }}在這個(gè)示例中,我們展示了如何使用 Fluent Mybatis 進(jìn)行刪除操作。我們可以根據(jù) ID 刪除用戶(hù)。
@Test public void joinQuery() { JoinBuilder<FreeQuery> joinBuilder = null; UserInfoQuery leftQuery = UserInfoQuery.query().selectAll(); UserInfoQuery rightQuery = UserInfoQuery.query().select.id("right_id").end(); // 添加別名 joinBuilder = JoinBuilder.from(leftQuery).join(rightQuery).onEq("id", "id").endJoin().build(); // join條件 FreeQuery iQuery = new FreeQuery(joinBuilder.build(), "sub").select("id", "user_name", "user_age"); // 輸出查詢(xún)字段 List<UserInfoEntity> userInfoEntities = mapper.listPoJos(UserInfoEntity.class, iQuery); System.out.println(userInfoEntities); }在這個(gè)示例中,我們展示了如何使用 Fluent Mybatis 進(jìn)行join查詢(xún)操作。我們將表user_info自身進(jìn)行join,以id作為連接條件。
通過(guò)以上示例,我們可以看到 Fluent Mybatis 提供了一套簡(jiǎn)潔、易讀的 API,使得我們能夠更加高效地進(jìn)行數(shù)據(jù)庫(kù)操作。同時(shí),它還支持鏈?zhǔn)骄幊蹋尨a更加簡(jiǎn)潔。如果你正在使用 Mybatis 進(jìn)行數(shù)據(jù)庫(kù)操作,那么不妨嘗試一下 Fluent Mybatis,它或許會(huì)給你帶來(lái)更好的開(kāi)發(fā)體驗(yàn)。
本文鏈接:http://m.www897cc.com/showinfo-26-79451-0.html你還在用Mybatis?試試這款神器,縱享絲滑
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com