mybatis-04-日志及分页

6 ,日志

6.1 日志工厂

如果一个数据库操作出现了异常,我们需要排错。日志就是最好的助手!
曾经:sout、debug
现在:日志工厂!

  • SLF4J
  • LOG4J 【掌握】
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING【掌握】
  • NO_LOGGING

在Mybatis中具体使用哪一个日志实现,在设置中设定!

STDOUT_LOGGING标准日志输出
在mybatis-config.xml核心配置文件中,配置我们的日志!

 <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

6.2 Log4j

什么是Log4j?

  • Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件
  • 我们也可以控制每一条日志的输出格式;
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  • 可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码

1.先在pom.xml文件中导入log4j的依赖包

<dependencies>
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

2.在resources文件夹下建立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

3.在mybatis-config.xml核心配置文件中,配置log4j为日志的实现!

<settings>
    <setting name="logImpl" value="LOG4J"/>
</settings>

简单使用

  1. 在要使用Log4j的测试类中,导入包import org.apache.log4j.Logger;

  2. 日志对象,参数为当前类的class

    Logger logger = Logger.getLogger(UserMapperTest.class);
    
  3. 日志级别

logger.info("info:进入了testLog4j");
logger.debug("DEBUG:进入了testLog4j");
logger.error("erro:进入了testLog4j");
  1. 之后可在log文件夹中查看日志文件信息

7 ,分页

思考:为什么要分页!

  • 减少数据的处理量

7.1 使用Limit分页

-- 语法:
SELECT * from user limit startIndex,pageSize SELECT  * from user limit 3 *#[0,n]*

使用Mybatis实现分页,核心SQL

  1. 接口:

    package com.kuang.dao;
    
    import com.kuang.pojo.User;
    import org.apache.ibatis.annotations.Param;
    import java.util.List;
    import java.util.Map;
    
    public interface UserMapper {
        User getUserById (int id);
    
        // 1.万能 map 传递参数
        List<User> getUserList(Map<String,Integer> map);
        // 2.使用 @Param 注解传递参数
        List<User> getUserList01(@Param("startIndex") Integer startIndex,@Param("pageSize") Integer pageSize);
    }
    
    
  2. UserMapper.xml

    <select id="getUserList" resultMap="UserMap">
        select * from user limit #{startIndex},#{pageSize}
    </select>
    
    <select id="getUserList01" resultMap="UserMap">
        select * from user limit #{startIndex},#{pageSize}
    </select>
    
  3. 测试

    package com.kuang.dao;
    
    import com.kuang.pojo.User;
    import com.kuang.utils.MybatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.log4j.Logger;
    import org.junit.Test;
    import java.util.HashMap;
    import java.util.List;
    
    public class UserMapperTest {
        // 提升作用域
        public static Logger logger = Logger.getLogger(UserMapperTest.class);
    
        @Test
        public void getUserById(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User userById = mapper.getUserById(0);
            System.out.println(userById);
            sqlSession.close();
        }
    
        // 1.万能 map 传递参数
        @Test
        public void getUserList(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            HashMap<String, Integer> map = new HashMap<>();
            map.put("startIndex",0);
            map.put("pageSize",5);
            List<User> userList = mapper.getUserList(map);
            for (User user : userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    
        // 2.使用 @Param 注解传递参数
        @Test
        public void getUserList01(){
            SqlSession sqlSession = MybatisUtils.getSqlSession();
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList01 = mapper.getUserList01(0, 5);
            for (User user : userList01) {
                System.out.println(user);
            }
            sqlSession.close();
        }
    }
    
    

7.2 RowBounds分页

不再使用SQL实现分页

  1. 接口:

    // 3.RowBounds分页 不再使用SQL实现分页
    List<User> getUserListRow();
    
  2. UserMapper.xml

    <!--RowBounds分页 不再使用SQL实现分页-->
    <select id="getUserListRow" resultMap="UserMap">
        select * from mybatis.user
    </select>
    
  3. 测试

    // 3.RowBounds分页 不再使用SQL实现分页
    @Test
    public void getUserListRow(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
    
        // RowBounds分页
        RowBounds rowBounds = new RowBounds(1, 5);
        // 通过 java 代码实现分页
        List<User> list = sqlSession.selectList("com.kuang.dao.UserMapper.getUserListRow", null, rowBounds);
        for (User o : list) {
            System.out.println(o);
        }
        sqlSession.close();
    }
    

7.3 mybatis 分页插件

  • 导入依赖

    <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.2.0</version>
    </dependency>
    
  • 声明插件 在 mybatis 核心配置文件中

    <!--声明插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"/>
    </plugins>
    
  • 测试

    • 编写接口

      // 4.mybatis 分页插件 模糊查询
      List<User> getUserList00(String value);
      
    • UserMapper.xml

      <!--mybatis 分页插件 模糊查询-->
      <select id="getUserList00" resultMap="UserMap">
          select * from mybatis.user where pwd like "%"#{value}"%"
      </select>
      
    • 测试类:

      // mybatis 分页插件 模糊查询
      @Test
      public void getUserList0(){
          SqlSession sqlSession = MybatisUtils.getSqlSession();
          UserMapper mapper = sqlSession.getMapper(UserMapper.class);
          PageHelper.startPage(2, 3);  // 因为是模糊查询 第一个参数不能为零
          List<User> s = mapper.getUserList00("s");
      
          for (User user : s) {
              System.out.println(user);
          }
          sqlSession.close();
      }
      

版权声明:本文为Who_heard原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。