MyBatis 总结&模板

简述

  从8月2日到昨天9月10日,历时一个多月,共计30篇博客,把MyBatis的基础学完了,肥肠苏福~

  本篇博客会对mybatis的知识做一个自我总结,并附上各个配置文件的代码,方便以后项目的构建。

知识总结

  首先,MyBatis是一个持久层框架,直接和数据库交互,通过注解或者xml配置的方法,可以大大减少开发者的工作量,mybatis使用了orm的思想——object relational mapping的思想,使数据库中和表和java里的实体类相对应,通过操作实体类实现交互数据库,使开发者只需关注于sql语句,不用关心jdbc的连接与执行。

  MyBatis的核心类是sqlsession类,该类通过getMapper方法生成数据库表的代理对象,通过代理对象的方法实现CRUD。

  MyBatis的一级缓存是sqlsession里的数据区域,查询的结果会存放在该缓存中,注意一级缓存的区域是一个sqlsession。

  MyBatis的二级缓存是sqlsessionfactory里的数据区域,相对与一级缓存来说,实现了不同的sqlsession之间缓存的共享。

模板

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hjj</groupId>
    <artifactId>ch3_Mybatis_20181003153_1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <!-- 配置jdk -->
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>
    </dependencies>

</project>
pom.xml
<?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">

<!-- mybatis的主配置文件 -->
<configuration>
    
    <properties resource="db.properties"></properties>

    <!-- 使用typeAliases配置别名,它只能配置domain中的类名 -->
    <typeAliases>
        <!-- typeAlias用于配置别名 type属性指定的是实体类全限定类名,alias属性指定别名,当指定了别名就不再区分大小写-->
        <!--<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias> -->
        <!-- 用于指定要配置别名的包,当指定后,该包下的实体类都会注册别名,类名就是别名,不再区分大小写 -->
        <package name="com.entity"/>
    </typeAliases>

    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境 -->
        <environment id="mysql">
            <!-- 配置事务类型 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,也叫连接池,有三个取值 -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,指的是每个dao独立的配置文件 -->
    <mappers>
<!--         <mapper resource="com/dao/IDepartmentDao.xml"/>-->
        <!-- 用于指定dao接口所在的包,当指定完成之后,就不需要再写mapper以及resource或者class -->
        <package name="com.dao"></package>
    </mappers>
</configuration>
SqlMapConfig.xml
# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m


# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m
log4j.properties
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
DaoMapper文件头
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/数据库名
jdbc.username=root
jdbc.password=123456
db.properties
    private InputStream in;
    private SqlSession sqlSession;
    private dao接口类名 dao接口名;

    @Before//用于在测试方法执行前执行
    public void init() throws Exception{
        //1.读取配置文件生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //.2获取SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSession对象
        sqlSession = factory.openSession();
        //4.获取dao的代理对象
        dao接口名 = sqlSession.getMapper(dao接口类名.class);
    }

    @After//用于在测试方法执行后执行
    public void destroy() throws Exception{
        //提交事务
        sqlSession.commit();
        //释放资源
        sqlSession.close();
        in.close();
    }
Test方法init和destroy

 

原文地址:https://www.cnblogs.com/qq2210446939/p/13654208.html