更新時間:2021-12-20 09:46:47 來源:動力節點 瀏覽865次
sql的分頁語句為(第一個參數是當前頁面的索引起始位置,第二個參數是顯示的頁數)
select * from user limit #{startIndex},#{pageSize};
# startIndex: 起始位置,默認為 0
# pageSize: 頁面大小
# 如何計算當前頁面索引的起始位置
# currentPage = (currentPage-1)* pageSize
編寫dao接口
//查詢所有用戶實現分頁
List < User > selectUserByLimit ( Map < String , Integer > map ) ;
編譯mapper映射文件的方法(可以通過map封裝參數,方便參數傳遞)
< select id = " selectUserByLimit " parameterType = " Map " resultType = " User " >
select * from mybatis.user limit #{startIndex},#{pageSize}
</選擇>
創建了用于獲取 sqlSession 對象的工具類,并使自動提交事務成為可能。
包裝融為一體。MLXH 。實用程序;
進口組織。阿帕奇。伊比斯。約。資源;
進口組織。阿帕奇。伊比斯。會話。SqlSession ;
進口組織。阿帕奇。伊比斯。會話。SqlSessionFactory ;
進口組織。阿帕奇。伊比斯。會話。SqlSessionFactoryBuilder ;
導入java 。約。IO異常;
導入java 。約。輸入流;
//mybatis工具類,重復代碼的凈化
public class MyBatisUtils {
//類變量不需要設置默認值;
私有 靜態SqlSessionFactory sqlSessionFactory ;
static {
//在maven中,所有的資源文件一般都放在resources目錄下,我們可以直接獲取。
嘗試 {
字符串資源= "mybatis-config.xml" ;
InputStream inputStream =資源。getResourceAsStream (資源);
sqlSessionFactory = new SqlSessionFactoryBuilder ( ) 。構建(的inputStream );
} catch ( IOException e ) {
e. 打印堆棧跟蹤();
}
}
//設置SqlSessionFactory的方法 public
public static SqlSessionFactory getSqlSessionFactory ( ) {
return sqlSessionFactory ;
}
//帶有事務自動提交功能的通用SqlSession方法
public static SqlSession getSqlSession ( ) {
//自動提交事務
return sqlSessionFactory . openSession (真) ;
}
}
測試(模擬分頁數據參數:當前Page,page Size)
@Test
public void selectUserByLimit ( ) {
//創建sqlSession
SqlSessionFactory sqlSessionFactory = MyBatisUtils . getSqlSessionFactory ( ) ;
SqlSession sqlSession = sqlSessionFactory 。openSession ( ) ;
//準備數據
int currentPage = 2 ; //當前頁面是什么?
int pageSize = 2 ; //頁面大小
Map < String , Integer > map = new HashMap < String , Integer > ( ) ;
地圖。put ( "startIndex" , ( currentPage - 1 ) * pageSize ) ;
地圖。put ( "pageSize" , pageSize ) ;
//測試
UserDao 映射器= sqlSession . getMapper ( userDAO的。類);
列表<用戶>用戶=映射器。selectUserByLimit (地圖) ;
for (用戶用戶:用戶) {
系統。出來。打印(用戶);
}
sqlSession 。關閉( ) ; //關閉連接
}
1.寫接口
//查詢所有用戶使用RowBounds
List < User > selectUserByRowBounds ( )實現分頁;
2.編寫Mapper映射文件
< select id = " selectUserByRowBounds " resultType = " User " >
從 mybatis.user 中選擇 *
</選擇>
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 ) ;
//注意getMapper不能和RowBounds
一起
使用//selectList: Receive a List //Select Map: Receive a Map
//selectOne: 當只接收一個對象
List < User > users = sqlSession . selectList ( "com.MLXH.dao.UserDao.selectUserByRowBounds" , null , rowBounds ) ;
for (用戶用戶:用戶) {
系統。出來。打印(用戶);
}
}
rowBounds 的本質是封裝limit。
limit在SQL層面實現分頁,使用getMapper獲取測試中的對象
RowBounds 在代碼層面實現分頁,創建 rowBounds 對象
增刪改查示例(詳細代碼和目錄布局)可以看到對于UserDao接口,我們需要創建一個userMapper.xml來實現該接口并在其中寫入sql語句。
接下來,我們使用注解來簡化它們的代碼操作。
包裝融為一體。MLXH 。道;
進口玉米。MLXH 。波喬。用戶;
進口組織。阿帕奇。伊比斯。注釋。* ;
導入java 。UTIL 。列表;
公共 接口 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 ) ;
}
用戶道
包裝融為一體。MLXH 。道;
進口玉米。MLXH 。波喬。用戶;
進口組織。阿帕奇。伊比斯。注釋。* ;
導入java 。UTIL 。列表;
公共 接口 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 是一個參數注解。輸入參數為1時,默認為Param,但輸入參數多于1時,在每個參數前加上@Param,標識為參數。
例如: int update(@Param("id") int id,@Param("name") String name,@Param("pwd") String pwd)
Mybatis 核心簡介
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE 配置
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
《http://mybatis.org/dtd/mybatis-3-config.dtd">
<配置>
<!--配置文件修改-->
< properties resource = " database.properties " />
<!--Mybatis 設置-->
< settings >
<!--默認日志實現-->
<!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
<!--Log4j實現-->
<設置 名稱= " logImpl " 值= " LOG4J " />
</設置>
<!--配置別名-->
< typeAliases >
<!--<typeAlias type="com.MLXH.pojo.User" alias="User"/>-->
<包 名= " com.MLXH.pojo " />
</ 類型別名>
<環境 默認= “開發” >
<環境 id = “開發” >
<事務管理器 類型= “ JDBC ” />
<數據源 類型= “ POOLED ” >
<屬性 名稱= “驅動程序” 值= “ ${driver} ” />
<屬性 名稱= " url " value = " ${url} " />
< property name = " username " value = " ${username} " />
< property name = " password " value = " ${password} " />
</ dataSource >
</環境>
</環境>
< mappers >
<!--class 對應一個接口類-->
<!--resource 一個接口類對應的映射文件-->
< mapper class = " com.MLXH.dao.UserDao " />
</ mappers >
</配置>
這里我們將sqlSession對象的創建封裝為一個工具方法,設置事務自動提交(sqlSession Factory.openSession(true))
工具類
包裝融為一體。MLXH 。實用程序;
進口組織。阿帕奇。伊比斯。約。資源;
進口組織。阿帕奇。伊比斯。會話。SqlSession ;
進口組織。阿帕奇。伊比斯。會話。SqlSessionFactory ;
進口組織。阿帕奇。伊比斯。會話。SqlSessionFactoryBuilder ;
導入java 。約。IO異常;
導入java 。約。輸入流;
//mybatis工具類,重復代碼的凈化
public class MyBatisUtils {
//類變量不需要設置默認值;
私有 靜態SqlSessionFactory sqlSessionFactory ;
static {
//在maven中,所有的資源文件一般都放在resources目錄下,我們可以直接獲取。
嘗試 {
字符串資源= "mybatis-config.xml" ;
InputStream inputStream =資源。getResourceAsStream (資源);
sqlSessionFactory = new SqlSessionFactoryBuilder ( ) 。構建(的inputStream );
} catch ( IOException e ) {
e . 打印堆棧跟蹤();
}
}
//設置SqlSessionFactory的方法 public
public static SqlSessionFactory getSqlSessionFactory ( ) {
return sqlSessionFactory ;
}
//帶有事務自動提交功能的通用SqlSession方法
public static SqlSession getSqlSession ( ) {
//自動提交事務
return sqlSessionFactory . openSession (真) ;
}
}
測試
包裝融為一體。MLXH 。道;
進口玉米。MLXH 。波喬。用戶;
進口玉米。MLXH 。實用程序。MyBatisUtils ;
進口組織。阿帕奇。伊比斯。會話。SqlSession ;
進口組織。JUnit的。測試;
進口太陽。rmi . 服務器。單播服務器引用;
導入java 。UTIL 。列表;
公共 類 UserDaoTest {
@Test
public void getUserList ( ) {
SqlSession sqlSession = MyBatisUtils . getSqlSession ( ) ; //帶自動提交事務
UserDao mapper = sqlSession . getMapper ( userDAO的。類);
列表<用戶> userList = mapper 。獲取用戶列表( ) ;
對于 (用戶用戶: userList ) {
系統。出來。打印(用戶);
}
SQLSESSION 。關閉( ) ; //關閉sqlSession;
}
@Test
public void getUserById ( ) {
SqlSession sqlSession = MyBatisUtils . getSqlSession ( ) ; //帶自動提交事務
UserDao mapper = sqlSession . getMapper ( userDAO的。類);
用戶 user = mapper 。getUserById ( 1 ) ;
系統。出來。打印(用戶);
sqlSession 。關閉( ) ; //關閉sqlSession;
}
@Test
public void addUser ( ) {
SqlSession sqlSession = MyBatisUtils . getSqlSession ( ) ; //帶自動提交事務
UserDao mapper = sqlSession . getMapper ( userDAO的。類);
用戶用戶= 新 用戶(5 , “冷雪” , “寒雪” );
int i =映射器。添加用戶(用戶);
系統。出來。打印(我);
sqlSession 。關閉( ) ; //關閉sqlSession;
}
@Test
public void updateUser ( ) {
SqlSession sqlSession = MyBatisUtils . getSqlSession ( ) ; //帶自動提交事務
UserDao mapper = sqlSession . getMapper ( userDAO的。類);
User user = new User ( 5 , "暮光之城" , "木靈寒雪" ) ;
int i =映射器。更新用戶(用戶);
系統。出來。打印(我);
sqlSession 。關閉( ) ; //關閉sqlSession;
}
@Test
public void deleteUser ( ) {
SqlSession sqlSession = MyBatisUtils . getSqlSession ( ) ; //帶自動提交事務
UserDao mapper = sqlSession . getMapper ( userDAO的。類);
int i =映射器。刪除用戶(5 );
系統。出來。打印(我);
sqlSession 。關閉( ) ; //關閉sqlSession;
}
}
總結:如你所見,注解開發其實就是封裝接口的mapper文件,在接口方法中加入sql語句。如果您對此比較感興趣,想了解更多相關知識,可以關注一下動力節點的MyBatis視頻教程,教程內容通俗易懂,適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習