Fluent Mybatis是Mybatis框架的一种替代方案,基于Java 8中的Lambda表达式和Stream API,使得编写Mybatis映射文件变得更加简单易用。本篇文章将为你介绍如何使用Fluent Mybatis进行Mybatis开发,让你摆脱Xml文件的束缚。
一、基本概念
1.1 数据库连接
在Fluent Mybatis中,数据库连接的配置跟Mybatis一样都是通过XML文件进行配置,并通过DataSourceBuilder
创建出对应的javax.sql.DataSource
对象。这些配置和Mybatis中的配置一样,本篇文章就不再赘述。
1.2 实体类
在Fluent Mybatis中,实体类就是与对应表结构信息一一对应的Java Bean类,用于操作数据库中的记录。Fluent Mybatis通过使用Java 8中的Lambda表达式和Stream API实现简单易用的数据操作,如预编译SQL语句、将查询结果自动映射到Java Bean对象上等。
1.3 数据访问层
在Fluent Mybatis中,数据访问层是对数据持久化层的封装,用于实现数据访问、数据查询、数据插入等操作,单个访问层对应一个Java Bean类。Fluent Mybatis通过使用Java 8中的Lambda表达式和Stream API实现简单易用的数据操作。
二、使用Fluent Mybatis
2.1 添加依赖
在使用Fluent Mybatis之前,需要在Maven或Gradle项目中添加Fluent Mybatis依赖。
<dependency>
<groupId>org.mybatis.fluent</groupId>
<artifactId>mybatis-fluent</artifactId>
<version>${mybatis.fluent.version}</version>
</dependency>
2.2 创建实体类
假设我们有一个数据库表叫user
,对应的Java Bean类为User.java
,字段包括id
、name
和age
。其对应的Java类如下:
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class User {
private Long id;
private String name;
private Integer age;
}
2.3 创建数据访问层
假设我们需要创建一个UserDao
来完成对user
表的数据操作。在Fluent Mybatis中,要使用的方法都在Mapper
类中实现,需要继承具体的Mapper
类。Mapper
类由Fluent Mybatis提供的MapperBuilder
创建。
public interface UserDao extends Mapper<User> {
}
具有通用CRUD操作,如果有自定义的SQL查询需要的话,可以添加自定义的Mapper方法,如下:
public interface UserDao extends Mapper<User> {
@Select("SELECT * FROM user WHERE name LIKE #{name} LIMIT #{start}, #{limit}")
List<User> findByLikeName(@Param("name") String name, @Param("start") int start, @Param("limit") int limit);
}
2.4 创建MyBatis配置文件
在Fluent Mybatis中,不需要编写MyBatis XML配置文件,只需要创建一个类来配置数据源和数据访问层。
@Configuration
public class MybatisConfiguration {
@Bean
public DataSource dataSource() {
return new DataSourceBuilder()
.url("jdbc:mysql://localhost:3306/mybatis_demo")
.username("root")
.password("123456")
.driverClassName("com.mysql.jdbc.Driver")
.build();
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) {
return new FluentConfiguration()
.dataSource(dataSource)
.build();
}
}
2.5 编写测试用例
在Fluent Mybatis中,使用Java 8中的lambda表达式和Stream API来实现数据访问操作,比如查询所有用户的代码如下:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MybatisApplication.class)
public class UserDaoTest {
@Autowired
private UserDao userDao;
@Test
public void testSelectList() {
List<User> userList = userDao.selectAll().stream()
.map(QueryResult::toObject)
.collect(Collectors.toList());
Assert.assertEquals(userList.size(), 6);
}
}
是不是非常简单呢。通过使用Fluent Mybatis,我们可以摆脱Mybatis XML文件的束缚,更加简单快捷地完成数据访问操作。
三、使用MyBatis XML和Fluent Mybatis的结合
在Fluent Mybatis中,虽然不需要编写MyBatis XML文件,但是当遇到一些复杂查询时,仍然变得比较困难。此时,我们可以通过结合使用MyBatis XML和Fluent Mybatis,来实现更复杂的数据访问操作。
以用户表为例,我们想要通过用户名来模糊查询,查询结果按照用户ID进行排序。这时,我们可以写一个包含复杂查询语句的XML文件,然后在Fluent Mybatis中调用这个XML文件中的语句。参考代码如下:
3.1 编写XML文件
<select id="selectByLikeName" resultMap="BaseResultMap" parameterType="java.lang.String">
SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%') ORDER BY id ASC
</select>
3.2 创建数据访问层
public interface UserDao extends Mapper<User> {
List<User> selectByLikeName(String name);
}
3.3 使用MapperBuilder的方法访问
userDao.useSqlSession(sqlSession -> {
List<User> userList = sqlSession.selectList("selectByLikeName", "李");
return userList.stream().map(QueryResult::toObject).collect(Collectors.toList());
});
可以看到,在Fluent Mybatis中,调用XML文件的语句极其简单,在SQLSession对象中,我们可以直接调用selectOne
、selectList
等方法来执行SQL语句。
四、总结
通过本篇文章的简单介绍,相信大家已经能够初步了解使用Fluent Mybatis来完成数据访问操作的流程。可以看到,Fluent Mybatis使Mybatis的使用更加简单,代码更少且更加直观,可以使开发人员更聚焦于业务逻辑的实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Fluent Mybatis让你摆脱Xml文件的技巧 - Python技术站