亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mybatis配置之properties和settings標(biāo)簽的用法

 更新時(shí)間:2021年07月14日 08:47:52   作者:匍匐-菜鳥  
這篇文章主要介紹了Mybatis配置之properties和settings標(biāo)簽的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis properties標(biāo)簽和settings標(biāo)簽

本次將講述mybatis的配置,主要的配置是基于mybatis的配置文件來進(jìn)行配置的,其配置文件并不復(fù)雜

如下面的例子:

<?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">
		<!-- <property name="database.driver" value="com.mysql.jdbc.Driver"/>
		 <property name="database.url" value="jdbc:mysql://localhost:3306/chapter4"/> 
			<property name="database.username" value="root"/> 
			<property name="database.password" value="123456"/> -->
	</properties>
	<typeAliases><!-- 別名 -->
		<!-- <typeAlias alias="role" type="com.learn.ssm.chapter4.pojo.Role"/> -->
		<package name="com.learn.ssm.chapter4.pojo" />
	</typeAliases>
	<typeHandlers>
		<!-- <typeHandler jdbcType="VARCHAR" javaType="string" handler="com.learn.ssm.chapter4.typehandler.MyTypeHandler" 
			/> -->
		<package name="com.learn.ssm.chapter4.typehandler" />
 
	</typeHandlers>
	<!-- 數(shù)據(jù)庫環(huán)境 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="com.learn.ssm.chapter4.datasource.DbcpDataSourceFactory">
				<property name="driver" value="${database.driver}" />
				<property name="url" value="${database.url}" />
				<property name="username" value="${database.username}" />
				<property name="password" value="${database.password}" />
			</dataSource>
		</environment>
	</environments>
	
    <!-- 
	<databaseIdProvider type="DB_VENDOR">
		<property name="Oracle" value="oracle" />
		<property name="MySQL" value="mysql" />
		<property name="DB2" value="db2" />
	</databaseIdProvider>
	 -->
	<databaseIdProvider
		type="com.learn.ssm.chapter4.databaseidprovider.MyDatabaseIdProvider">
		<property name="msg" value="自定義DatabaseIdProvider" />
	</databaseIdProvider>
	<mappers>
		<package name="com.learn.ssm.chapter4.mapper" />
	</mappers>
</configuration>

需要注意的是mybatis的配置項(xiàng)不能夠相互顛倒,如果顛倒了他們的順序,那么在mybatis啟動(dòng)階段就會(huì)發(fā)生異常,導(dǎo)致程序無法進(jìn)行下去。

其一般的順序?yàn)椋?/h3>
<?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></properties>
	<settings></settings>
	<typeAliases></typeAliases>
	<typeHandlers></typeHandlers>
	<objectFactory type=""></objectFactory>
	<plugins></plugins>
	<environments default="">
		<environment id="">
			<dataSource type=""></dataSource>
			<transactionManager type=""></transactionManager>
		</environment>
	</environments>
	<databaseIdProvider type=""></databaseIdProvider>
	<mappers></mappers>
</configuration>

1.properties屬性

properties屬性是用來給系統(tǒng)配置一些參數(shù),可以放在xml文件或者是properties文件中,而不是放在java 的編碼中,這樣的好處是方便管理和修改,而不會(huì)引起代碼的重新編譯,一般而言,有以下3種配置方式:

properties子元素:

<property name="database.driver" value="com.mysql.jdbc.Driver"/>
<property name="database.url" value="jdbc:mysql://localhost:3306/chapter4"/> 
<property name="database.username" value="root"/> 
<property name="database.password" value="123456"/>

如上面及格對(duì)數(shù)據(jù)庫連接參數(shù)的設(shè)定,我們需要在property標(biāo)簽內(nèi)部標(biāo)識(shí)屬性名稱和屬性值。這種方式將配置的屬性的名稱和對(duì)應(yīng)的屬性值記錄在xml文件中。同時(shí)也可以采用占位符引用管理,這個(gè)在代碼的編寫中經(jīng)常見到,是一種較為流行的操作方式。

<property name="driver" value="${database.driver}" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />

如上面屬性的賦值方式,采用的占位符引用的方式,將上文中寫好的值通過占位的方式引用過來,這樣寫的話還需要我們?cè)谏厦娴膒roperties標(biāo)簽下面定義properties的子元素,類似于所示的例子一樣。

使用properties文件:

這就需要我們創(chuàng)建一個(gè)properties的文件:

database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/chapter4
database.username=root
database.password=123456

我們想利用這個(gè)文件中所定義的值,則需要在<properties>標(biāo)簽的resource 進(jìn)行賦值,其值為包的路徑,使用方式如下(假設(shè)文件名為jdbc.properties):

<properties resource="jdbc.properties" />

這樣可以將多個(gè)鍵值飯?jiān)谝粋€(gè)properties文件中,方便以后的修改和管理。同時(shí),也可以結(jié)合上面的占位符的方式進(jìn)行傳遞。

使用程序傳遞方式傳遞參數(shù):

某些情況下數(shù)據(jù)庫的用戶密碼數(shù)對(duì)開發(fā)人員和其他人員保密的,運(yùn)維人員為了保密一般的都需要把用戶名和密碼進(jìn)行加密,然后配置到properties文件中,此時(shí)往往需要解密才能到到真實(shí)的用戶名和密碼數(shù)據(jù)庫也不可能使用已經(jīng)加密的字符串去鏈接數(shù)據(jù)庫。所以假設(shè)已經(jīng)有一個(gè)操作解密的工具,我們需要解密人后重置到properties文件中:

public class SqlSessionFactoryUtils { 
	private final static Class<SqlSessionFactoryUtils> LOCK = SqlSessionFactoryUtils.class; 
	private static SqlSessionFactory sqlSessionFactory = null; 
	private SqlSessionFactoryUtils() {
	}
 
	public static SqlSessionFactory getSqlSessionFactory() {
		synchronized (LOCK) {
			if (sqlSessionFactory != null) {
				return sqlSessionFactory;
			}
			String resource = "mybatis-config.xml";
			InputStream inputStream;
			try {
				 inputStream = Resources.getResourceAsStream(resource);
				 sqlSessionFactory = new
				 SqlSessionFactoryBuilder().build(inputStream);
				
				采用程序傳遞加密參數(shù),啟用它之前,修改用戶密碼為密文..
				InputStream in = Resources.getResourceAsStream("jdbc.properties");
				Properties props = new Properties();
				props.load(in);
				String username = props.getProperty("database.username");
				String password = props.getProperty("database.password");
				// 解密用戶和密碼,并在屬性中重置
				props.put("database.username", CodeUtils.decode(username));
				props.put("database.password", CodeUtils.decode(password));
				inputStream = Resources.getResourceAsStream(resource);
				// 使用程序傳遞的方式覆蓋原有的properties屬性參數(shù)
				sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, props);
			} catch (IOException e) {
				e.printStackTrace();
				return null;
			}
			return sqlSessionFactory;
		}
	}
 
	public static SqlSession openSqlSession() {
		if (sqlSessionFactory == null) {
			getSqlSessionFactory();
		}
		return sqlSessionFactory.openSession();
	}
 
	public static void main(String[] args) {
		System.out.println(CodeUtils.encode("root"));
		System.out.println(CodeUtils.encode("123456"));
	}
 
	static class CodeUtils {
		private static String encode(String src) {
			BASE64Encoder encoder = new BASE64Encoder();
			return encoder.encode(src.getBytes());
		}
 
		private static String decode(String des) {
			BASE64Decoder decoder = new BASE64Decoder();
			try {
				return new String(decoder.decodeBuffer(des));
			} catch (IOException e) {
				e.printStackTrace();
			}
			return null;
		}
	}
}

這里面制作了一個(gè)基于程序傳遞的方式傳遞參數(shù)的例子,首先使用Resource對(duì)象讀取一個(gè)jdbc.properties文件,然后獲取原來的配置的用戶名和密碼,并進(jìn)行解密,重置,最后使用SqlSessionFactoryBuilder類的biuld方法傳遞properties中的參數(shù)完成覆蓋原來的密文,及解決了安全問題,又能夠安全的去連接數(shù)據(jù)庫。

2.Settings標(biāo)簽設(shè)置

這個(gè)是mybatis中最為復(fù)雜的配置,這個(gè)標(biāo)簽中的設(shè)置能夠深刻的影響到底層的運(yùn)行,但是大部分情況下使用默認(rèn)的配置就可以運(yùn)行,不需要去配置這個(gè)屬性,多多數(shù)情況下修改一些常用的規(guī)則就可以了,比如自動(dòng)映射,駝峰命名映射,級(jí)聯(lián)規(guī)則,是否開啟緩存,執(zhí)行器類型等等。

<!-- settings是 MyBatis 中極為重要的調(diào)整設(shè)置,它們會(huì)改變 MyBatis 的運(yùn)行時(shí)行為。 -->  
    <settings>  
        <!-- 該配置影響的所有映射器中配置的緩存的全局開關(guān)。默認(rèn)值true -->  
      <setting name="cacheEnabled" value="true"/>  
      <!--延遲加載的全局開關(guān)。當(dāng)開啟時(shí),所有關(guān)聯(lián)對(duì)象都會(huì)延遲加載。 特定關(guān)聯(lián)關(guān)系中可通過設(shè)置fetchType屬性來覆蓋該項(xiàng)的開關(guān)狀態(tài)。默認(rèn)值false  -->  
      <setting name="lazyLoadingEnabled" value="true"/>  
        <!-- 是否允許單一語句返回多結(jié)果集(需要兼容驅(qū)動(dòng))。 默認(rèn)值true -->  
      <setting name="multipleResultSetsEnabled" value="true"/>  
      <!-- 使用列標(biāo)簽代替列名。不同的驅(qū)動(dòng)在這方面會(huì)有不同的表現(xiàn), 具體可參考相關(guān)驅(qū)動(dòng)文檔或通過測(cè)試這兩種不同的模式來觀察所用驅(qū)動(dòng)的結(jié)果。默認(rèn)值true -->  
      <setting name="useColumnLabel" value="true"/>  
      <!-- 允許 JDBC 支持自動(dòng)生成主鍵,需要驅(qū)動(dòng)兼容。 如果設(shè)置為 true 則這個(gè)設(shè)置強(qiáng)制使用自動(dòng)生成主鍵,盡管一些驅(qū)動(dòng)不能兼容但仍可正常工作(比如 Derby)。 默認(rèn)值false  -->  
      <setting name="useGeneratedKeys" value="false"/>  
     <!--  指定 MyBatis 應(yīng)如何自動(dòng)映射列到字段或?qū)傩浴?NONE 表示取消自動(dòng)映射;PARTIAL 只會(huì)自動(dòng)映射沒有定義嵌套結(jié)果集映射的結(jié)果集。 FULL 會(huì)自動(dòng)映射任意復(fù)雜的結(jié)果集(無論是否嵌套)。 -->   
     <!-- 默認(rèn)值PARTIAL -->  
      <setting name="autoMappingBehavior" value="PARTIAL"/>  
        
      <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>  
     <!--  配置默認(rèn)的執(zhí)行器。SIMPLE 就是普通的執(zhí)行器;REUSE 執(zhí)行器會(huì)重用預(yù)處理語句(prepared statements); BATCH 執(zhí)行器將重用語句并執(zhí)行批量更新。默認(rèn)SIMPLE  -->  
      <setting name="defaultExecutorType" value="SIMPLE"/>  
      <!-- 設(shè)置超時(shí)時(shí)間,它決定驅(qū)動(dòng)等待數(shù)據(jù)庫響應(yīng)的秒數(shù)。 -->  
      <setting name="defaultStatementTimeout" value="25"/>  
        
      <setting name="defaultFetchSize" value="100"/>  
      <!-- 允許在嵌套語句中使用分頁(RowBounds)默認(rèn)值False -->  
      <setting name="safeRowBoundsEnabled" value="false"/>  
      <!-- 是否開啟自動(dòng)駝峰命名規(guī)則(camel case)映射,即從經(jīng)典數(shù)據(jù)庫列名 A_COLUMN 到經(jīng)典 Java 屬性名 aColumn 的類似映射。  默認(rèn)false -->  
      <setting name="mapUnderscoreToCamelCase" value="false"/>  
      <!-- MyBatis 利用本地緩存機(jī)制(Local Cache)防止循環(huán)引用(circular references)和加速重復(fù)嵌套查詢。  
             默認(rèn)值為 SESSION,這種情況下會(huì)緩存一個(gè)會(huì)話中執(zhí)行的所有查詢。  
            若設(shè)置值為 STATEMENT,本地會(huì)話僅用在語句執(zhí)行上,對(duì)相同 SqlSession 的不同調(diào)用將不會(huì)共享數(shù)據(jù)。  -->  
      <setting name="localCacheScope" value="SESSION"/>  
      <!-- 當(dāng)沒有為參數(shù)提供特定的 JDBC 類型時(shí),為空值指定 JDBC 類型。 某些驅(qū)動(dòng)需要指定列的 JDBC 類型,多數(shù)情況直接用一般類型即可,比如 NULL、VARCHAR 或 OTHER。  -->  
      <setting name="jdbcTypeForNull" value="OTHER"/>  
    <!--   指定哪個(gè)對(duì)象的方法觸發(fā)一次延遲加載。  -->  
      <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>  
    </settings>  

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java特性隊(duì)列和棧的堵塞原理解析

    Java特性隊(duì)列和棧的堵塞原理解析

    這篇文章主要介紹了Java特性隊(duì)列和棧的堵塞原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • java獲取當(dāng)前時(shí)間并格式化代碼實(shí)例

    java獲取當(dāng)前時(shí)間并格式化代碼實(shí)例

    這篇文章主要介紹了java獲取當(dāng)前時(shí)間并格式化代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • springBoot 與neo4j的簡(jiǎn)單整合示例

    springBoot 與neo4j的簡(jiǎn)單整合示例

    這篇文章主要介紹了springBoot 與neo4j的簡(jiǎn)單整合示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • SpringBoot配置及使用Schedule過程解析

    SpringBoot配置及使用Schedule過程解析

    這篇文章主要介紹了SpringBoot配置及使用Schedule過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Spring Framework常用面試題及答案匯總

    Spring Framework常用面試題及答案匯總

    這篇文章主要介紹了Spring Framework常用面試題及答案匯總,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java實(shí)現(xiàn)udp通訊的代碼

    java實(shí)現(xiàn)udp通訊的代碼

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)udp通訊的代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Java讀取Properties文件的七種方法的總結(jié)

    Java讀取Properties文件的七種方法的總結(jié)

    這篇文章主要介紹了Java讀取Properties文件的七種方法的總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 淺析Java中的set集合類型及其接口的用法

    淺析Java中的set集合類型及其接口的用法

    Java本身對(duì)set集合提供了一個(gè)接口,一般的實(shí)現(xiàn)類是HastSet和 TreeSet,這里我們先來簡(jiǎn)要淺析Java中的set集合類型及其接口的用法:
    2016-05-05
  • idea打包java程序(包含依賴的所有jar包)

    idea打包java程序(包含依賴的所有jar包)

    這篇文章主要介紹了idea打包java程序(包含依賴的所有jar包),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • spring boot使用properties定義短信模板的方法教程

    spring boot使用properties定義短信模板的方法教程

    這篇文章主要給大家介紹了關(guān)于spring boot使用properties定義短信模板的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01

最新評(píng)論