mybatis的原生应用—查询与分页

MyBatis 以其高效灵活的特性成为了众多开发者的首选持久化框架。而其中,使用 xml 方式进行查询与分页操作更是一种常见且强大的技术手段。在今天的博客中,我们将深入探讨 MyBatis 如何通过 xml 实现查询与分页。
我们使用 MyBatis-Flex 作为 MyBatis 的增强框架进行代码开发,并不会影响原有的 MyBatis 的任何功能,所以我再上篇的环境配置基础上进行编辑

一、项目目录结构

在上篇基础上新增/resources/mapper/AccountMapper.xml
在这里插入图片描述

二、创建数据库

CREATE TABLE `tb_account`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `age` int(0) NULL DEFAULT NULL,
  `birthday` datetime(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of tb_account
-- ----------------------------
INSERT INTO `tb_account` VALUES (1, '张三', 18, '2020-01-11 00:00:00');
INSERT INTO `tb_account` VALUES (2, '李四', 19, '2021-03-21 00:00:00');
INSERT INTO `tb_account` VALUES (3, 'ssj', 20, '2024-09-06 19:28:54');
INSERT INTO `tb_account` VALUES (4, '测试', 22, '2024-09-12 19:29:13');

三、MyBatis 原生注解

使用 @Select 等 MyBatis 原生注解
MyBatis 提供了 @Insert 、@Delete 、@Update 、@Select 4 个注解,用于对 Mapper 的方法进行配置,用于原生编写原生 SQL 进行增删改查, 在 MyBatis-Flex 我们一样可以使用这些注解。
在这里插入图片描述
具体代码:

public interface AccountMapper extends BaseMapper<Account> {
    @Select("select * from tb_account where id = #{id}")
    Account selectById(@Param("id") int id);
}

@Insert 、@Delete 、@Update 等注解也是一样的,也就是说,原有的 MyBatis 功能如何使用,在 MyBatis-Flex 就如何使用。
@InsertProvider、@DeleteProvider、@UpdateProvider、@SelectProvider 等还是和原生 MyBatis 一样的用法。

四、使用 xml 的方式查询

在开始使用 xml 之前,我们需要添加如下配置,告知 mybatis 的 xml 存放路径。
在这里插入图片描述
具体代码:

mybatis-flex:
  mapper-locations:
    - classpath*:/mapper/*.xml

配置完成后,我们就可以编写自己的 xml 和 mapper 代码了
mapper
在这里插入图片描述
具体代码:

public interface AccountMapper extends BaseMapper<Account> {
    @Select("select * from tb_account where id = #{id}")
    Account selectById(@Param("id") int id);
    Account selectByName(@Param("user_name") String user_name);
}

xml
在这里插入图片描述
具体代码:

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.mybatisflex.demo.mapper.AccountMapper">
    <!-- selectByName -->
    <select id="selectByName" resultType="com.mybatisflex.demo.entity.Account">
        select * from `tb_account` ${qwSql} limit ${pageOffset}, ${pageSize};
    </select>
    <select id="selectByName_COUNT" resultType="long">
        select count(*) from `tb_account` ${qwSql}
    </select>
</mapper>

编写测试语句
在这里插入图片描述

具体代码:

@Test
    void test1(){
        Account a=accountMapper.selectById(4);
        System.out.println(a);
    }

五、使用 xml 的方式分页

xml
在这里插入图片描述
具体代码:

    <!--    分页查询-->
    <select id="selectAll" resultType="com.mybatisflex.demo.entity.Account">
        select * from `tb_account` ${qwSql} limit ${pageOffset}, ${pageSize}
    </select>

测试语句:
在这里插入图片描述
XML 参数解释:
${qwSql}: 传入的 QueryWrapper 生成的 where 部分的 SQL,带有 “where” 关键字
${pageOffset}: sql offset 的值
${pageSize}: 需要查询的数据量
${pageNumber}: 当前的页码
${dbType}: 当前用户配置的数据库类型,用户切换数据源也有可能造成数据库类型发生变化。我们可以通过不同的 dbType 来编写不同的 SQL,以适配不同的数据库类型。

具体代码:

class MybatisFlexDemoApplicationTests {
    @Autowired
    private AccountMapper accountMapper;
    @Test
    void contextLoads() {
        List<Account> accounts = accountMapper.selectAll();
        QueryWrapper qw = QueryWrapper.create()
                .where(Account::getId).ge(0);
        Page<Account> accountPage = accountMapper
                .xmlPaginate("selectByName", Page.of(1, 4), qw);
        System.out.println(accountPage);
    }
 }

六、mybatisX插件

可安装mybatisX插件,点击小鸟快速到达接口
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值