一、FluentMybatis 查询
FluentMybatis 是一个支持类型安全的 Mybatis 封装,使得代码更易读、易写、易维护。它提供了丰富的查询 API,支持动态条件、自定义返回类型、多表联合查询等功能。
以下代码展示了如何使用 FluentMybatis 查询一个用户对象:
<!-- 定义 XML 映射文件 --> <mapper namespace="com.example.mapper.UserMapper"> <resultMap id="userMap" type="com.example.entity.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <select id="getById" resultMap="userMap"> SELECT * FROM user WHERE id = #{id} </select> </mapper> // 使用 FluentMybatis 查询 User user = new FluentMybatis() .select(User::getId, User::getName, User::getAge) // 自定义返回类型 .from(User.class) .where(User::getId).eq(1L) // 动态条件 .single(); // 返回单个对象
可以看到,FluentMybatis 的查询代码比 Mybatis 原生的 XML 配置 + Java 代码实现要简洁得多。
二、FluentMybatis 和 MybatisPlus 优劣
FluentMybatis 和 MybatisPlus 都是对 Mybatis 进行了封装,它们的目的都是为了让开发更快、更方便、更高效。那么它们之间有什么优劣呢?下面进行简单的对比:
2.1 MybatisPlus 的优势
MybatisPlus 是一个更加成熟的 ORM 框架,它拥有更完整的功能,如分页、逻辑删除、多租户等,并且它在国内的影响力较大,获得更多的社区支持。
以下代码展示了如何使用 MybatisPlus 查询一个用户对象:
// 使用 MybatisPlus 查询 User user = userRepository.selectOne(new QueryWrapper<User>() .eq("id", 1L)); // 动态条件
2.2 FluentMybatis 的优势
FluentMybatis 的 API 更具可读性和可维护性,代码更加优雅,并且支持一些高级功能,如复杂的多表联查、自定义返回类型等。
以下代码展示了如何使用 FluentMybatis 查询一个用户对象:
// 使用 FluentMybatis 查询 User user = new FluentMybatis() .select(User::getId, User::getName, User::getAge) // 自定义返回类型 .from(User.class) .where(User::getId).eq(1L) // 动态条件 .single(); // 返回单个对象
三、FluentMybatis 优缺点
FluentMybatis 的优点已经在前面提到了,比如 API 可读性高、代码优雅、支持多表联查等。不过它也存在一些缺点,比如:
3.1 学习成本稍高
虽然 FluentMybatis 的 API 更加易读易写,但是它的学习成本相对较高。如果团队中没有人使用过 FluentMybatis,那么需要花费一定的时间来学习和掌握。
3.2 功能相对较少
相对于 MybatisPlus 来说,FluentMybatis 的功能比较简单,不支持分页、逻辑删除等高级功能。如果项目需要使用这些功能,那么需要手动实现。
四、FluentMybatis 成熟吗
FluentMybatis 是一个比较新的项目,目前已经发布了数个版本。虽然它功能相对较少,但是它的代码质量较高,参与贡献的人员也比较活跃,因此它的稳定性和可靠性值得信赖。
五、FluentMybatis 动态数据库连接
FluentMybatis 支持根据请求动态切换数据库连接。下面是一个简单的例子:
// 定义数据源 HikariDataSource ds1 = new HikariDataSource(); ds1.setJdbcUrl("jdbc:mysql://localhost:3306/test"); ds1.setUsername("root"); ds1.setPassword(""); HikariDataSource ds2 = new HikariDataSource(); ds2.setJdbcUrl("jdbc:mysql://localhost:3306/test2"); ds2.setUsername("root"); ds2.setPassword(""); // 动态切换数据源 FluentMybatis fm = new FluentMybatis(); fm.use(ds1); // 切换至 ds1 User user1 = fm.select(User::getId, User::getName, User::getAge) .from(User.class) .where(User::getId).eq(1L) .single(); fm.use(ds2); // 切换至 ds2 User user2 = fm.select(User::getId, User::getName, User::getAge) .from(User.class) .where(User::getId).eq(1L) .single();
六、FluentMybatis 阿里的吗
FluentMybatis 是一个开源的项目,不属于阿里的,但是它是基于阿里的开源项目开发的(比如:FastJSON、Druid 等),因此它具有阿里开源项目的思想和特点。
七、FluentMybatis 如何多表查询
FluentMybatis 支持多表联查,下面是一个简单的例子:
// 查询用户及其对应的订单列表 List<UserWithOrders> userList = new FluentMybatis() .select(User::getId, User::getName, User::getAge, Order::getId, Order::getPrice) .from(User.class) .leftJoin(Order.class).on(User::getId).eq(Order::getUserId) .where(User::getId).eq(1L) .toQuery() .list(UserWithOrders.class);
可以看到,使用 FluentMybatis 查询多表是非常简单的,只需要使用 join/leftJoin 等函数即可。同时,FluentMybatis 也支持自定义返回类型,可以方便地将结果映射为复杂的实体对象。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/286985.html