我们使用 MyBatis-Flex 作为 MyBatis 的增强框架进行代码开发,并不会影响原有的 MyBatis 的任何功能。
一,使用 @Select 等 MyBatis 原生注解
MyBatis 提供了 @Insert 、@Delete 、@Update 、@Select 4 个注解,用于对 Mapper 的方法进行配置,用于原生编写原生 SQL 进行增删改查, 在 MyBatis-Flex 我们一样可以使用这些注解。
@Insert 、@Delete 、@Update 等注解也是一样的,也就是说,原有的 MyBatis 功能如何使用,在 MyBatis-Flex 就如何使用。
@InsertProvider、@DeleteProvider、@UpdateProvider、@SelectProvider 等还是和原生 MyBatis 一样的用法。
二,使用 xml 的方式
在开始使用 xml 之前,我们需要添加如下配置,告知 mybatis 的 xml 存放路径。
配置完成后,我们就可以编写自己的 xml 和 mapper 代码了,如下所示:
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.test.mapper.UserMapper">
<!--根据id查询-->
<select id="selectById" parameterType="java.lang.Integer" resultType="com.test.po.User">
select * from user where id= #{id}
</select>
<!--登录-->
<select id="login" parameterType="java.lang.String" resultType="com.test.po.User">
select * from user where username= #{username} and passwork = #{password}
</select>
<!-- 分页 -->
<select id="selectByName" resultType="com.test.po.User">
select * from `user` ${qwSql} limit ${pageNumber}, ${pageSize}
</select>
<select id="selectByName_COUNT" resultType="long">
select count(*) from `user` ${qwSql}
</select>
Mapper:
public interface UserMapper extends BaseMapper<User> {
//根剧用户编号查询用户
User selectById(@Param("id") Integer id);
//登录
User login(@Param("username") String username, @Param("password") String password);
//分页
Page<User> selectByName(Integer pageNumber, Integer pageSize);
Long selectByName_COUNT(QueryWrapper qwSql)
三,XML 分页
XML 分页是 MyBatis-Flex 在 v1.5.5 开始提供的一个 XML 分页解决方案,方便用户在使用 XML 时,对数据进行分页查询。
示例代码如下:
QueryWrapper qw = QueryWrapper.create()
.where(User::getAge).eq(18)
.and(User::getId).ge(1);
Page<User> userPage = userMapper
.xmlPaginate("selectByName", Page.of(1, 2), qw);
System.out.println(userPage);
XML 代码如下:
<!-- 分页 -->
<select id="selectByName" resultType="com.test.po.User">
select * from `user` ${qwSql} limit ${pageNumber}, ${pageSize}
</select>
<select id="selectByName_COUNT" resultType="long">
select count(*) from `user` ${qwSql}
</select>
其执行的 SQL 如下:
sql
-- 查询数据量select count(*) from `user` WHERE `age` = 18 AND `id` >=1-- 查询数据select * from `tb_account` WHERE `age` = 18 AND `id` >= 0 limit 0, 2
查询:
/*根据id查询*/
@Test
void select(){
User user = userMapper.selectById(1);
System.out.println(user);
}
结果:
登入
/*登入返回用户信息*/
@Test
void login(){
User user = userMapper.login("zhangsan", "123456");
System.out.println(user);
}
结果:
分页查询
/*分页*/
@Test
void test(){
QueryWrapper qw = QueryWrapper.create()
.where(User::getAge).eq(18)
.and(User::getId).ge(1);
Page<User> userPage = userMapper
.xmlPaginate("selectByName", Page.of(0, 2), qw);
System.out.println(userPage);
}
结果: