MyBatis日志管理
- 日志文件是用于记录系统操作事件的记录文件或文件集合
- 日志保存历史数据,是诊断问题以及理解系统活动的重要依据
SLF4j与Logback
如果程序之前用的是log4j想换成logback,只需要把log4j的jar包从系统中剔除,引入logback的jar包就可以了。程序访问的门面不用做修改,SLF4J会自动完成log4j到logback的迁移工作,切换的工作由日志门面自动帮我们完成。
对于实现来说,目前主流的日志组件有log4j,logback,java.util.logging(jul),这些组件每个都有自己设计的特点,logback是目前的主流。log4j是早期java项目中非常著名的日志组件,logback和log4j是由一个人开发的,两者设计理念是非常相似的,使用也是非常相像的。
logback官网
引入logback依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
引入logback后同时自动添加了以下3个组件
运行之前的测试程序控制台打印出MyBatis运行过程中产生的日志,日志更方便我们程序的调试
logback是允许对日志自定义的。在resources中新建logback.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<!--输出器也叫追加器,用于说明在什么地方进行日志输出,name是自定义的-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!-- 日志打印时最前方信息是从哪个线程输出,具体时间,日志级别按5个字符右对齐,
由哪个类产生的日志, - 具体日志内容, 换行 -->
<Pattern>[%thread] %d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 日志打印的根标签 -->
<!--
level代表日志输出级别(优先级高到低):
error: 错误 - 系统的故障日志
warn: 警告 - 存在风险或使用不当的日志
info: 一般性消息
debug: 程序内部用于调试信息
trace: 程序运行的跟踪信息
开发环境建议用debug便于调试,生产环境建议用info及以上
-->
<root level="debug">
<!-- 把appender中定义的name加入进来-->
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
MyBatis动态SQL
动态SQL的应用场景
网站筛选条件
- 动态SQL是指根据参数数据动态组织SQL的技术
<select id="dynamicSQL" parameterType="java.util.Map" resultType="com.zl.mybatis.entity.RepositoryStock">
SELECT * FROM repository_stock
<where>
<if test="materialName != null">
and material_name = #{materialName}
</if>
<if test="amount != null">
and amount < #{amount}
</if>
</where>
</select>
由于在xml中< 是特殊字符,所以这里使用转义字符
/**
* 动态SQL语句
* @throws Exception
*/
@Test
public void testDynamicSQL() throws Exception {
SqlSession session = null;
try{
session = MybatisUtils.openSession();
Map param = new HashMap();
param.put("materialName", "镀锌沉头螺丝钉");
param.put("amount", 500);
//查询条件
List<RepositoryStock> list = session.selectList("stock.dynamicSQL", param);
for(RepositoryStock g:list){
System.out.println(g.getMaterialName() + ":" +
g.getSpecs() + ":" + g.getAmount());
}
}catch (Exception e){
throw e;
}finally {
MybatisUtils.closeSession(session);
}
}
< where>标签可以动态地对子SQL进行判断,如果一开始出现and可以自动去掉
MyBatis多表级联查询
多表级联和多表关联查询不同,多表关联是指两个表通过主外键在一条SQL中完成所有数据的提取,多表级联查询是指通过一个对象获取与他关联的另外一个对象,执行SQL语句是多条。