Mybatis 笔记

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

#{} 和 ${} 区别

  1. #{} 和 ${}
    • 前者可以防止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

  1. 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>
      
  2. where
    1. 如果有两个条件,但是前面一个条件不满足,后面一个条件满足,这时候就需要使用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> 
      
  3. 总结:所谓动态SQL本质还是SQL,只是我们在SQL层面,可以去执行逻辑代码

mybatis缓存

  1. 为什么需要缓存:频繁查询的且不经常修改的数据,应该放到缓存中,而不是每次都是连接数据库,这样可以提高查询效率。
  2. 一级缓存:一次会话期间有效;
  3. 二级缓存:基于namespace级别的缓存,一个mapper中有效;
  4. 缓存失效的情况:
    • 查询不同的东西
    • 进行增删改操作;
    • 手动清理缓存;
    • 查询不同的mapper
上一篇:Mybatis03


下一篇:java-log日志