• Mybatis笔记五:Mybatis的全局配置文件Configuration.xml讲解


    从 XML 中构建 SqlSessionFactory

        每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心。SqlSessionFactory实例可以由SqlSessionFactoryBuild获得,而SqlSessionFactoryBuild可以以一个xml配置文件(Configuration.xml)构建出SqlSessionFactory实例。

    Mybatis全局配置文件(Configuration.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">
    <configuration>
        <!-- 配置数据源信息 -->
        <properties resource="jdbc.properties"/>
        <!-- 
            类型别名只是Java类型的别名,它可以有效减少Xml配置文件中映射查询语句里
            返回类型(resultType)为自定义实体类的完全限定名冗余 
        -->
        <typeAliases>
            <typeAlias alias="narCode" type="com.test.model.NarCode" />
        </typeAliases>
        <!-- 
             获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)
         -->
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${datasource.driverClassName}" />
                    <property name="url" value="${datasource.url}" />
                    <property name="username" value="${datasource.username}" />
                    <property name="password" value="${datasource.password}" />
                </dataSource>
            </environment>
        </environments>
        
        <!-- 程序中所用到sql映射文件都在这里列出,这些映射sql都被Mybatis管理 -->
        <mappers>
            <mapper resource="com/test/xml/NarCodeMapper.xml" />
        </mappers>
    </configuration>

    xml映射文件[已映射的 SQL 语句](NarCodeMapper.xml):

    <?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映射文件中,Mybatis中namespace终于派上用场,它使得映射文件和接口之间的绑定变的非常自然。
         在iBatis中namespace不是必须的
     -->
    <mapper namespace="com.test.dao.NarCodeMapper">
        
        <resultMap id="BaseResultMap" type="narCode">
            <id column="id" property="id" jdbcType="VARCHAR" />
            <result column="cnt" property="cnt" jdbcType="VARCHAR" />
            <result column="parentid" property="parentid" jdbcType="VARCHAR" />
            <result column="dlevel" property="dlevel" jdbcType="VARCHAR" />
        </resultMap>
        <!-- 根据id来查询 -->
        <select id="getNarCode" parameterType="java.lang.String"
            resultType="narCode">
            select a.id,a.cnt,a.parentid,a.dlevel,a.rowid from nar_code a
            where a.id = #{id,jdbcType=VARCHAR}
        </select>
    </mapper>

    映射器类:

    package com.test.dao;
    
    import com.test.model.NarCode;
    
    public interface NarCodeMapper {
        public NarCode getNarCode(String id);
    }

    测试示例一:

    import java.io.IOException;
    import java.io.InputStream;
    
    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.Before;
    import org.junit.Test;
    
    import com.test.model.NarCode;
    
    public class Demo {
        
        SqlSessionFactory sqlSessionFactory;
    
        @Before
        public void testBefore() {
            String resource = "Mybatis-Configuration.xml";
            InputStream inputStream;
            try {
    //MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件 inputStream
    = Resources.getResourceAsStream(resource);
    //SqlSessionFactoryBuild来创建一个SqlSessionFactory实例 sqlSessionFactory
    = new SqlSessionFactoryBuilder() .build(inputStream); } catch (IOException e) { e.printStackTrace(); } } @Test public void tes1() {
    /**
    从SqlSessionFactory实例获得 SqlSession 实例。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。
    你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
    **/ SqlSession sqlSession
    = sqlSessionFactory.openSession(); try { NarCode narCode = sqlSession.selectOne( "com.test.dao.NarCodeMapper.getNarCode", "110000"); System.out.println(narCode); } finally { sqlSession.close(); } } }

       这种方式能够正常工作,并且对于使用旧版本 MyBatis 的用户来说也比较熟悉,不过现在有了一种更直白的方式。使用对于给定语句能够合理描述参数和返回值的接口(比如说NarCodeMapper.class),你现在不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。

    测试示例二:

    import java.io.IOException;
    import java.io.InputStream;
    
    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.Before;
    import org.junit.Test;
    
    import com.test.dao.NarCodeMapper;
    import com.test.model.NarCode;
    
    public class Demo {
        
        SqlSessionFactory sqlSessionFactory;
    
        @Before
        public void testBefore() {
            String resource = "Mybatis-Configuration.xml";
            InputStream inputStream;
            try {
                inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder()
                        .build(inputStream);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void tes1() {
            SqlSession sqlSession = sqlSessionFactory.openSession();
            try {
                NarCodeMapper narCodeMapper=sqlSession.getMapper(NarCodeMapper.class);
                NarCode narCode1=narCodeMapper.getNarCode("110000");
                System.out.println(narCode1);
            } finally {
                sqlSession.close();
            }
    
        }
    
    }
  • 相关阅读:
    使用ConcurrentHashMap需要知道的细节
    并查集(Union-Find)
    LeetCode2
    补充之前博客的几种排序--希尔排序、堆排序、归并排序
    左式二叉堆
    优先队列的一种实现--堆ADT
    开放地址法散列表ADT
    分离链表法散列ADT
    AVL树
    二叉查找树ADT--C语言描述
  • 原文地址:https://www.cnblogs.com/sishang/p/6557103.html
Copyright © 2020-2023  润新知