Mybatis筆記03---ResultMap及分頁
5、解決屬性名和欄位名不一致的問題
1、 問題
資料庫中的欄位
新建一個專案,拷貝之前的,測試實體類欄位不一致的情況
public class User {
private int id;
private String name;
private String password;
}
測試出現問題
// select * from mybatis.user where id = #{id}
//型別處理器
// select id,name,pwd from mybatis.user where id = #{id}
解決方法:
-
起別名
<select id="getUserById" resultType="com.kuang.pojo.User"> select id,name,pwd as password from mybatis.user where id = #{id} </select>
2、resultMap
結果集對映
id name pwd
id name password
<!--結果集對映-->
<resultMap id="UserMap" type="User">
<!--column資料庫中的欄位,property實體類中的屬性-->
<result column="id" property="id"/>
<result column="name" property="name"/>
<result column="pwd" property="password"/>
</resultMap>
<select id="getUserById" resultMap="UserMap">
select * from mybatis.user where id = #{id}
</select>
resultMap
元素是 MyBatis 中最重要最強大的元素- ResultMap 的設計思想是,對於簡單的語句根本不需要配置顯式的結果對映,而對於複雜一點的語句只需要描述它們的關係就行了。
ResultMap
最優秀的地方在於,雖然你已經對它相當瞭解了,但是根本就不需要顯式地用到他們。- 如果世界總是這麼簡單就好了。
6、日誌
6.1、日誌工廠
如果一個資料庫操作,出現了異常,我們需要排錯。日誌就是最好的助手!
曾經:sout 、debug
現在:日誌工廠!
-
SLF4J
-
LOG4J 【掌握】
-
LOG4J2
-
JDK_LOGGING
-
COMMONS_LOGGING
-
STDOUT_LOGGING 【掌握】
-
NO_LOGGING
在Mybatis中具體使用那個一日誌實現,在設定中設定!
STDOUT_LOGGING標準日誌輸出
在mybatis核心配置檔案中,配置我們的日誌!
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
6.2、Log4j
什麼是Log4j?
- Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件
- 我們也可以控制每一條日誌的輸出格式;
- 通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。
- 通過一個配置檔案來靈活地進行配置,而不需要修改應用的程式碼。
-
先匯入log4j的包
<!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
log4j.properties
#將等級為DEBUG的日誌資訊輸出到console和file這兩個目的地,console和file的定義在下面的程式碼 log4j.rootLogger=DEBUG,console,file #控制檯輸出的相關設定 log4j.appender.console = org.apache.log4j.ConsoleAppender log4j.appender.console.Target = System.out log4j.appender.console.Threshold=DEBUG log4j.appender.console.layout = org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=[%c]-%m%n #檔案輸出的相關設定 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.MaxFileSize=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n #日誌輸出級別 log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
-
配置log4j為日誌的實現
<settings> <setting name="logImpl" value=""/> </settings>
-
Log4j的使用!,直接測試執行剛才的查詢
簡單使用
-
在要使用Log4j 的類中,匯入包 import org.apache.log4j.Logger;
-
日誌物件,引數為當前類的class
static Logger logger = Logger.getLogger(UserDaoTest.class);
-
日誌級別
logger.info("info:進入了testLog4j"); logger.debug("debug:進入了testLog4j"); logger.error("error:進入了testLog4j");
7、分頁
思考:為什麼要分頁?
- 減少資料的處理量
7.1、使用Limit分頁
語法:SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 3; #[0,n]
使用Mybatis實現分頁,核心SQL
-
介面
//分頁 List<User> getUserByLimit(Map<String,Integer> map);
-
Mapper.xml
<!--//分頁--> <select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from mybatis.user limit #{startIndex},#{pageSize} </select>
-
測試
@Test public void getUserByLimit(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("startIndex",1); map.put("pageSize",2); List<User> userList = mapper.getUserByLimit(map); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
7.2、RowBounds分頁
不再使用SQL實現分頁
-
介面
//分頁2 List<User> getUserByRowBounds();
-
mapper.xml
<!--分頁2--> <select id="getUserByRowBounds" resultMap="UserMap"> select * from mybatis.user </select>
-
測試
@Test public void getUserByRowBounds(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); //RowBounds實現 RowBounds rowBounds = new RowBounds(1, 2); //通過Java程式碼層面實現分頁 List<User> userList = sqlSession.selectList("com.kuang.dao.UserMapper.getUserByRowBounds",null,rowBounds); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
7.3、分頁外掛
瞭解即可,萬一 以後公司的架構師,說要使用,你需要知道它是什麼東西!
官方文件:https://pagehelper.github.io/
在MyBatisPlus中,也有分頁實現,所以實現方式很多,看自己的理解和熟練程度進行掌握即可!
相關文章
- 【MyBatis框架】MyBatis實現物理分頁和邏輯(記憶體)分頁MyBatis框架記憶體
- MyBatis 3 分頁MyBatis
- Mybatis分頁之RowBoundsMyBatis
- myBatis分頁外掛配置MyBatis
- Mybatis分頁實現流程MyBatis
- MyBatis筆記(一)MyBatis筆記
- MyBatis筆記(三)MyBatis筆記
- MyBatis筆記(六)MyBatis筆記
- MyBatis筆記(七)MyBatis筆記
- Django學習筆記(12)——分頁功能Django筆記
- (MySQL學習筆記)分頁查詢MySql筆記
- mybatis動態sql與分頁MyBatisSQL
- 深入淺出Mybatis-分頁MyBatis
- Mybatis-分頁攔截器MyBatis
- mybatis plus 新增分頁外掛MyBatis
- MyBatis實現分頁的方式MyBatis
- ES 筆記三十六:分頁與遍歷筆記
- Mybatis筆記總結MyBatis筆記
- MyBatis複習筆記MyBatis筆記
- Mybatis學習-日誌與分頁MyBatis
- Mybatis分頁和Spring的整合MyBatisSpring
- 使用mybatis分頁外掛展示首頁最新視訊MyBatis
- Mybatis 分頁:Pagehelper + 攔截器實現MyBatis
- mybatis generator外掛系列--分頁外掛MyBatis
- 【mybatis-plus】分頁、邏輯刪除MyBatis
- mybatis的三發外掛:分頁pagehelpMyBatis
- 「分數規劃」學習筆記及做題記錄筆記
- SpringBoot 整合Mybatis + PageHelper 實現分頁Spring BootMyBatis
- 【深入淺出MyBatis系列七】分頁外掛MyBatis
- 面試題——Mybatis是如何進行分頁的面試題MyBatis
- Mybatis學習筆記 2:Mybatis 基本的CURD操作MyBatis筆記
- Mybatis學習筆記 1:一個Mybatis使用例子MyBatis筆記
- MyBatis-Plus筆記(入門)MyBatis筆記
- 筆記:MyBatis逆向工程 - Win/Mac筆記MyBatisMac
- Spring筆記(四)整合MybatisSpring筆記MyBatis
- Mybatis分頁外掛只顯示第一頁的問題MyBatis
- Jive筆記4--結果集分頁處理 (轉)筆記
- 《應用迴歸及分類》學習筆記1筆記