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之日志及分页介绍的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程