MyBatis之日志及分页介绍
2022/2/14 6:13:48
本文主要是介绍MyBatis之日志及分页介绍,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MyBatis之日志介绍
一、日志工厂
如果在测试SQL的时候,控制台能够输出相关的 SQL信息,那么是不是排错效率就更快了?在Java程序开发过程中,我们经常使用debug模式来调节程序,跟踪代码的执行过程。但是MyBatis是基于接口、配置文件的源代码执行过程。因此,我们必须选择日志工具来作为我们开发、调试程序的工具。
1.1 MyBatis日志功能:
MyBatis内置的日志工厂提供日志功能,具体的日志实现有以下几种方式:
-
SLF4J
-
Apache Commons Logging
-
Log4j
-
Log4j 2
-
JDK logging
注:具体选择的日志工具由MyBatis的内置日志工厂确定。它会按上文列举的顺序查找,如果都未找到,则日志功能就会被禁用。
1.2 Log4j日志
Log4j日志是Apache的一个开源项目,通过使用Log4j,我们可以将控制日志信息输送到控制台,文本等,同时也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
Log4j日志功能使用步骤:
-
导入log4j的包:
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
-
编写配置文件log4j.properties:
#将等级为DEBUG的日志信息输出到console和file log4j.root Logger=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.Conversion Pattern=[%c]-%m%n #文件输出的相关设置 log4j.appender.file = org.apache.log4j.RollingFileAppender log4j.appender.file.File=./log/kuang.log log4j.appender.file.Max File Size=10mb log4j.appender.file.Threshold=DEBUG log4j.appender.file.layout=org.apache.log4j.Pattern Layout log4j.appender.file.layout.Conversion Pattern=[%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.Result Set=DEBUG log4j.logger.java.sql.Prepared Statement=DEBUG
-
setting设置日志实现:
<settings> <setting name="logImpl" value="LOG4J"/> </settings>
-
在程序中使用Log4j输出日志:
//注意导包:org.apache.log4j.Logger static Logger logger = Logger.getLogger(MyTest.class); @Test public void selectUser() { logger.info("info:进入select User方法"); logger.debug("debug:进入select User方法"); logger.error("error: 进入select User方法"); SqlSession session = MybatisUtils.getSession(); Mapper mapper = session.getMapper(Mapper.class); List<User> users = mapper.selectUser(); for (User user: users){ System.out.println(user); } session.close(); }
二、使用Limit实现分页
在学习MyBatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就是每次处理小部分数据,这样对数据库压力就在可控范围内。
2.1 SQL语句实现分页功能:
#分页语法 SELECT * FROM table LIMIT stratIndex,page Size #检索记录行 1-5 SELECT * FROM table LIMIT 0,5; #为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:(此方法已经废除) SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. #如果只给定一个参数,它表示返回最大的记录行数目: #LIMIT n 等价于 LIMIT 0,n。 SELECT * FROM table LIMIT 5; //检索前 5 个记录行
2.2 MyBatis实现分页步骤:
-
修改Mapper文件:
<select id="selectUser" parameterType="map" resultType="user"> select * from user limit #{startIndex},#{pageSize} </select>
-
增加Mapper接口,参数为map:
//选择全部用户实现分页 List<User> selectUser(Map<String,Integer> map);
-
在测试类中传入参数测试:
//分页查询 , 两个参数start Index , pageSize @Test public void testSelectUser() { SqlSession session =MybatisUtils.getSession(); Mapper mapper = session.getMapper(Mapper.class); int currentPage = 1; //第几页 int pageSize = 2; //每页显示几个 Map<String,Integer> map = new HashMap<String,Integer>(); map.put("startIndex",(currentPage-1)*pageSize); map.put("pageSize",pageSize); List<User> users = mapper.selectUser(map); for (User user: users){ System.out.println(user); } session.close(); }
2.3 RowBounds分页
我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页。
RowBounds分页步骤:
-
新增Mapper接口:
//选择全部用户Row Bounds实现分页 List<User> getUserByRowBounds();
-
修改Mapper文件:
<select id="getUserByRowBounds" resultType="user"> select * from user </select>
-
实现测试类:
//这里使用RowBounds类 @Test public void testUserByRowBounds() { SqlSession session = MybatisUtils.getSession(); int currentPage = 2; //第几页 int pageSize = 2; //每页显示几个 RowBounds rowBounds = new RowBounds((currentPage- 1)*page Size,page Size); //通过session.方法进行传递rowBounds,[此种方式现在已经不推荐使用了] List<User> users = session.select List("com.kuang.mapper.User Mapper.get User By Row Bounds",null, rowBounds); for (User user: users){ System.out.println(user); } session.close(); }
2.4 分页插件PageHelper
在处理分页的时候,MyBatis并没有什么特别的方法,一般需要自己去写limit子句实现,不过有个PageHelper插件。
PageHelper插件分页步骤:
-
POM依赖:
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.4</version> </dependency>
-
MyBatis对PageHelper的配置:
<!--打开Mybatis配置文件mybatis-config.xml,一般在Resource路径下。--> <plugins> <plugin interceptor="com.github.pagehelper.PageHelper"> <property name="dialect" value="mysql"/> <property name="offsetAsPageNum" value="false"/> <property name="rowBoundsWithCount" value="false"/> <property name="pageSizeZero" value="true"/> <property name="reasonable" value="false"/> <property name="supportMethodsArguments" value="false"/> <property name="returnPageInfo" value="none"/> </plugin> </plugins>
-
修改Mapper文件
-
新增Mapper接口
-
分页查询测试
官方文档:https://pagehelper.github.io/
这篇关于MyBatis之日志及分页介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器