• 5.Mybatis日志


    转载:https://blog.kuangstudy.com/index.php/archives/498/

    一.日志

    1.日志工厂

    • 如果一个数据库操作出现异常,我们就需要日志工具进行排错。
    • Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:
      • SLF4J
      • Log4j(掌握)
      • Log4j 2
      • JDK logging
      • Commons Logging
      • STDOUT_LOGGING(掌握)
      • NO_LOGGING

    2.标准日志实现(STDOUT_LOGGING)

    mybatis-config.xml:

    1 <settings>
    2     <setting name="logImpl" value="STDOUT_LOGGING"/>
    3 </settings>

    效果:

    3.Log4j

    (1)简介

    • Log4j是Apache的一个开源项目

    • 通过使用Log4j,我们可以控制日志信息输送的目的地:控制台,文本,GUI组件....

    • 我们也可以控制每一条日志的输出格式;

    • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

    (2)导入log4j的jar包

    (2.1)父项目的pom.xml:

    1 <dependency>
    2     <groupId>log4j</groupId>
    3     <artifactId>log4j</artifactId>
    4     <version>1.2.17</version>
    5 </dependency>

    (2.2)修改mybatis-config.xml:

    1 <settings>
    2     <setting name="logImpl" value="LOG4J"/>
    3 </settings>

    (2.3)添加log4j.properties配置文件:

     1 #将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
     2 log4j.rootLogger=DEBUG,console,file
     3 
     4 #控制台输出的相关设置
     5 log4j.appender.console = org.apache.log4j.ConsoleAppender
     6 log4j.appender.console.Target = System.out
     7 log4j.appender.console.Threshold=DEBUG
     8 log4j.appender.console.layout = org.apache.log4j.PatternLayout
     9 log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
    10 
    11 #文件输出的相关设置
    12 log4j.appender.file = org.apache.log4j.RollingFileAppender
    13 log4j.appender.file.File=./log/wzh.log
    14 log4j.appender.file.MaxFileSize=10mb
    15 log4j.appender.file.Threshold=DEBUG
    16 log4j.appender.file.layout=org.apache.log4j.PatternLayout
    17 log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
    18 
    19 #日志输出级别
    20 log4j.logger.org.mybatis=DEBUG
    21 log4j.logger.java.sql=DEBUG
    22 log4j.logger.java.sql.Statement=DEBUG
    23 log4j.logger.java.sql.ResultSet=DEBUG
    24 log4j.logger.java.sql.PreparedStatement=DEBUG

    (2.4)使用log4j

    在UserMapperTest.java中:

    • 创建静态变量: static Logger logger = Logger.getLogger(UserMapperTest.class); 参数为本类的类名.class

    • 输出语句:

      • logger.info

      • logger.debug 

      • logger.error

     1 import edu.ustc.wzh.pojo.User;
     2 import edu.ustc.wzh.utils.MybatisUtils;
     3 import org.apache.ibatis.session.SqlSession;
     4 import org.apache.log4j.Logger;
     5 import org.junit.Test;
     6 
     7 public class UserMapperTest {
     8 
     9     //注意导包:org.apache.log4j.Logger
    10     static Logger logger = Logger.getLogger(UserMapperTest.class);
    11     
    12     @Test
    13     public void selectUser() {
    14     
    15         logger.info("info:进入selectUser方法");
    16         logger.debug("debug:进入selectUser方法");
    17         logger.error("error: 进入selectUser方法");
    18     
    19         SqlSession session = MybatisUtils.getSession();
    20     
    21         UserMapper mapper = session.getMapper(UserMapper.class);
    22     
    23         User user = mapper.getUserById(1);
    24         System.out.println(user);
    25     
    26         session.close();
    27     }
    28 
    29 }

    (2.5)结果

    产生一个log文件夹和一个wzh.log文件与命令行输出内容一致

    4.分页

    (4.1)为什么要分页

      在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就是每次处理小部分数据,这样对数据库压力就在可控范围内。

    (4.2)数据库中分页语法

    1 #语法
    2 SELECT * FROM table LIMIT stratIndex,pageSize
    3 
    4 SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15 
    5 
    6 #如果只给定一个参数,它表示返回最大的记录行数目:    
    7 SELECT * FROM table LIMIT 5; //检索前 5 个记录行   
    8  
    9 #换句话说,LIMIT n 等价于 LIMIT 0,n。  

    (4.3)Mybatis基于SQL使用Limit实现分页(重点掌握,推荐使用)

    Mapper接口文件:

    1 //选择全部用户实现分页
    2 List<User> getUserByLimit(Map<String,Integer> map);

    Mapper.xml编写SQL:

    1 <!--分页-->
    2 <select id="getUserByLimit" parameterType="map" resultMap="UserMap">
    3     select * from mybatis.user limit #{startIndex},#{pageSize}
    4 </select>

    测试程序:

     1     @Test
     2     public void getUserByLimitTest(){
     3         SqlSession session = MybatisUtils.getSession();
     4 
     5         UserMapper mapper = session.getMapper(UserMapper.class);
     6 
     7         Map<String,Integer> map = new HashMap<String, Integer>();
     8         map.put("startIndex",0);
     9         map.put("pageSize",2);
    10 
    11         List<User> userList = mapper.getUserByLimit(map);
    12         for (User user : userList) {
    13             System.out.println(user);
    14         }
    15 
    16         session.close();
    17     }

    (4.4)Mybatis基于Java使用RowBounds实现分页(不推荐使用)

    Mapper接口文件:

    1 //选择全部用户RowBounds实现分页
    2 List<User> getUserByRowBounds();

    Mapper.xml编写SQL:

    1 <select id="getUserByRowBounds" resultMap="UserMap">
    2     select * from mybatis.user
    3 </select>

    测试程序:重要工作在此处

     1 @Test
     2 public void getUserByRowBoundsTest(){
     3     SqlSession session = MybatisUtils.getSession();
     4 
     5     RowBounds rowBounds = new RowBounds(0,2);
     6 
     7     //通过session.**方法进行传递rowBounds,[此种方式现在已经不推荐使用了]
     8     List<User> users = session.selectList("edu.ustc.wzh.dao.UserMapper.getUserByRowBounds", null, rowBounds);
     9 
    10     for (User user: users){
    11         System.out.println(user);
    12     }
    13 
    14     session.close();
    15 }

    (4.5)MyBatis的分页插件PageHelper实现分页(了解)

    官方文档:https://pagehelper.github.io/

  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/zhihaospace/p/12297636.html
Copyright © 2020-2023  润新知