MyBatis④日志和分页
MyBatis④日志和分页
7、日志
在以往的开发中,我们通常使用Debug模式和控制台输出(sout)来调试程序。
现在我们通过日志,来对数据库操作进行调试。

要使用日志功能,需要在MyBatis配置文件的settings中,设置日志工厂的实现类。
- STDOUT_LOGGING:标准日志,无需配置。
- NO_LOGGING:最小化日志产生的数量(并非不记录日志),无需配置。
- 其他实现类:需要写配置文件。
<!--
name:logImpl严格区分大小写;
value:不区分大小写,注意不要有空格
-->
<settings>
<setting name="logImpl" value="具体实现类"/>
</settings>
7.1、STDOUT_LOGGING
1、设置
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
2、日志打印
准备工作

数据库操作

7.2、LOG4J
1、简介
Log4j是Apache的一个开源项目。通过一个配置文件来灵活地进行配置,不需要修改应用的代码。
-
可以控制日志信息输送的位置:控制台、文件、GUI组件等;
-
可以控制每一条日志的输出格式;
-
通过定义每一条日志信息的级别,更加细致地控制日志的生成过程。
2、导包及配置
Maven依赖【Apache 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这两个位置
#官方建议实用的4个级别:ERROR、WARN、INFO、DEBUG
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=[%p][%c]-%m%n
#文件输出的相关设置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/userLog.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根配置
- 语法:log4j.rootLogger = [ level ] , appenderName, …
- 将指定级别以上的日志信息,输出到指定位置,低于指定级别的日志信息不会被输出。
-
官方建议实用的4个级别,优先级从高到低为
- ERROR
- WARN
- INFO
- DEBUG
-
如果没有LOG4J配置文件,报错。

3、设置
在MyBatis配置文件中设置
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
4、日志打印
相比标准日志工厂,可以自定义日志等级、生成时间、类名等信息。
控制台打印

日志文件

5、简单使用
- 在需要使用Log4j的类中导包:
import org.apache.log4j.Logger; - 获取日志对象,参数为当前类的class;
- 注意Log4j中的根配置,只输出指定级别以上的日志信息,低于指定级别的日志信息不会被输出;
- 官方建议实用的4个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。
@Test
public void testLog4j(){
// 获取日志对象
Logger logger = Logger.getLogger(UserMapperTest.class);
logger.debug("日志:DEBUG等级");
logger.info("日志:INFO等级");
logger.warn("日志:WARN等级");
logger.error("日志:ERROR等级");
}
控制台打印

日志文件

7.3、Ideolog插件
使用IntelliJ IDEA进行开发,可以在插件中心下载该插件,可以设置不同日志等级的高亮。

8、分页
使用分页的理由:减少数据处理量,提高查询效率,提高性能。
8.1、Limit分页
SELECT column_name
FROM table_name
LIMIT startIndex,pageSize
Mapper
由于需要传递一个以上的参数,所以使用Map来传参。
/**
* 查询所有用户,limit分页显示
*
* @param map 传递2个参数:
* startIndex 起始索引(下标从0开始);
* pageSize 页面大小
* @return 用户列表
*/
List<User> listUsersLimit(Map<String, Integer> map);
Mapper.xml
<select id="listUsersLimit" resultType="indi.jaywee.pojo.User" >
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
JUnit
@Test
public void testListUsersLimit() {
// 获取SqlSession实例
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 获取Mapper
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Integer> map = new HashMap<>();
map.put("startIndex", 3);
map.put("pageSize", 5);
// 执行方法
List<User> users = userMapper.listUsersLimit(map);
for (User user : users) {
System.out.println(user);
}
// 关闭连接
sqlSession.close();
}
8.2、RowBounds分页
limit分页是在数据库层实现分页,RowBounds是在Java代码层实现分类。
仅作了解,不建议使用。
Mapper
/**
* 查询所有用户,RowBounds分页显示
*
* @return 用户列表
*/
List<User> listUsersRowBounds();
Mapper.xml
<select id="listUsersRowBounds" resultType="user">
select * from mybatis.user
</select>
JUnit
@Test
public void testListUsersRowBounds() {
// 获取SqlSession实例
SqlSession sqlSession = MyBatisUtils.getSqlSession();
// 直接通过sqlSession调用方法
RowBounds rowBounds = new RowBounds(0, 5);
List<User> userList = sqlSession.selectList("indi.jaywee.dao.UserMapper.listUsersRowBounds", null, rowBounds);
// 关闭连接
sqlSession.close();
}
8.3、分页插件

PageHelper:https://pagehelper.github.io/


浙公网安备 33010602011771号