当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-03-26 17:40:05 298观看
导读在 Java 项目中,我们经常需要与数据库进行交互,而 Mybatis 是一个流行的持久层框架,它可以将 Java 对象映射到 SQL 语句,从而简化数据库操作。不过在使用 Mybatis 做开发时,最头痛的事情就是处理复杂业务查询,如果将业务转

在 Java 项目中,我们经常需要与数据库进行交互,而 Mybatis 是一个流行的持久层框架,它可以将 Java 对象映射到 SQL 语句,从而简化数据库操作。3PR28资讯网——每日最新资讯28at.com

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

如果放到dao层,就要手动在xml中写复杂的sql,用插件自动生成mapper时,会覆盖xml中的修改,非常让人头疼3PR28资讯网——每日最新资讯28at.com

Fluent Mybatis是什么

Fluent Mybatis 是一个基于 Mybatis 的扩展库,它提供了更加简洁、易读的 API,使得我们能够更加高效地进行数据库操作。3PR28资讯网——每日最新资讯28at.com

本文将介绍如何使用 Fluent Mybatis 进行基本的增删改查操作。3PR28资讯网——每日最新资讯28at.com

使用 Fluent Mybatis 很简单,分为以下5步:3PR28资讯网——每日最新资讯28at.com

1. 环境准备

在开始使用 Fluent Mybatis 之前,我们需要确保已经安装了 Java 开发环境、Maven 以及 MySQL 数据库。接下来,我们需要在项目的 pom.xml 文件中添加 Fluent Mybatis 的依赖:3PR28资讯网——每日最新资讯28at.com

<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(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='用户信息表';

3. 定义PO类

@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;    }}

4. 编译生成对应的mapper类

mvn clean compile

自动生成如下类:3PR28资讯网——每日最新资讯28at.com

图片图片3PR28资讯网——每日最新资讯28at.com

5. 配置数据源

首先,我们需要配置 Mybatis 的相关信息,如数据源、SQL 会话工厂等。这里,我们使用 Spring Boot 进行配置:3PR28资讯网——每日最新资讯28at.com

@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?

下面我们使用 Fluent Mybatis 进行增删改查的基本操作演示:3PR28资讯网——每日最新资讯28at.com

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) 方法将新用户插入到数据库中。3PR28资讯网——每日最新资讯28at.com

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 进行不同类型的查询操作。我们可以根据用户名模糊查询用户。3PR28资讯网——每日最新资讯28at.com

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() 方法将更新后的用户信息保存到数据库中。3PR28资讯网——每日最新资讯28at.com

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 删除用户。3PR28资讯网——每日最新资讯28at.com

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.class, iQuery);        System.out.println(userInfoEntities);    }

在这个示例中,我们展示了如何使用 Fluent Mybatis 进行join查询操作。我们将表user_info自身进行join,以id作为连接条件。3PR28资讯网——每日最新资讯28at.com

总结

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

本文链接:http://www.28at.com/showinfo-26-79451-0.html你还在用Mybatis?试试这款神器,纵享丝滑

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 一个提出五年的 Node.js 模块问题,终被解决!

下一篇: 20k级别前端是怎么使用LocalStorage的,想知道吗?

标签:
  • 热门焦点
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 英特尔Xe-HP项目终止,将专注Xe-HPC/HPG系列显卡

    据10 月 31 日消息报道,英特尔高级副总裁兼加速计算系统和图形事业部总经理 表示,Xe-HP“ Arctic Sound” 系列服务器 GPU 已经应用于 oneAPI devcloud 云服
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top