在 Java 项目中,我们经常需要与数据库进行交互,而 Mybatis 是一个流行的持久层框架,它可以将 Java 对象映射到 SQL 语句,从而简化数据库操作。
不过在使用 Mybatis 做开发时,最头痛的事情就是处理复杂业务查询,如果将业务转移到service层,就会增加访问数据库的次数。
如果放到dao层,就要手动在xml中写复杂的sql,用插件自动生成mapper时,会覆盖xml中的修改,非常让人头疼
Fluent Mybatis 是一个基于 Mybatis 的扩展库,它提供了更加简洁、易读的 API,使得我们能够更加高效地进行数据库操作。
本文将介绍如何使用 Fluent Mybatis 进行基本的增删改查操作。
使用 Fluent Mybatis 很简单,分为以下5步:
在开始使用 Fluent Mybatis 之前,我们需要确保已经安装了 Java 开发环境、Maven 以及 MySQL 数据库。接下来,我们需要在项目的 pom.xml 文件中添加 Fluent Mybatis 的依赖:
<dependencies><!--引入fluent-mybatis运行依赖包,scope为compile--> <dependency> <groupId>com.github.atool</groupId> <artifactId>fluent-mybatis</artifactId> <version>1.9.3</version> </dependency> <!--引入fluent-mybatis-processor,scope设置为provider编译需要,运行时不需要--> <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 '用户名称', `user_age` int NOT NULL DEFAULT '0' COMMENT '用户年龄', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户信息表';
@FluentMybatis(table = "user_info") // 定义表名称@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
自动生成如下类:
图片
首先,我们需要配置 Mybatis 的相关信息,如数据源、SQL 会话工厂等。这里,我们使用 Spring Boot 进行配置:
@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 进行增删改查的基本操作演示:
public class UserServiceTest { @Autowired private UserInfoMapper mapper; @Test public void insert() { UserInfoEntity entity = new UserInfoEntity(); entity.setUserAge(10); entity.setUserName("zhangsan"); mapper.insert(entity); }}
在这个示例中,我们首先创建了一个新的 UserInfoEntity 对象,并设置了其 userName 和 userAge 属性。然后,我们调用 UserInfoMapper.insert(entity) 方法将新用户插入到数据库中。
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); }
在这个示例中,我们展示了如何使用 Fluent Mybatis 进行不同类型的查询操作。我们可以根据用户名模糊查询用户。
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() ); }}
在这个示例中,我们首先根据 ID 查询到需要更新的用户。然后,我们修改用户的 name 和 age 属性,并调用 UserMapper.updateBy() 方法将更新后的用户信息保存到数据库中。
public class UserService { @Autowired private UserInfoMapper mapper; @Test public void delete() { mapper.delete(mapper.query() .where.id().eq(1L).end()); }}
在这个示例中,我们展示了如何使用 Fluent Mybatis 进行删除操作。我们可以根据 ID 删除用户。
@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"); // 输出查询字段 List<UserInfoEntity> userInfoEntities = mapper.listPoJos(UserInfoEntity.class, iQuery); System.out.println(userInfoEntities); }
在这个示例中,我们展示了如何使用 Fluent Mybatis 进行join查询操作。我们将表user_info自身进行join,以id作为连接条件。
通过以上示例,我们可以看到 Fluent Mybatis 提供了一套简洁、易读的 API,使得我们能够更加高效地进行数据库操作。同时,它还支持链式编程,让代码更加简洁。如果你正在使用 Mybatis 进行数据库操作,那么不妨尝试一下 Fluent Mybatis,它或许会给你带来更好的开发体验。
本文链接:http://www.28at.com/showinfo-26-79451-0.html你还在用Mybatis?试试这款神器,纵享丝滑
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com