MyBatis学习_Log4j日志_(一对一关联_一对多关联_延迟加载,懒得写,先立falg)_MyBatis缓存_三方缓存_逆向工程

下载log4j-1.2.17.jar包:www.mvnrepository.com/artifact/log4j/log4j
也可以在我们之前下载的MyBatis压缩包中找lib->log4j-1.2.17.jar导入到构建目录中。

1、启动日志

conf.xml文件全局参数设置:

<configuration>
    <!--数据库文件引入-->
    <properties resource="db.properties"/>

    <!--全局参数-->
    <settings>
        <!--开启日志并指定日志类型,如果不指定,默认SLF4j-->
        <setting name="logImpl" value="LOG4j"/>
    </settings>

    <!--设置单个/多个别名-->
    <typeAliases>

2、编写日志输出文件

log4j.rootLogger=DEBUG,stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#日志布局
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#日志格式
log4j.appender.stdout.layout.onversionPattern=%5p [%t] -%m%n

在这里插入图片描述
Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG
开发时我们使用DEBUG就行

3、使用日志

现在我们在看开启日志后的区别,运行java控制台将看到如图(不用慌,我们只关注箭头指的地方):
在这里插入图片描述

MyBatis缓存

在进行查询操作后mybatis会将查询到的数据放入一级二级缓存中,下次在进行相同的操作将不需要再次连接数据库查询,直接找缓存即可。
一级缓存(内存):同一SqlSession对象可以在一级缓存内找缓存,但是commit()后悔清空缓存。
二级缓存(硬盘):同一namespace不同SqlSession对象可以在二级缓存内找缓存,需要注意的是,耳机缓存只有在当前SqlSession被关闭才会使用到。
一级缓存默认开启,二级缓存需要我们手动打开。
1、在conf.xml配置

<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>

2、在mapper.xml文件中声明开启

<!-- 声明当前mapper全局开启二级缓存 -->
<cache></chche>
<!--关闭指定select的二级缓存-->
<select id="" useCache="false"></select>

一级二级缓存清理:commit(),进行增删改时;

三方缓存(这里用EnCache)

1、下载jar包
slf4j-api-1.7.25:MyBatis自带,在lib里面找
MyBatis Ehcache » 1.1.0:https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache/1.1.0
Ehcache Core » 2.6.11:https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core/2.6.11
下载完成后导入构建
2、在src下新建EhCache.xml文件来配置Ehcache(下面代码直接复制):

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false">
    <!--
       diskStore:为缓存路径,ehcache分为内存和磁盘两级,此属性定义磁盘的缓存位置。参数解释如下:
       user.home – 用户主目录
       user.dir  – 用户当前工作目录
       java.io.tmpdir – 默认临时文件路径
     -->
    <diskStore path="java.io.tmpdir/Tmp_EhCache"/>
    <!--
       defaultCache:默认缓存策略,当ehcache找不到定义的缓存时,则使用这个缓存策略。只能定义一个。
     -->
    <!--
      name:缓存名称。
      maxElementsInMemory:缓存最大数目
      maxElementsOnDisk:硬盘最大缓存个数
      eternal:对象是否永久有效,一但设置了,timeout将不起作用
      overflowToDisk:是否保存到磁盘,当系统当机时
      timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大
      timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大
      diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
      diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
      diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
      memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)
      clearOnFlush:内存数量最大时是否清除
      memoryStoreEvictionPolicy:可选策略有:LRU(最近最少使用,默认策略)、FIFO(先进先出)、LFU(最少访问次数)
      FIFO,first in first out,这个是大家最熟的,先进先出
      LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存
      LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存
   -->
    <defaultCache
            eternal="false"
            maxElementsInMemory="10000"
            overflowToDisk="false"
            diskPersistent="false"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="259200"
            memoryStoreEvictionPolicy="LRU"/>
 
    <cache
            name="cloud_user"
            eternal="false"
            maxElementsInMemory="5000"
            overflowToDisk="false"
            diskPersistent="false"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="1800"
            memoryStoreEvictionPolicy="LRU"/>
 
</ehcache>

3、使用EhCache

<!--配置EhCache-->
<cache type="org.mybatis.caches.ehcache.EhcacheCache">
    <!--覆盖EhCache.xml中的属性-->
    <property name="" value=""></property>
</cache>

逆向工程

MyBatis Generator Core » 1.3.5。jar:https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core/1.3.5
1、新建Java工程:MyBatisGenerator
导入mybatis.jar、ojdbc.jar、MyBatis Generator.jar
2、逆向工程配置文件:generator.xml并插入以下代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 是否去除自动生成的注释 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- Mysql数据库连接的信息:驱动类、连接地址、用户名、密码 -->
        <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
                        connectionURL="jdbc:oracle:thin:@127.0.0.1:1521/orcl"
                        userId="scott"
                        password="tiger">
        </jdbcConnection>
        <!-- Oracle数据库
            <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
                connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg"
                userId="yycg"
                password="yycg">
            </jdbcConnection>
        -->

        <!-- 默认为false,把JDBC DECIMAL 和NUMERIC类型解析为Integer,为true时
        把JDBC DECIMAL 和NUMERIC类型解析为java.math.BigDecimal -->
        <javaTypeResolver >
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>

        <!-- targetProject:生成POJO实体类的位置 -->
        <javaModelGenerator targetPackage="org.mybatis.entity" targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
            <!-- 从数据库返回的值被清理前后的空格 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>

        <!-- targetProject:mapper映射文件生成的位置 -->
        <sqlMapGenerator targetPackage="org.mybatis.mapper"  targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </sqlMapGenerator>

        <!-- targetProject:mapper接口生成的的位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="org.mybatis.mapper"  targetProject=".\src">
            <!-- enableSubPackages:是否让schema作为包的后缀 -->
            <property name="enableSubPackages" value="false" />
        </javaClientGenerator>

        <!-- 指定数据表 -->
        <table schema="" tableName="id"></table>
        <table schema="" tableName="name"></table>
        <table schema="" tableName="age"></table>
        <table schema="" tableName="sex"></table>

        <!-- 有些表的字段需要指定java类型
        <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
          <property name="useActualColumnNames" value="true"/>
          <generatedKey column="ID" sqlStatement="DB2" identity="true" />
          <columnOverride column="DATE_FIELD" property="startDate" />
          <ignoreColumn column="FRED" />
          <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
        </table> -->

    </context>
</generatorConfiguration>

3、Test.java执行

package org.mybatis.test;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
        File file = new File("src/generator.xml");
        List<String> warnings = new ArrayList<>();
        ConfigurationParser configurationParser = new ConfigurationParser(warnings);
        Configuration configuration = configurationParser.parseConfiguration(file);
        DefaultShellCallback callback = new DefaultShellCallback(true);
        //逆向工程的核心类

        MyBatisGenerator generator = new MyBatisGenerator(configuration,callback, warnings);
        generator.generate(null);
        System.out.println("123456");

    }
}

愿你心如花木,向阳而生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值