Fluent Mybatis让你摆脱Xml文件的技巧

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,字段包括idnameage。其对应的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对象中,我们可以直接调用selectOneselectList 等方法来执行SQL语句。

四、总结

通过本篇文章的简单介绍,相信大家已经能够初步了解使用Fluent Mybatis来完成数据访问操作的流程。可以看到,Fluent Mybatis使Mybatis的使用更加简单,代码更少且更加直观,可以使开发人员更聚焦于业务逻辑的实现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Fluent Mybatis让你摆脱Xml文件的技巧 - Python技术站

(0)
上一篇 2023年5月21日
下一篇 2023年5月21日

相关文章

  • MySQL常用SQL语句总结包含复杂SQL查询

    MySQL常用SQL语句总结 MySQL是广泛使用的开源关系型数据库管理系统,其常用SQL语句如下: 增加数据 INSERT INSERT用于将数据插入到表中,其常用语法为: INSERT INTO table_name (col1, col2, col3, …) VALUES (val1, val2, val3, …); 表名和列名需要替换为实际的…

    database 2023年5月21日
    00
  • 国内营销和国际营销的区别

    国内营销和国际营销的区别主要体现在目标市场、文化差异和营销策略等方面。 一、目标市场的不同 国内营销主要面向中国的消费者市场,而国际营销则需要面向全球不同的市场。在国内,消费者的消费习惯和文化传统都比较固定,因此企业采取的营销策略和市场定位也相对更容易。但在国际市场,消费者的消费习惯、文化背景、宗教信仰等差异非常大,企业需要根据不同的市场进行定位。 例如:华…

    database 2023年3月27日
    00
  • Android编程操作嵌入式关系型SQLite数据库实例详解

    Android编程操作嵌入式关系型SQLite数据库实例详解 什么是SQLite数据库 SQLite是一种轻型的关系型数据库。与其他数据库不同,SQLite是嵌入式的数据库,它不需要独立的服务器进程或配置,而直接读取或写入普通文件。这使得SQLite非常适用于需要轻量级、快速、可靠的数据存储和检索的场景,包括Android应用。 在Android中使用SQL…

    database 2023年5月22日
    00
  • oracle分页存储过程 oracle存储过程实例

    下面就来详细讲解“oracle分页存储过程 oracle存储过程实例”的完整攻略。 什么是Oracle存储过程? Oracle数据库提供了一个强大的过程编程语言PL/SQL,可以撰写出存储过程、触发器、函数等程序化的数据操作对象。存储过程是一系列SQL语句的组合,相当于一种函数,可以接收参数,可以返回值。 为什么需要Oracle分页存储过程? 分页是Web开…

    database 2023年5月21日
    00
  • 总结三道MySQL联合索引面试题

    针对题目“总结三道MySQL联合索引面试题”的完整攻略,以下是我的详细讲解。 一、什么是联合索引 联合索引也叫组合索引,即基于多个列来创建的索引。比如,我们可以在一张用户表中创建一个联合索引,其中包含user_id, user_name和age三列,这样当我们查询某个用户的信息时,就可以使用这个联合索引来提高查询速度。联合索引可以让多个列的组合有更高效的查询…

    database 2023年5月19日
    00
  • MySQL 数据库的对库的操作及其数据类型

    MySQL 数据库的对库的操作及其数据类型 什么是 MySQL 数据库 MySQL 数据库是一个开放源代码的关系型数据库管理系统,它是最流行的 RDBMS 之一。它使用 SQL 语言进行关系查询,管理和处理数据。通过使用 MySQL,你可以创建一个包含多个表的数据库,并对这些表执行各种对表的操作以存储和处理数据。 MySQL 数据库的对库的操作 在 MySQ…

    database 2023年5月18日
    00
  • MySQL查看表中的约束的4种方法

    MySQL中查看表中的约束有以下几种方法: DESC命令 使用DESC命令可以查看表的结构,包括所有的列和约束。 语法:DESC 表名; 示例: DESC students; SHOW CREATE TABLE命令 使用SHOW CREATE TABLE命令可以查看表的创建语句,其中包括所有的列和约束。 语法:SHOW CREATE TABLE 表名; 示例…

    MySQL 2023年3月9日
    00
  • SQL Server 提取数字、提取英文、提取中文的sql语句

    SQL Server 提取数字、提取英文、提取中文的sql语句,可以使用正则表达式和一些内置函数来实现。 提取数字 SQL Server 中内置了一个叫做PATINDEX()的函数来匹配文本中的模式,同时还有一个叫做SUBSTRING()的函数来从匹配位置开始截取文本。利用这两个函数,我们可以在SQL Server中提取数字。示例如下: DECLARE @T…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部