你还在用Mybatis?试试这款神器,纵享丝滑

使用Mybatis实现复杂的业务查询逻辑,是一个很头痛的事情,下面介绍一个神器,完全使用DSL编程风格在service层就可以轻松实现。

Java 项目中,我们经常需要与数据库进行交互,而 Mybatis 是一个流行的持久层框架,它可以将 Java 对象映射到 SQL 语句,从而简化数据库操作。

不过在使用  Mybatis 做开发时,最头痛的事情就是处理复杂业务查询,如果将业务转移到service层,就会增加访问数据库的次数。

如果放到dao层,就要手动在xml中写复杂的sql,用插件自动生成mapper时,会覆盖xml中的修改,非常让人头疼

Fluent Mybatis是什么

Fluent Mybatis 是一个基于 Mybatis 的扩展库,它提供了更加简洁、易读的 API,使得我们能够更加高效地进行数据库操作。

本文将介绍如何使用 Fluent Mybatis 进行基本的增删改查操作。

使用 Fluent Mybatis 很简单,分为以下5步:

1. 环境准备

在开始使用 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>

2. 定义表结构


CREATE TABLE `user_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增id',
  `user_name` varchar(64DEFAULT 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='用户信息表';

3. 定义PO类

@FluentMybatis(table = "user_info"// 定义表名称
@Data
public class UserInfoEntity extends RichEntity {

    private Long id;

    private String userName;

    private Integer userAge;

    @Override
    public Class<? extends IEntity> entityClass() {
        return UserInfoEntity.class;
    }
}

4. 编译生成对应的mapper类

mvn clean compile

自动生成如下类:你还在用Mybatis?试试这款神器,纵享丝滑

5. 配置数据源

首先,我们需要配置 Mybatis 的相关信息,如数据源、SQL 会话工厂等。这里,我们使用 Spring Boot 进行配置:

@ComponentScan(basePackages = "com.test")
@MapperScan("com.test.mapper")
@Configuration
public 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?

下面我们使用 Fluent Mybatis 进行增删改查的基本操作演示:

4.1 插入(Insert)

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) 方法将新用户插入到数据库中。

4.2 查询(Select)

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 进行不同类型的查询操作。我们可以根据用户名模糊查询用户。

4.3 更新(Update)

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() 方法将更新后的用户信息保存到数据库中。

4.4 删除(Delete)

public class UserService {
    @Autowired
    private UserInfoMapper mapper;

    @Test
    public void delete() {
        mapper.delete(mapper.query()
                .where.id().eq(1L).end());
    }
}

在这个示例中,我们展示了如何使用 Fluent Mybatis 进行删除操作。我们可以根据 ID 删除用户。

4.5 join查询


    @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.classiQuery);
        System.out.println(userInfoEntities);
    }

在这个示例中,我们展示了如何使用 Fluent Mybatis 进行join查询操作。我们将表user_info自身进行join,以id作为连接条件。

总结

通过以上示例,我们可以看到 Fluent Mybatis 提供了一套简洁、易读的 API,使得我们能够更加高效地进行数据库操作。同时,它还支持链式编程,让代码更加简洁。如果你正在使用 Mybatis 进行数据库操作,那么不妨尝试一下 Fluent Mybatis,它或许会给你带来更好的开发体验。

更多用法可以参考:https://gitee.com/fluent-mybatis/fluent-mybatis/wikis/fluent%20mybatis%E7%89%B9%E6%80%A7%E6%80%BB%E8%A7%88

今日分享如果对你有帮助,帮忙点个在看

原文始发于微信公众号(小李哥编程):你还在用Mybatis?试试这款神器,纵享丝滑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/255163.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!