zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    Ruby学习笔记5: 动态web app的建立 (2)
    Ruby学习笔记4: 动态web app的建立
    Ruby学习笔记3:Rendering(渲染)和 Redirect(重定向)
    对互联网垂直社交产品的分析
    测试 | 代码覆盖测试工具 | Eclemma
    Jquery | 基础 | 事件的链式写法
    Jquery | 基础 | html()
    Serervlet | 慕课课程实战 | 编写登录逻辑
    Jquery | 外部插入节点
    Jquery | 基础 | .hover()
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/13654208.html
Copyright © 2011-2022 走看看