Mybatis分页的实现及使用注解开发操作

分页的实现

sql的分页语句为(第一个参数为当前页面的索引起始位置,第二个参数为页面的展示个数)

select * from user limit #{startIndex},#{pageSize};
# startIndex : 起始位置 ,默认是0开始
# pageSize :页面大小
# 如何计算出当前页面索引起始位置
# currentPage = (currentPage-1)* pageSize  

limit实现分页

1、编写dao接口

//查询全部用户实现分页
List<User> selectUserByLimit(Map<String,Integer> map);

2、编写对应mapper映射文件的方法(参数我们可以使用map封装,方便参数传递)

<select id="selectUserByLimit" parameterType="Map" resultType="User">
    select * from mybatis.user limit #{startIndex},#{pageSize}
</select>

3、创建了获取sqlSession对象的工具类,并使之可以进行自动提交事务

package com.MLXH.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//mybatis的工具类,重复的代码的提纯
public class MyBatisUtils {
    //类变量不需要设置默认值;
    private static SqlSessionFactory sqlSessionFactory;
    static {
        //在maven中,所有的资源文件一般都放在resources目录下,我们可以直接拿到。
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //设置SqlSessionFactory公共的方法
    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
    //获得一个带事务自动提交功能的SqlSession公共的方法
    public static SqlSession getSqlSession(){
        //自动提交事务
        return sqlSessionFactory.openSession(true);
    }
}

RowBounds实现分页

1、写接口

//查询全部用户实现分页使用RowBounds
List<User> selectUserByRowBounds();

2、写Mapper映射文件

<select id="selectUserByRowBounds" resultType="User">
    select * from mybatis.user
</select>

3、工具类同上(只是为了获取sqlSession对象简单而已)

4、编写测试代码

@Test
public void selectUserByRowBounds(){
    //创建sqlSession
    SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
    SqlSession sqlSession = sqlSessionFactory.openSession();
    int currentPage = 2; //当前页
    int pageSize = 2; //页面大小
    RowBounds rowBounds = new RowBounds((currentPage - 1) * pageSize, pageSize);
    //注意点;使用RowBounds就不能使用getMapper了
    //selectList: 接收一个List
    //selectMap: 接收一个Map
    //selectOne : 接收只有一个对象的时候
    List<User> users = sqlSession.selectList("com.MLXH.dao.UserDao.selectUserByRowBounds", null, rowBounds);
    for (User user : users) {
        System.out.println(user);
    }
}

两者的区别

  • rowBounds 本质就是封装了limit
  • limit 是在SQL层面实现分页,在测试中使用getMapper获得对象
  • rowBounds 在代码层面实现分页,创建rowBounds对象

注解开发

根据之前写的这篇博客,链接: 使用Mybatis实现数据库的增删改查实例.(内有详细的代码和目录布局)

可以发现,对UserDao接口,我们需要创建一个userMapper.xml来实现这个接口,并在其内部写入sql语句

接下来我们使用注解来简化其代码操作

package com.MLXH.dao;
import com.MLXH.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserDao {
    //查询全部用户
    @Select("select * from user")
    List<User> getUserList();
    //通过ID查询用户
    @Select("select * from user where id = #{id}")
    User getUserById(@Param("id") int id);
    //添加用户
    @Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
    int addUser(User user);
    //修改用户信息
    @Update("update user set name = #{name}, pwd = #{pwd} where id = #{id}")
    int updateUser(User user);
    //删除用户
    @Delete("delete from user where id =#{uid}")
    int deleteUser(@Param("uid") int id);
}

UserDao

package com.MLXH.dao;
import com.MLXH.pojo.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
public interface UserDao {
    //查询全部用户
    @Select("select * from user")
    List<User> getUserList();
    //通过ID查询用户
    @Select("select * from user where id = #{id}")
    User getUserById(@Param("id") int id);
    //添加用户
    @Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
    int addUser(User user);
    //修改用户信息
    @Update("update user set name = #{name}, pwd = #{pwd} where id = #{id}")
    int updateUser(User user);
    //删除用户
    @Delete("delete from user where id =#{uid}")
    int deleteUser(@Param("uid") int id);
}

@Param为参数注解,当所传入的参数为一个时,默认为Param,但当传入的参数为多个时,每一个参数前都要加入@Param来标识其是一个参数

例如:

int update(@Param("id") int id,@Param("name") String name,@Param("pwd") String pwd)

Mybatis核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置文件修改-->
    <properties resource="database.properties"/>
    <!--Mybatis设置-->
    <settings>
        <!--默认日志实现-->
        <!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
        <!--Log4j实现-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--配置别名-->
    <typeAliases>
        <!--<typeAlias type="com.MLXH.pojo.User" alias="User"/>-->
        <package name="com.MLXH.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--class对应的是一个接口类-->
        <!--resource对应的是一个接口类的映射文件-->
        <mapper class="com.MLXH.dao.UserDao"/>
    </mappers>
</configuration>

这里我们将创建sqlSession对象封装为一个工具方法,并设置了事务的自动提交(sqlSessionFactory.openSession(true))

工具类

package com.MLXH.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
//mybatis的工具类,重复的代码的提纯
public class MyBatisUtils {
    //类变量不需要设置默认值;
    private static SqlSessionFactory sqlSessionFactory;
    static {
        //在maven中,所有的资源文件一般都放在resources目录下,我们可以直接拿到。
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //设置SqlSessionFactory公共的方法
    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
    //获得一个带事务自动提交功能的SqlSession公共的方法
    public static SqlSession getSqlSession(){
        //自动提交事务
        return sqlSessionFactory.openSession(true);
    }
}

测试

package com.MLXH.dao;
import com.MLXH.pojo.User;
import com.MLXH.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import sun.rmi.server.UnicastServerRef;
import java.util.List;
public class UserDaoTest {
    @Test
    public void getUserList(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> userList = mapper.getUserList();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();//关闭sqlSession;
    }
    @Test
    public void getUserById(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();//关闭sqlSession;
    }

    @Test
    public void addUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        User user = new User(5, "寒雪", "hanxue");
        int i = mapper.addUser(user);
        System.out.println(i);
        sqlSession.close();//关闭sqlSession;
    }
    @Test
    public void updateUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        User user = new User(5, "暮凌寒雪", "mulinghanxue");
        int i = mapper.updateUser(user);
        System.out.println(i);
        sqlSession.close();//关闭sqlSession;
    }
    @Test
    public void deleteUser(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();//带自动提交事务
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        int i = mapper.deleteUser(5);
        System.out.println(i);
        sqlSession.close();//关闭sqlSession;
    }
}

总结:

可以看到,注解开发其实就是将接口的mapper实现文件封装,并在接口方法上添加了sql语句…

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis-plus分页查询的实现示例

    按照官方文档进行的配置:快速开始|mybatis-plus 引入依赖: <!-- 引入mybatisPlus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!--

  • Mybatis实现增删改查及分页查询的方法

    MyBatis的前身就是iBatis.是一个数据持久层(ORM)框架. MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持 久层框架.MyBatis消除了几乎所有的JDBC 代码和参数的手工 设置以及结果集的检索.MyBatis使用简单的XML或注解用于 配置和原始映射,将接口和Java 的POJOs(Plan Old Java Objects,普通的Java 对象)映射成数据库中的记录.每个 MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个 SqlS

  • mybatis分页效果实现代码

    本文为大家分享了mybatis分页效果展示的具体代码,供大家参考,具体内容如下 mybatis版本3.4以下 结构: spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org

  • SpringBoot 使用Mybatis分页插件实现详解

    这篇文章主要介绍了SpringBoot 使用Mybatis分页插件实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.导入分页插件包和jpa包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </depende

  • Mybatis分页的实现及使用注解开发操作

    分页的实现 sql的分页语句为(第一个参数为当前页面的索引起始位置,第二个参数为页面的展示个数) select * from user limit #{startIndex},#{pageSize}: # startIndex : 起始位置 ,默认是0开始 # pageSize :页面大小 # 如何计算出当前页面索引起始位置 # currentPage = (currentPage-1)* pageSize limit实现分页 1.编写dao接口 //查询全部用户实现分页 List<User>

  • MyBatis使用注解开发实现过程详解

    使用注解开发 1.面向接口编程 面向接口编程的根本原因:解耦,可扩展,提高复用,分层开发中.上层不用管具体的实现,大家都遵守共同的标准,使得开发变得容易,规范性好 2.使用注解开发 注解在接口上实现 @Select(value = "select * from user") List<User> getUsers(); 需要在核心配置文件中绑定接口 <!--绑定接口--> <mappers> <mapper class="rui.da

  • MyBatis使用注解开发实现步骤解析

    mybatis可以使用xml文件编写映射语句,也可以通过注解来编写简单的映射语句,在官方文档中有具体描述.简单的说,因为Java 注解的的表达力和灵活性十分有限,简单的一些语法可以使用注解来编写比较方便,但复杂的语句还是要使用xml文件. 在之前的开发中,我们使用mybatis,需要以下几个步骤: 配置核心文件 创建dao接口,定义方法(如MyBatis工具类) 编写Mapper.xml配置文件,在该Ml文件中编写sql语句 最后把Mapper文件配置在mybatis核心文件中就可以进行测试了

  • SpringBoot整合Mybatis注解开发的实现代码

    官方文档: https://mybatis.org/mybatis-3/zh/getting-started.html SpringBoot整合Mybatis 引入maven依赖 (IDEA建项目的时候直接选就可以了) <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <ve

  • MyBatis使用注解开发和无主配置文件开发的情况

    MyBatis使用注解开发时就不在需要和接口对应的映射文件了 主要有以下几个注解 @Select() @Insert @Update() @Delete() 代码演示 项目结构: 数据库表设计 实体类 User public class User implements Serializable { private long userId; private String userName; private Date birthday; private String sex; private Str

  • Java Mybatis框架多表操作与注解开发详解分析

    目录 一对一查询 多对多查询 Mybatis的注解开发 Mybatis的增删查改 MyBatis的注解实现复杂映射开发 一对一查询 一对一查询的模型 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户. 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 一对一查询的语句 对应的sql语句: select * from orders o,user u where o.uid=u.id;查询的结果如下: 创建Order和User实体 创建OrderMapper接口 p

  • MyBatis图文并茂讲解注解开发一对一查询

    目录 MyBatis的注解实现复杂映射开发 一对一查询 一对一查询的模型 一对一查询的语句 创建PersonMapper接口 使用注解配置Mapper 测试类 一对一配置总结 MyBatis的注解实现复杂映射开发 实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置 一对一查询 一对一查询的模型 一对一查询的需求:查询一个用户信息,与此同时查询出该用户对应的身份证信息 一对

  • MyBatis图文并茂讲解注解开发一对多查询

    目录 MyBatis的注解实现复杂映射开发 一对多查询 一对多查询的模型 一对多查询的语句 创建StudentMapper接口 使用注解配置Mapper 测试类 一对多配置总结 MyBatis的注解实现复杂映射开发 实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置 一对多查询 一对多查询的模型 一对多查询的需求:查询一个课程,与此同时查询出该该课程对应的学生信息 一对多

  • MyBatis图文并茂讲解注解开发多对多查询

    目录 MyBatis的注解实现复杂映射开发 多对多查询 多对多查询的模型 多对多查询的语句 添加CourseMapper 接口方法 使用注解配置Mapper 测试类 多对多配置总结 MyBatis的注解实现复杂映射开发 实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置 多对多查询 多对多查询的模型 多对多查询的需求:查询学生以及所对应的课程信息 多对多查询的语句 对应的

  • Mybatis示例讲解注解开发中的单表操作

    目录 Mybatis注解开发单表操作 MyBatis的常用注解 MyBatis的增删改查 注解开发总结 常用注解 配置映射关系 练习项目代码 Mybatis注解开发单表操作 MyBatis的常用注解 Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了.我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作. 注解 说明 @Insert 实现新增 @Update 实现更新 @Delete 实现删除 @Select 实现查询 @Result 实现结果集封装 @Re

随机推荐