1. 程式人生 > 其它 >Mybatis的分頁和註解

Mybatis的分頁和註解

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()中的值