Mybatis分页的实现及使用注解开发操作
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); } }
两者的区别
注解开发
根据之前写的这篇博客,链接: 使用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语句…
以上为个人经验,希望能给大家一个参考,也希望大家多多支持趣讯吧。
推荐阅读
-
洗衣机不脱水了是怎么回事(洗衣机不甩干的处理方法)
洗衣机作为大家日常生活必备的家用电器,其利用率频繁,难免会因为机械磨损、缺乏润滑油、机件老化、弹簧疲劳变形等原因,出现各种不正...
-
电子表格零基础自学教程(小白也能学明白)
可能很多人(包括我)觉得Excel不就是做个表吗,没什么好学的。然而很多大型企业在面试的时候还是会问,“会Excel吗?”“会...
-
笔记本电脑报价大全(联想笔记本多少钱)
(注意:建议在旗舰店、官方旗舰店、官网购买) 一、游戏本设计本、办公本推荐如下: 华为品牌:(全球第一大电信设备商) 1...
-
煲机软件哪个好(让耳机有个思想准备)
《无间道》中陈永仁与刘建明有过一句经典对白&mdash;&mdash;“高音甜、中音准、低音沉,总之一个词通透”。这一句话也一...
-
viewsonic平板电脑(viewsonic平板电脑刷机)
ViewSonic是一个视讯品牌,中文名字:优派。 ViewSonic 一、读音:英[vju:][?s?n?k],美[vj...
-
采访麦克风户外哪款好(讯飞智能无线麦克风C1采访神器)
对于视频创作者、直播工作者、远程培训老师、记者等媒体工作者来说,工作过程中,最让人费心的莫过于如何确保收音纯正、字幕快速生成、...
-
电脑硬件配置怎么查(详述两招快速查看电脑配置参数信息)
大家好,今天跟大家分享两个快速查看电脑配置参数信息的办法。 操作步骤如下: 1右击电脑屏幕最下方任务栏左侧的电脑徽标按钮,...
-
数据线没坏但充不上电怎么办(数据线充不上电处理方法)
苹果充电器突然充不上电是比较尴尬的问题,首先看自己的充电器数据线是不是原装,如果非原装在第一次充电时,苹果手机会提示你是否要适...
-
电脑开机出现黑屏如何处理(电脑不能开机黑屏解决方法)
电脑不能开机或者开机以后黑屏怎么解决?这里收集了所有常见的维修方法,看完秒变维修高手,实在是一篇不能错过的电脑维修教程。简单易...
-
手机宝典怎么搞(小米手机性能优化宝典)
别再总是抱怨手机卡顿,系统臃肿,反应慢,现在看完这篇文章,你会发现你并不了解小米手机,当然,文中许多方法并不是仅仅适用于小米手...