您好,登錄后才能下訂單哦!
本篇內容介紹了“Mybatis分頁的實現和注解開發的操作方式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
sql的分頁語句為(第一個參數為當前頁面的索引起始位置,第二個參數為頁面的展示個數)
select * from user limit #{startIndex},#{pageSize}; # startIndex : 起始位置 ,默認是0開始 # pageSize :頁面大小 # 如何計算出當前頁面索引起始位置 # currentPage = (currentPage-1)* pageSize
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); } }
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語句…
“Mybatis分頁的實現和注解開發的操作方式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。