中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mybatis分頁的實現和注解開發的操作方式

發布時間:2021-06-21 11:14:39 來源:億速云 閱讀:197 作者:chen 欄目:開發技術

本篇內容介紹了“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語句

Mybatis分頁的實現和注解開發的操作方式

接下來我們使用注解來簡化其代碼操作

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分頁的實現和注解開發的操作方式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舒兰市| 嘉荫县| 前郭尔| 晴隆县| 台南县| 凌源市| 历史| 邵东县| 临邑县| 东丽区| 周至县| 建始县| 呼和浩特市| 延川县| 政和县| 佛坪县| 扎兰屯市| 松桃| 河津市| 莱州市| 民勤县| 清水县| 元江| 灵寿县| 满洲里市| 同江市| 桐乡市| 浏阳市| 凤台县| 印江| 泾川县| 且末县| 彭州市| 株洲市| 高邮市| SHOW| 临桂县| 苏州市| 鹿泉市| 阳东县| 兰西县|