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();
        }

    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM