Mybatis需要配置的文件

1 pom.xml中需要进行如下配置

<!-- mybatis begin -->  
<dependency>    
 <groupId>org.mybatis</groupId>  
 <artifactId>mybatis</artifactId>  
 <version>3.4.1</version>  
</dependency>  
<!-- mybatis end -->  
<!-- mysql begin -->  
<dependency>  
 <groupId>mysql</groupId>  
 <artifactId>mysql-connector-java</artifactId>  
 <version>8.0.16</version>  
</dependency>  
<!-- mysql end -->  
<!-- log4j begin -->  
<dependency>  
 <groupId>log4j</groupId>  
 <artifactId>log4j</artifactId>  
 <version>1.2.17</version>  
</dependency>
<!-- log4j end -->  

2 构建 mybatis-config.xml 文件,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>
<configuration>
  <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.xml,是3中需要增加的文件-->
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

基础的mybatis-config.xml 文件构建。

3 构建 EdocEntryMapper.xml 文件(此文件和mybatis-config.xml中配置的要一致),SQL语句的映射文件

<?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">
<!--
    SQL映射文件:
        namespace:名称空间(简单的理解为前缀)
            1,不面向接口开发,可以随便定义
            2,面试接口开发,不可以随便定义,必须是某个接口的全类名
-->
<!--<mapper namespace="wusuowei">-->
<mapper namespace="com.kgc.mybatis.mapper.EdocEntryMapper">
    <!--
      select标签:定义要执行的查询语句-查询语句只能写在该标签内
        id:当前SQL语句的唯一标识,要跟接口中的某个方法对象,同一个SQL映射文件中,不可以出现重复的id值
        resultType:查询结果需要映射的目标实体类
        #{}:根据参数名获取参数,如果只有一个参数,参数名可以随便定义
    -->
    <select id="selectEdocEntryById" resultType="com.kgc.mybatis.beans.EdocEntry">
        select * from edoc_entry where id = #{abc}
    </select>
</mapper>

4 构建与 EdocEntryMapper.xml 对应的接口 EdocEntryMapper

package com.kgc.mybatis.mapper;
import com.kgc.mybatis.beans.EdocEntry;

public interface EdocEntryMapper {
  	// 此方法名要与Mapper.xml中的id映射一致
    EdocEntry selectEdocEntryById(Integer id);
}

5 构建 jdbc.propweties 文件,jdbc配置属性文件(mysql-connector-java 6 以后的特性,多了一个时区serverTimezone)

driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/edocdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
user=root
password=root

6 不使用spring构建mybatis时,加载mybatis

package com.kgc.mybatis;

import com.kgc.mybatis.beans.EdocEntry;
import com.kgc.mybatis.mapper.EdocEntryMapper;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class TestMybatis {
    @Test
    public void testSqlSessionFactory() throws IOException {
        // 构建 SqlSessionFactory 对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        System.out.println(sqlSessionFactory);

        // 创建SqlSession对象-提供了在数据库执行 SQL 命令所需的所有方法
        SqlSession session = sqlSessionFactory.openSession();
        System.out.println(session);

        // 执行sql语句,查询结果
        // statement Unique identifier matching the statement to use. 要执行的SQL语句的唯一标识
        // parameter A parameter object to pass to the statement. 执行当前SQL需要传递的参数
        // EdocEntry edocEntry = session.selectOne("wusuowei.selectEdocEntry", 2);
        // System.out.println(edocEntry);

        // 面向接口开发 - getMapper方法:返回的就是当前接口的一个代理实现类(自动根据接口的方法找到对应的sql语句执行)
        EdocEntryMapper edocEntryMapper1 = session.getMapper(EdocEntryMapper.class);
        EdocEntry edocEntry = edocEntryMapper1.selectEdocEntryById(3);
        System.out.println(edocEntry);
    }
}

小结:

两个重要的配置文件:

   1)mybatis-config.xml: Mybatis全局核心配置文件,数据库连接信息,SQL映射文件的加载等操作
   2)EdocEntryMapper.xml: SQL语句的映射文件,包括了数据库增删改查等业务操作语句

两个重要的对象:

   1)SqlSessionFactory:SqlSession对象的工厂类,用于获取SqlSession对象
   2)SqlSession:Java程序和数据库连接会话对象,包含执行SQL命令的所有方法

两个重要的绑定-面向接口开发:

   1)mapper接口与SQL映射文件绑定
   		mapper接口与mapper.xml中mapper标签中的spacename属性值一致,是mapper接口的全类名
   2)mapper接口中方法与SQL映射文件中的语句绑定
   		mapper接口中的方法名与mapper.xml中的mapper标签字标签中id属性值一致,都是方法名

补充:

如果需要显示查询的SQL语句,需要加入log4j.xml。(强有力的日志增强包)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
   <param name="Encoding" value="UTF-8" />
   <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n" />
   </layout>
 </appender>
 <logger name="java.sql">
   <level value="debug" />
 </logger>
 <logger name="org.apache.ibatis">
   <level value="info" />
 </logger>
 <root>
   <level value="debug" />
   <appender-ref ref="STDOUT" />
 </root>
</log4j:configuration>

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>
    <!--  1 配置properties标签中的resources属性,配置完成后将高于内部的属性配置 -->
    <!--<properties resource="jdbc.properties">
		下面是properties
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/edocdb?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false"/>
        <property name="user" value="root"/>
        <property name="password" value="123"/>
    </properties>-->
    <properties resource="jdbc.properties"/>
    
    <!--  2 核心配置settings,mybatis官网中有详细说明-->
  	<!-- https://mybatis.org/mybatis-3/zh/getting-started.html -->
    <settings>
        <!--  是否开启下划线到驼峰命名法的自动映射,默认是关闭的,值为false  -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--  3 别名处理typeAliases  -->
    <typeAliases>
        <!-- 单个别名处理,设置配对好后,在映射xml中不需要在写全类名 -->
        <!--  <typeAlias type="com.kgc.mybatis.beans.EdocEntry" alias="edocEntry"/>-->
      	
        <!-- 批量取别名:使用package属性直接指定实体的包名,会将该包下及其子包中所有的类名自动取别名,默认值是类名,不区分大小写;
            建议:为了xml文件方便阅读,不要使用批量取别名,尽量使用全类名,因为通过SQL映射之后,无法得知别名类的目标类型-->
        <package name="com.kgc.mybatis.beans"/>
    </typeAliases>

    <!-- 4 环境配置 environments
        可以配置多个环境,但是SqlSessionFactory只能指定一种环境类型
        通过emviroments的default属性来指定选择哪一种环境
    -->
    <environments default="development_dev">
        <environment id="development_dev">
            <!-- 事务管理,默认用的jdbc的事务管理,后续事务管理可以交给spring处理 -->
            <transactionManager type="JDBC"/>
            <!-- 数据源配置,默认使用的是mybatis自带的数据源,后续数据源管理可以交给spring处理,比如专业:druid,c3p0,dbcp... -->
            <dataSource type="POOLED">
                <property name="driver" value="${driverClass}"/>
                <property name="url" value="${jdbcUrl}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

        <environment id="development_test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClass}"/>
                <property name="url" value="${jdbcUrl}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>

        <environment id="development_prod">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClass}"/>
                <property name="url" value="${jdbcUrl}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 5 SQL映射文件配置 mappers -->
    <mappers>
        <!-- 单个SQL映射文件配置,注意多级目录用 / 不是 . -->
        <!-- <mapper resource="EdocEntryMapper.xml"/> -->
        <!-- 批量加载SQL映射文件 ,指定的是mapper接口所在的父包全路径
            注意:此种方式必须保证接口和SQL映射文件同路径,且必须同名,后续可以交个spring,进行自定义映射路径
        -->
        <package name="com.kgc.mybatis.mapper"/>
    </mappers>
</configuration>

Q.E.D.