一、pom.xmljava
<!-- mybatis分頁插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>
二、駝峯命名
在application.properties中添加如下配置,在執行查詢後,能夠將數據庫的NN_NN格式字段,在java結果集對象中自動轉換成駝峯命名參數。git
mybatis.configuration.mapUnderscoreToCamelCase=true
三、可複用的@Results
a、聲明時給id賦值爲usergithub
@Results(id="user",value={ @Result(property="nnNn",column="NN_NN") })
b、在其餘方法中,重複使用id爲user的結果映射spring
@ResultMap("user")
c、結果映射@Results
若是結果集不是JAVA對象而是Map,Map中的列名會和數據庫中的NN_NN同樣,是不會自動駝峯轉換的。可使用@Result來指明結果映射,一樣也適用JAVA對象sql
@Results({ @Result(property="nnNn",column="NN_NN") }) @Select("select * from user") public List<Map> findAll();
四、打印SQL日誌到控制檯
在application.properties中添加如下配置數據庫
logging.level.你的包名.mybatis接口包=debug
eg、logging.level.com.lynch.mapper.PageMapper=debug #不能用*替代
第一行:==>左邊是執行SQL的接口及其方法,右邊是執行語句
第二行:傳參數1,String類型
第三行:查到一行數據apache
五、分頁mybatis
package com.lynch.mapper; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.lynch.entity.UserEntity; @Service @Transactional public class PageServiceImpl { @Autowired private PageMapper pageMapper; public Page<UserEntity> pageUser(int pageNum, int pageSize) { // 分頁插件: 查詢第1頁,每頁10行 Page<UserEntity> page = PageHelper.startPage(pageNum, pageSize); pageMapper.getAll(); // 數據表的總行數 page.getTotal(); // 分頁查詢結果的總行數 page.size(); // 第一個User對象,參考list,序號0是第一個元素,依此類推 page.get(0); return page; } }
分頁原理:PageHelper.startPage會攔截下一個sql,也就是pageMapper.getAll()的SQL。而且根據當前數據庫的語法,把這個SQL改形成一個高性能的分頁SQL,同時還會查詢該表的總行數,具體能夠看SQL日誌。
PageHelper.startPage和pageMapper.getAll()最好緊跟在一塊兒,中間不要有別的邏輯,不然可能出BUG。
Page<User> page:至關於一個list集合,findAll()方法查詢完成後,會給page對象的相關參數賦值。app
六、回傳ID
假設數據庫表的ID主鍵是自動增加的,如今添加一條數據,想要獲得這條數據自動增加的ID,方法以下:
a、dao層
useGeneratedKeys=true:獲取數據庫生成的主鍵
keyProperty="id":把主鍵值存入User param對象的id屬性性能
@Insert("insert into users(username,password,sex) values(#{username}, #{password}, #{sex})") @Options(useGeneratedKeys=true, keyProperty="id") int insert(UserEntity user);
b、service層
UserEntity userEntity = new UserEntity("laosis", "123456", SexEnum.WOMAN); int result = pageMapper.insert(userEntity); System.out.println("result=" + result); System.out.println("回傳ID值:" + userEntity.getId());
完整demo代碼
一、PageMapper
package com.lynch.mapper; import java.util.List; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Select; import com.lynch.entity.UserEntity; public interface PageMapper { @Select("select * from users order by id") List<UserEntity> getAll(); @Insert("insert into users(username,password,sex) values(#{username}, #{password}, #{sex})") @Options(useGeneratedKeys=true, keyProperty="id") int insert(UserEntity user); }
二、PageServiceImpl -- 分頁service
package com.lynch.mapper; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.lynch.entity.UserEntity; @Service @Transactional public class PageServiceImpl { @Autowired private PageMapper pageMapper; public Page<UserEntity> pageUser(int pageNum, int pageSize) { // 分頁插件: 查詢第1頁,每頁10行 Page<UserEntity> page = PageHelper.startPage(pageNum, pageSize); pageMapper.getAll(); // 數據表的總行數 page.getTotal(); // 分頁查詢結果的總行數 page.size(); // 第一個User對象,參考list,序號0是第一個元素,依此類推 page.get(0); return page; } }
三、PageMapperTest -- 單元測試
package com.lynch.mapper; import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.github.pagehelper.Page; import com.lynch.entity.UserEntity; import com.lynch.enums.SexEnum; @RunWith(SpringRunner.class) @SpringBootTest public class PageMapperTest { @Autowired private PageMapper pageMapper; @Autowired private PageServiceImpl pageService; @Test public void getAll() throws Exception { List<UserEntity> users = pageMapper.getAll(); for(UserEntity user : users) { System.out.println(user); } } @Test public void pageUser() throws Exception { int pageNum = 1; int pageSize = 10; Page<UserEntity> page = pageService.pageUser(pageNum, pageSize); System.out.println("page:" + page); for(UserEntity user : page.getResult()) { System.out.println(user); } } @Test public void insert() throws Exception { UserEntity userEntity = new UserEntity("laosis", "123456", SexEnum.WOMAN); int result = pageMapper.insert(userEntity); System.out.println("result=" + result); System.out.println("回傳ID值:" + userEntity.getId()); } }