Mybatis 配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<!--<typeAlias type="com.thiszc.pojo.User" alias="User"/>-->
<package name="com.thiszc.pojo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--<mapper resource="com/thiszc/dao/UserMapper.xml"/>-->
<!--<mapper class="com.thiszc.dao.UserMapper"/>-->
<package name="com.thiszc.dao"/>
</mappers>
</configuration>
log4j.properties 配置文件
log4j.rootLogger=DEBUG,INFO,console,file
# 文件输出相关配置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = ./log/thiszc.log
log4j.appender.file.MaxFileSize = 10mb
log4j.appender.Threshold = DEBUG
log4j.appender.layout = org.apache.log4j.PatternLayout
log4j.appender.layout.ConversionPattern = [%p][%d{yy-MM-dd}][%c]%m%n
#控制台输出相关设置:
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.consoleAppender.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.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
#{} 和 ${} 区别
- #{} 和 ${}
- 前者可以防止SQL注入
log4j五个级别
主要作用是控制日志输出的粒度
- DEBUG: 级别最低,方便在调试时更详细的了解程序运行过程,主要用于开发过程中打印一些运行信息;
- INFO:输出程序运行的一些重要信息,避免打印过多的日志;
- WARN:输出警告信息,用以说明代码会出现潜在错误;
- ERROR:输出错误信息;
- FATAL:级别最高,输出严重错误信息,用以说明系统继续运行会导致严重后果;
- 规则①:级别之间是包含的关系,意思是如果你设置日志级别是DEBUG,则大于等于这个级别的日志都会输出。
- 规则②:当程序已经交付使用时,我中需要将日志级别设置为INFO或者WARN,这样可以减少不必要的日志输出(太多的日志会使得客户无法看清楚是否存在错误的)
为什么pom文件标识为ignored
解决方案:点击File-》Settings-》Build,Execution…-》Build Tools-》Maven-》Ignored Files 。将右边选中内容取消勾选
xml文件的规范
目前来看,所有xml文件不要有中文,否则会报字符无法识别的错误
结果集映射
<resultMap id="TeacherStudent" type="Teacher">
<result property="id" column="tid"/>
<result property="name" column="tname"/>
<collection property="students" ofType="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<result property="tid" column="tid"/>
</collection>
</resultMap>
动态SQL
-
IF
- 根据不同的条件生成不同的SQL;可用于搜索功能
<select id="queryBlogIF" parameterType="map" resultType="blog"> select * from mybatis.blog where 1=1 <if test="title != null"> and title = #{title} </if> <if test="author != null"> and author=#{author} </if> </select>
- 根据不同的条件生成不同的SQL;可用于搜索功能
-
where
- 如果有两个条件,但是前面一个条件不满足,后面一个条件满足,这时候就需要使用where标签,否则会出现
where and ...
这样不合法的SQL语句<select id="queryBlogIF" parameterType="map" resultType="blog"> select * from mybatis.blog <where> <if test="title != null"> and title = #{title} </if> <if test="author != null"> and author=#{author} </if> </where> </select>
- 如果有两个条件,但是前面一个条件不满足,后面一个条件满足,这时候就需要使用where标签,否则会出现
- 总结:所谓动态SQL本质还是SQL,只是我们在SQL层面,可以去执行逻辑代码
mybatis缓存
- 为什么需要缓存:频繁查询的且不经常修改的数据,应该放到缓存中,而不是每次都是连接数据库,这样可以提高查询效率。
- 一级缓存:一次会话期间有效;
- 二级缓存:基于namespace级别的缓存,一个mapper中有效;
- 缓存失效的情况:
- 查询不同的东西
- 进行增删改操作;
- 手动清理缓存;
- 查询不同的mapper