Java MyBatis 核心配置文件mybatis-config.xml中的標籤 及 接口式編程

十年河東,十年河西,莫欺少年窮

學無止境,精益求精

MyBatis標籤如下:

 Mybatis 標籤在配置文件中要按照上圖順序進行配置

如果你在Idea中將順序配錯了,Idea會有一個提示,如下:

 1、properties

properties 用於引入外部 .properties文件,最常用的是引入數據庫配置文件,常用語法爲:

    <!--引入外部配置文件  -->
    <properties resource="db.properties"/>

在mybatis-config.xml同錄下下創建db.properties,如下

Jbdc.driver = com.mysql.cj.jdbc.Driver
Jbdc.url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
Jbdc.username = root
Jbdc.password = chen1234567890

2、settings

settings 用於配置MyBatis緩存、懶加載等,常用配置如下:

    <settings>
        <!--開啓全局緩存 默認true-->
        <setting name="cacheEnabled" value="true"/>
        <!--開啓全局懶加載 默認false-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--開啓關聯屬性懶加載 默認false-->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!--全局開啓駝峯映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

3、typeAliases

typeAliases 用於爲映射文件中的 resultType 設置別名。

例如下面這個映射文件

<?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">

<!--namespace=綁定一個指定的Dao/Mapper接口-->

<mapper namespace="com.one5a.model.User">
    <select id="getUserList" resultType="com.one5a.model.User">
    select * from users
  </select>
    <select id="getUserbyId" resultType="com.one5a.model.User" parameterType="int">
    select * from users where uid=#{id}
  </select>
</mapper>
View Code

resultType="com.one5a.model.User" 比較長,用起來不方便,可以爲它設置一個別名,這樣寫起來方便快捷

    <typeAliases>
        <typeAlias alias="User" type="com.one5a.model.User"></typeAlias>
    </typeAliases>

 上述這種寫法簡潔了配置,但是如果一個包下面有100個實體,我們就需要配置100次,因此引入包掃描配置法

包掃描配置

    <typeAliases>
        <!--  <typeAlias alias="User" type="com.one5a.model.User"></typeAlias> -->
        <package name="com.one5a.model"/>
    </typeAliases>

com.one5a.model 包下的實體默認均使用實體名稱【不區分大小寫】。

 

例如,count(*) 返回值爲int ,因此resultType 可以使用默認別名 int

    <select id="getTotal" resultType="int" parameterType="int">
    select  count(*) from users where uid=#{id}
  </select>
@Test
    public  void  getTotal() throws IOException {
        String resource = "mybatis-config.xml";
        //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
        //InputStream is = Resources.getResourceAsStream(resource);
        //InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);

        InputStream is =Resources.getResourceAsStream(resource);
        //構建sqlSession的工廠  線程安全  建議使用單列模式
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //絕對不能將它作爲靜態對象使用,不可共享
        SqlSession session = sessionFactory.openSession();
        /**
         * 映射sql的標識字符串,
         * com.oumyye.mapping.UserMapping是userMapper.xml文件中mapper標籤的namespace屬性的值,
         * getUser是select標籤的id屬性值,通過select標籤的id屬性值就可以找到要執行的SQL
         */
        String statement = "com.one5a.model.User.getTotal";//映射sql的標識字符串
        //執行查詢返回一個唯一user對象的sql
        Integer count = session.selectOne(statement,1);
        System.out.println(count);

    }
View Code

environments

environments用於配置運行環境

在數據庫配置信息中增加生產環境用戶名和密碼

Jbdc.driver = com.mysql.cj.jdbc.Driver
Jbdc.url = jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
Jbdc.username = root
Jbdc.password = chen1234
 
prd.username = root
prd.password = chen1234
View Code

 

<environments default="prd">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${Jbdc.driver}"/>
                <property name="url" value="${Jbdc.url}"/>
                <property name="username" value="${Jbdc.username}"/>
                <property name="password" value="${Jbdc.password}"/>
            </dataSource>
        </environment>
        <environment id="prd">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${Jbdc.driver}"/>
                <property name="url" value="${Jbdc.url}"/>
                <property name="username" value="${prd.username}"/>
                <property name="password" value="${prd.password}"/>
            </dataSource>
        </environment>
    </environments>

default = “prd” 使用的是生產環境,dataSource type=“POOLED”,使用默認數據庫連接池的模式

Mappers 

    <!-- 註冊UserMapper.xml  -->
    <mappers>
        <mapper resource="Mapper/UserMapper.xml"/>
    </mappers>

最後貼出Mybatis核心配置文件 和 用於映射文件

mybatis-config.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="db.properties"/>
    <settings>
        <!--開啓全局緩存 默認true-->
        <setting name="cacheEnabled" value="true"/>
        <!--開啓全局懶加載 默認false-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!--開啓關聯屬性懶加載 默認false-->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!--全局開啓駝峯映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <!--別名方式-->
        <!--  <typeAlias alias="User" type="com.one5a.model.User"></typeAlias> -->
        <!--包掃描方式-->
        <package name="com.one5a.model"/>
    </typeAliases>
    <environments default="prd">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${Jbdc.driver}"/>
                <property name="url" value="${Jbdc.url}"/>
                <property name="username" value="${Jbdc.username}"/>
                <property name="password" value="${Jbdc.password}"/>
            </dataSource>
        </environment>
        <environment id="prd">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${Jbdc.driver}"/>
                <property name="url" value="${Jbdc.url}"/>
                <property name="username" value="${prd.username}"/>
                <property name="password" value="${prd.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 註冊UserMapper.xml  -->
    <mappers>
        <mapper resource="Mapper/UserMapper.xml"/>
    </mappers>
</configuration>
View Code

UserMapper.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">

<!--namespace=--> 
<mapper namespace="com.one5a.model.User">
    <select id="getUserList" resultType="User">
    select * from users
  </select>
    <select id="getUserbyId" resultType="User" parameterType="int">
    select * from users where uid=#{id}
  </select>

    <select id="getTotal" resultType="int" parameterType="int">
    select  count(*) from users where uid=#{id}
  </select>
</mapper>
View Code

UserMapper 屬於映射文件,普通模式下,UserMapper文件的命名空間值和【實體所在的包+實體名稱】保持一致,接口編程情況下,和 【接口所在的包+接口名稱】保持一致。

Mybatis接口式編程

新建接口 com.one5a.Inter.IUser

 

 接口必須實現UserMapper中定義的所有方法,如下

package com.one5a.Inter;

import com.one5a.model.User;

import java.util.List;

public interface IUser {
    List<User> getUserList();
    User getUserbyId(Integer id);
    Integer getTotal(Integer id);
}

修改UserMapper的命名空間爲【接口所在的包+接口名稱】,即:com.one5a.Inter.IUser

 

 光標放在接口上,Alt+Insert 快捷鍵,生成測試類

package com.one5a.Inter;


import com.one5a.model.User;
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 org.junit.runner.RunWith;

import java.io.InputStream;
import java.util.List;

import static org.junit.Assert.*;

public class UserTest {

    IUser user=null;
    @Before
    public void setUp() throws Exception {
        String resource = "mybatis-config.xml";
        //使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
        //InputStream is = Resources.getResourceAsStream(resource);
        //InputStream is = Tests.class.getClassLoader().getResourceAsStream(resource);

        InputStream is = Resources.getResourceAsStream(resource);
        //構建sqlSession的工廠  線程安全  建議使用單列模式
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
        //絕對不能將它作爲靜態對象使用,不可共享
        SqlSession session = sessionFactory.openSession();
        //創建接口動態代理對象
        user=session.getMapper(IUser.class);
    }

    @Test
    public void getUserList() {
       List<User>  userLst=user.getUserList();
        System.out.println(userLst);
    }

    @Test
    public void getUserbyId() {
        User  userLst=user.getUserbyId(1);
        System.out.println(userLst);
    }

    @Test
    public void getTotal() {
        Integer  cnt  =user.getTotal(2);
        System.out.println(cnt);
    }
}
View Code

注意代碼中的動態生成代理對象,這句話爲接口編程的核心。

@天才臥龍

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章