MyBatis入门学习(二)——log4j、事务和分页

一、log4j

log4j是由apache推出的开源免费的日志处理类库,通过使用log4j,我们可以控制我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。而且这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

1.log4j的输出级别

OFF(关闭日志)>FATAL(严重错误)>ERROR(普通错误)>WARN(警告)>INFO(普通信息)>DEBUG(调试信息)=>TRACE(跟踪信息)>ALL(开启日志)或者自定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR,WARN,INFO,DEBUG。
通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关。
如果设置级别为INFO则优先级高于等于INFO级(INFO,WARN,ERROR)的日志信息将被输出,小于该级别的如DEBUG将不会被输出

输出级别的具体说明:

static Level OFF
OFF Level是最高等级的,用于关闭所有日志记录。

static Level FATAL
FATAL level指出每个严重的错误事件将会导致应用程序的退出。

static Level ERROR
ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。

static Level WARN
WARN level表明会出现潜在错误的情形。

static Level INFO 
INFO level表明消息在粗粒度级别上突出强调应用程序的运行过程。

static Level DEBUG 
DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的,帮助调试代码的方法和属性

public static final Level TRACE
TRACE Level指出比调试事件(DEBUG Level)更细粒度的信息,帮助跟踪代码执行的方法和属性
2.log4j.properties文件配置
log4j.rootLogger = ERROR,CONSOLE,D,E
### 设置指定 位置的显示级别
log4j.logger.com.xxbb.mapper=DEBUG
### 输出信息到控制台 ###
log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Target = System.out
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%m%n
 
### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = D://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
 
### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File D://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
3.pattern中的几个常用表达式
  • %m 输出代码中指定的消息
  • %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  • %r 输出自应用启动到输出该log信息耗费的毫秒数
  • %c 就是定义该Logger的名字
  • %C 输出所属的类目,通常就是调用该Logger的类所在类的全名
  • %t 输出产生该日志事件的线程名
  • %n 输出一个回车换行符,Windows平台为"rn",Unix平台为"n"
  • %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式如:%d{yyy MMM dd HH:mm:ss,SSS},输出:2020-03-20 02:15:15,022
  • %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

其中在设置为%c的情况下,logger无论在何处被调用,都输出传入类的路径,例如

Logger logger = Logger.getLogger(Test.class); 

控制台输出Test类的路径名

而在设置为%C的情况下,则是调用该logger的类的路径名

4.log4j的配置

在配置好log4j.properties文件后,在mybatis的xml配置文件的settings属性中添加

<settings>
 		<!--  使用log4j日志 -->
 		<setting name="logImpl" value="LOG4J"/>	
 </settings>
二、事务
1.事务:

是从数据库角度出发,对于完成业务时需要执行的SQL集合,统称为一个事务

2.事务回滚:

如果在一个事务中某个SQL执行事务发生非预期的情况或是错误时,希望回归到事务的原点状态,以保证数据库数据的完整性

3.Mybatis中的事务

3.1.默认关闭JDBC的自动提交功能,即创建的SqlSession对象默认是部自动提交事务,在执行增删改语句时需要通过Sqlsession.commit()主动提交事务。可通过设置openSession(true),saetAutoCommit(true)的方式修改成自动提交。

3.2.mybatis底层是对JDBC的封装,,在JDBC中的executeUpdate()执行增删改操作,返回值为int,表示受影响的行数。与之对应的在mybatis中的insert,delete,update标签都没有resultType属性,默认返回值为int

3.3在使用openSession创建一个Sqlsession对象时,mybatis同时会创建一个Transaction(事务对象),其中autoCommit的默认值为false

3.4 如果执行事务时出现了异常,调用Sqlsession.rollback()回滚事务

三、分页
1.CRUD标签的属性

在CRUD的xml标签中,通过ResultType控制返回值类型,通过ParameterType控制传入值类型,如果传入和返回值类型为我们所创建的po类,则会自动使用类的set,get方法对类中属性进行操作

<!-- 根据用户和账号查询用户信息 -->
<select id="queryAccountByName" resultType="Account" parameterType="Account">
		select * from t_account where account=#{account} and name=#{name}
</select>

以此句为例,传入和传出都是Account对象,执行该语句会从传入类中寻找account,name属性,将它们的值填入#{ }中,只要数据库表列名和该类属性名一一对应,则每行的查询结果都会存入一个Account对象中

如果传入的参数类型为map,那在查询条件中写成#{map的键名}

2.设置别名

上文中的ResultType和ParameterType中如果使用的时自己所创建的po类本来需要使用全类名com.xxbb.po.Account的。可以在mybatis的配置文件中添加一个该类所在的包名以简化输入

<typeAliases>
 		<!-- 给类起别名 -->
 		<!-- <typeAlias type="com.xxbb.po.Account" alias="a"/> -->
 		<!-- 注册一个包 使得包下的类不用再写全路径-->
 		<package name="com.xxbb.pojo" />
 </typeAliases>

注意根据文件中configuration标签提示的子标签顺序设置标签,顺序不符合要求会有错误提示。

3.mysql分页

关键代码 :

拼接在select语句的末尾 limit index,nums

index表示所查询数据的行数下标,从0开始,nums表示一次显示数据的条数。

为了在业务上实现分类可以设置一个分页类,主要属性:

ackage com.xxbb.pojo;

import java.util.List;

/**  
    * @Title: Page.java
    * @Package com.xxbb.pojo
    * @Description: 分页类
    * @author 徐斌
    * @version V1.0  
    */

public class Page {
	/**
	 * 每页显示数据个数
	 */
	private int pageSize;
	/**
	 * 页码
	 */
	private int pageNumber;
	/**
	 * 数据总数
	 */
	private long totalSize;
	/**
	 * 总页数
	 */
	private long totalPage;

每次进行查询时进行赋值,index=pageSize*(pageNumber-1),nums=pageSize

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值