6墓赴、日志
6.1、日志工廠
如果一個(gè)數(shù)據(jù)庫操作航瞭,出現(xiàn)了異常诫硕,我們需要排錯(cuò)。日志就是最好的助手刊侯!
曾經(jīng):sout 章办、debug
現(xiàn)在:日志工廠!
- SLF4J
- LOG4J 【掌握】
- LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING
- STDOUT_LOGGING 【掌握】
- NO_LOGGING
在Mybatis中具體使用那個(gè)一日志實(shí)現(xiàn),在設(shè)置中設(shè)定藕届!
STDOUT_LOGGING標(biāo)準(zhǔn)日志輸出
在mybatis核心配置文件中挪蹭,配置我們的日志!
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
6.2休偶、Log4j
什么是Log4j梁厉?
- Log4j是Apache的一個(gè)開源項(xiàng)目,通過使用Log4j踏兜,我們可以控制日志信息輸送的目的地是控制臺词顾、文件、GUI組件
- 我們也可以控制每一條日志的輸出格式碱妆;
- 通過定義每一條日志信息的級別肉盹,我們能夠更加細(xì)致地控制日志的生成過程。
- 通過一個(gè)配置文件來靈活地進(jìn)行配置山橄,而不需要修改應(yīng)用的代碼垮媒。
-
先導(dǎo)入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這兩個(gè)目的地,console和file的定義在下面的代碼 log4j.rootLogger=DEBUG,console,file #控制臺輸出的相關(guān)設(shè)置 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 #文件輸出的相關(guān)設(shè)置 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為日志的實(shí)現(xiàn)
<settings> <setting name="logImpl" value=""/> </settings>
-
Log4j的使用航棱!,直接測試運(yùn)行剛才的查詢
[圖片上傳失敗...(image-a22c9c-1587294155346)]
簡單使用
在要使用Log4j 的類中萌衬,導(dǎo)入包 import org.apache.log4j.Logger;
-
日志對象饮醇,參數(shù)為當(dāng)前類的class
static Logger logger = Logger.getLogger(UserDaoTest.class);
-
日志級別
logger.info("info:進(jìn)入了testLog4j"); logger.debug("debug:進(jìn)入了testLog4j"); logger.error("error:進(jìn)入了testLog4j");
7、分頁
思考:為什么要分頁秕豫?
- 減少數(shù)據(jù)的處理量
7.1朴艰、使用Limit分頁
語法:SELECT * from user limit startIndex,pageSize;
SELECT * from user limit 3; #[0,n]
使用Mybatis實(shí)現(xiàn)分頁,核心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實(shí)現(xiàn)分頁
-
接口
//分頁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實(shí)現(xiàn) RowBounds rowBounds = new RowBounds(1, 2); //通過Java代碼層面實(shí)現(xiàn)分頁 List<User> userList = sqlSession.selectList("com.kuang.dao.UserMapper.getUserByRowBounds",null,rowBounds); for (User user : userList) { System.out.println(user); } sqlSession.close(); }
7.3祠墅、分頁插件
[圖片上傳失敗...(image-446bfe-1587294155346)]
了解即可,萬一 以后公司的架構(gòu)師歌径,說要使用毁嗦,你需要知道它是什么東西!