日志

为什么需要日志

如果一个数据库操作出现了异常,需要排错,那么日志就是最好的助手

Mybatis通过使用内置的日志工厂提供日志功能,有一下几种实现方式:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j(官方推荐)
  • JDK Logging

Mybatis会按照上面的顺序使用第一个查找到的实现

有不少的应用服务器的类路径下已经包含了Commons Logging,这种情况下,Mybatis会将优先级高的Commons Logging作为日志实现,其他的日志配置将会被忽略。如果想使用其他日志实现,需要在Mmybatis-config.xml中添加以下配置

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

value的值可以是以下任意一个

在所有的日志实现中,我们需要掌握LOG4J和STDOUT_LOGGING(标准日志输出)

<settings>
<!--标准的日志工厂的实现-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>

Log4J

可以控制日志信息输送的目的地是控制台、文件、GUI组件

也可以控制每一条日志的输出格式,自定义日志输出

通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程

通过一个配置文件来灵活地进行配置,不需要修改应用的代码

使用方式:

  1. 导入Log4J包
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
  1. 在mybatis-config.xml中配置log4j日志的实现
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
  1. 添加接口代码
package org.luoqing.dao;
public interface TeacherMapper {
@Select("SELECT * FROM teacher WHERE id = #{id}")
Blog selectTeacher(int id);
}
  1. 在resource目录中添加log4j.properties
### 将等级为DEBUG的日志信息输出到console和file两个目的地 ###
log4j.rootLogger = DEBUG,console,file ### 打印Mapper的日志(以下配置对于注解和XML配置文件都可) ###
log4j.logger.org.luoqing.dao.TeacherMapper=TRACE
### 或者也可以打印包中所有的Mapper的日志
log4j.logger.org.luoqing.dao=TRACE
### 甚至可以打印Mapper中特定语句的日志
log4j.logger.org.luoqing.dao.TeacherMapper.selectTeacher=TRACE ### 输出到控制台 ###
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/log.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
  1. 测试

    测试代码此处省略

自定义输出语句

  1. 在要使用log4j的类中导入包
import org.apache.log4j.Logger;
  1. 日志对象,参数为当前类的class
static Logger logger = Logger.getLogger(UserMapperTest.class);
  1. 日志级别
@Test
public void logTest() {
logger.info("info:进入了logTest");
logger.debug("debug:进入了logTest");
logger.error("error:进入了logTest");
}

分页

为什么要分页

为了减少数据的处理量

使用limit分页

语法:select * from tableName limit startIndex, pageSize
select * from user limit 0,3 # 从第0条记录开始,每页显示3个

使用Mybatis实现

  1. 接口
public interface UserMapper {
// 分页实现
List<User> getUserByLimit(Map<String, Integer> map);
}
  1. Mapper.xml
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
select * from learn.user limit #{startIndex}, #{pageSize}
</select>
  1. 测试
@Test
public void limitTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class); HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex", 0);
map.put("pageSize", 2); List<User> userByLimit = mapper.getUserByLimit(map);
for (User user : userByLimit) {
System.out.println(user);
}
sqlSession.close();
}

使用RowBounds分页

不再使用SQL实现分页

  1. 接口
public interface UserMapper {
// RowBounds分页
List<User> getUserByRowBounds();
}
  1. Mapper.xml
<select id="getUserByRowBounds" resultMap="UserMap">
select * from learn.user
</select>
  1. 测试
@Test
public void getUserByRowBoundsTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession(); //RowBounds实现
RowBounds rowBounds = new RowBounds(0, 2); List<User> userList = sqlSession.selectList("com.luoqing.dao.UserMapper.getUserByRowBounds", null, rowBounds); for (User user : userList) {
System.out.println(user);
} sqlSession.close();
}

分页插件-PageHelper

  1. 添加依赖
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>
  1. 在mybatis-config.xml中配置插件
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="dialect" value="mysql"/> <!--
默认是false
设置为true,会将RowBounds第一个参数offset当成pageNum使用
-->
<property name="offsetAsPageNum" value="true"/> <!--
默认是false
设置为true时,使用RowBounds分页会进行count查询
-->
<property name="rowBoundWithCoun" value="true"/> <!--
默认是false
设置为true,如果pageSize=0或者RowBounds.limit=0就会查询出所有的结果
相当于没有执行分页查询,返回结果仍是Page类型
-->
<property name="pageSizeZero" value="true"/> <!--
分页合理化参数,默认是false
设置为true,pageNum<=0时会查询第一页,pageNum>pages(超过总数时)会查询最后一页
-->
<property name="reasonable" value="true"/> <!--
为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从Map或ServletRequest中根据属性名取值
-->
<property name="params" value="pageNum=start;pageSize=limit;"/> <!--
默认是false
支持通过Mapper接口参数来传递分页参数
会从查询方法的参数值中,自动根据上面params配置的字段中取值,查找到合适的值时就会自动分页
-->
<property name="supportMethodsArgument" value="true"/>
</plugin>
</plugins>
  1. 测试

数据库准备

需要创建对应的POJO、DAO接口、Mapper.xml,此处省略

以下为测试代码

@Test
public void test1() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); //方式一:
PageHelper.startPage(1,5);
List<Student> all = mapper.findAll();
for (Student student : all) {
System.out.println(student);
} //方式二:
Page page = PageHelper.startPage(1,5);
mapper.findAll();
for (Object o : page) {
System.out.println(o);
} sqlSession.close();
}

Mybatis学习-日志与分页的更多相关文章

  1. mybatis学习日志之总结

    一.介绍mybatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名 ...

  2. Mybatis学习日志

    在Mybatis深入学习的一周中,总感觉跟着师傅的视屏讲解什么都能懂,但实际自己操作的时候才发现自己一脸懵逼,不知道从何入手.但还好自己做了点笔记.在此记录一下自己浅度学习Mybatis遇到几个小问题 ...

  3. Mybatis学习--日志

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/logging.html Logging Mybatis内置的日志工厂提供日志功能,具 ...

  4. mybatis学习日志二

    一.动态sql语句 if语句 if+where语句 if+set语句 choose(when,otherwise)语句 trim语句 sql片段 foreach语句 总结 bean部分的User类代码 ...

  5. MyBatis学习总结_17_Mybatis分页插件PageHelper

    如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...

  6. mybatis学习——日志工厂

    为什么要使用日志工厂? 我们想一下,我们在测试SQL的时候,要是能够在控制台输出 SQL 的话,是不是就能够有更快的排错效率?答案是肯定的,如果一个 数据库相关的操作出现了问题,我们就可以根据输出的S ...

  7. mybatis学习日志一

    Mybatis 介绍 MyBatis 是支持 普通 SQL 查询 , 存储过程 和 高级映射 的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以 及对结果集的检索封装 ...

  8. MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射

    在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...

  9. Mybatis学习--XML映射配置文件

    学习笔记,选自Mybatis官方中文文档:http://www.mybatis.org/mybatis-3/zh/configuration.html MyBatis 的配置文件包含了影响 MyBat ...

随机推荐

  1. 如何使用GitHub创建Maven私有仓库

    [Github上创建仓库] 首先,在GitHub上创建自己的仓库(mvn-repo): [配置本地setting文件] 找到本地的maven settings文件,配置server: 有两种选择,可以 ...

  2. 他凭借这70份PDF,3170页文件,成功斩获了含BATJ所有的offer

    前言 最近我一直在面试高级工程师,不管初级,高级,程序员,我想面试前,大家刷题一定是是少不了吧. 我也一样,我在网上找了很多面试题来看,最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,索性 ...

  3. 用MindManager画思维导图的好处有哪些?

    大家都听说过思维导图吧?有没有将这样一种图形思维工具真正运用到我们的日常生活中去呢?是否真的知道思维导图怎么用呢?今天小编就来给大家讲一讲,思维导图怎么用. 老规矩,先给大家讲一讲小编用的软件跟系统, ...

  4. 什么是NTFS文件格式

    说到磁盘格式,想必大家对于NTFS格式并不陌生.我们使用的u盘等硬盘设备很多都应用了此格式.NTFS文件格式究竟是什么?它都有哪些特点?今天,小编将利用这篇文章为大家进行介绍. 一.什么是NTFS文件 ...

  5. guitar pro系列教程(四): 详解Guitar Pro主音量自动化设置

    让我们继续进行guitar pro 7系列教程 在上一章节中我们讲到插入速度自动化设置,本章节我们将采用图文结合的方式详细的讲解guitar pro 7主音量的相关自动化设置分别是:插入主音量自动化, ...

  6. python测试代码

    前言: 编写函数或者类时,需要编写测试代码,来保证其的功能运行是否按预期的那样工作.在程序添加新的代码时,用来测试是否会破坏本身的功能. 我们使用python自带的unittest模块来测试代码. 编 ...

  7. JavaSE 学习笔记08丨网络编程

    Chapter 14. 网络编程 14.1 计算机网络入门 当前节的知识点只是一个概述,更具体.详细的内容放在 计算机网络 中. 14.1.1 软件结构 C/S结构(Client/Server结构): ...

  8. Java复数的定义与描述

    1 //4.复数的定义与描述 2 package test; 3 4 import java.util.Scanner; 5 6 public class complex {//复数类 7 doubl ...

  9. 由OptionalLong想到的拆装箱问题

    包装类型为null的时候时候拆箱会报空指针

  10. LaTeX学习路线

    LaTex源文件的基本结构 LaTex中的中文处理方法 LaTeX相关自学文档 LaTeX的字体字号设置 LaTeX文档的基本结构 LaTeX中的特殊字符 LaTeX中的插图 LaTeX中的表格 La ...