Mybatis的分頁和註解
阿新 • • 發佈:2022-04-21
Mybatis分頁
分頁:減少資料的處理量
1.使用limit分頁(sql層面)
select * from user limit startPage,pageSize; #設定分頁的規格
select * from user limit n; #[0,n]調記錄
1.介面
2.Mapper.xml
<select id="getUserByLimit" parameterType="map" resultType="User">
select * from user limit #{startPage},#{pageSize}
</select>
3.測試
@Test public void getUserByLimit(){ HashMap<String, Integer> map = new HashMap<>(); map.put("startPage",0); map.put("pageSize",2); SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> user = mapper.getUserByLimit(map); sqlSession.commit(); for (User user1 : user) { System.out.println(user1.getId() + " "+ user1.getName()); } sqlSession.close(); }
2.使用RowBounds分頁(java層面)
1.介面
2.Mapper.xml
<select id="getUserByRowBounds" resultType="User">
select *from user;
</select>
3.測試
@Test void getUserByRowBounds(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); RowBounds rowBounds = new RowBounds(1, 2); List<User> userList = sqlSession.selectList("com.Gw.dao.UserMapper.getUserByRowBounds",null,rowBounds); for (User user : userList) { System.out.println(user.getId()+" "+user.getName() + " " +user.getPassword()); } sqlSession.close(); }
使用註解開發
1.面向介面程式設計
各個物件內部是如何實現自己的,對系統設計人員來講就不那麼重要了;而各個物件之間的協作關係則成為系統設計的關鍵。
1.關於介面的理解。
介面從更深層次的理解,應是定義(規範,約束)與實現(名實分離的原則)的分離。
介面的本身反映了系統設計人員對系統的抽象理解。
2.任何介面都是在一定的環境中產生的。因此環境的定義及環境的變化對介面的影響是不容忽視的,脫離原先的環境,所有的介面將失去原有的意義。
底層本質應用反射,底層使用動態代理,將xml中的方法實現註解中,因此只適用於簡單的sql語句
1.註解在介面上實現
public interface UserMapper {
@Select("select * from user")
List<User> showTable();
}
2.在配置檔案中註冊該介面
<mappers>
<mapper class="com.Gw.dao.UserMapper"/>
</mappers>
3.測試程式碼
@Test
void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.showTable();
for (User user : userList) {
System.out.println(user.getId()+" "+user.getName()+" " +user.getPassword());
}
sqlSession.close();
}
2.CRUD
可以在工具類建立時實現自動提交事務,將SqlSession設定為true
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession(true);
}
編寫介面及其對應的註解(注意介面必須在配置中註冊)
@Select("select * from user where id = #{id}")
List<User> showTable(@Param("id") int id);
@Insert("insert into user(id,name,pwd) values (#{id},#{name},#{pwd})")
int addUser(@Param("id") int id, @Param("name") String name, @Param("pwd") String pwd);
@Update("update user set name=#{newName} where id=5")
int updateName(@Param("newName") String newName);
@Delete("delete from user where id = #{id}")
int deleteUserById(int id);
測試使用
@Test
void test(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(5,"tets","123456");
mapper.updateName("張三");
mapper.deleteUserById(5);
sqlSession.close();
}
3.@Param()註解
- 基本型別的引數或者String型別需加上
- 引用型別不需要加
- 如果只有一個基本型別可以省略
- 在sql用引用的就是@Param()中的值