欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mybatis-config詳細(xì)配置說(shuō)明

<?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>
	<!-- 屬性配置元素可以將配置值具體化到一個(gè)屬性文件中,并且使用配置文件的key作為占位符
		application.properties
		jdbc.driverClassName=com.MySQL.jdbc.Driver
		jdbc.url=jdbc:mysql://localhost:3306/mybatisdemo
		jdbc.username=root
		jdbc.password=admin
		在mybatis-config.xml中可以使用application.properties文件中定義的占位符
		當(dāng)然也可以直接使用properties來(lái)設(shè)置值
	 -->
	<properties resource="application.properties">
		<property name="username" value="db_user" />
		<property name="password" value="verysecurepwd" />
	</properties>
	<!-- 全局設(shè)置settings -->
	<settings>
		<setting name="cacheEnabled" value="true" />
		<setting name="lazyLoadingEnabled" value="true" />
		<setting name="multipleResultSetsEnabled" value="true" />
		<setting name="useColumnLabel" value="true" />
		<setting name="useGeneratedKeys" value="false" />
		<setting name="autoMappingBehavior" value="PARTIAL" />
		<setting name="defaultExecutorType" value="SIMPLE" />
		<setting name="defaultStatementTimeout" value="25000" />
		<setting name="safeRowBoundsEnabled" value="false" />
		<setting name="mapUnderscoreToCamelCase" value="false" /> 
		<setting name="localCacheScope" value="SESSION" />
		<setting name="jdbcTypeForNull" value="OTHER" />
		<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode ,toString" />
	</settings>
	<!-- 類(lèi)型別名
		主要是為了簡(jiǎn)化在mapper文件中paramerType和resultType對(duì)應(yīng)的類(lèi)全限定名
	 -->
	<typeAliases>
		<typeAlias alias="Tutor" type="com.mybatis3.domain.Tutor" />
		<!-- 可以提供需要取別名的類(lèi)所在的包,mybatis會(huì)自動(dòng)掃描包內(nèi)的javaBean,然后分別為每個(gè)javaBean定義一個(gè)小寫(xiě)字母開(kāi)頭的
			 例如這個(gè)包下有一個(gè)Student,那么別名為:student
			 除此之外:@Alias("StudentAlias")
				   public class Student{
				   		...
				   }
			@Alias 注解將會(huì)覆蓋配置文件中的<typeAliases>定義
		-->
		<package name="com.mybatis3.domain" />
	</typeAliases>
	<!-- 
		類(lèi)型句柄,類(lèi)型處理器
		當(dāng)mybatis執(zhí)行一個(gè)INSERT操作的時(shí)候,匯創(chuàng)建一個(gè)PreparedStatement對(duì)象,并且執(zhí)行一系列操作(操作下面詳細(xì)說(shuō))
		這個(gè)過(guò)程中有一個(gè)setXXX()方式為占位符設(shè)置值的過(guò)程,xxx可以是Int,String,Date的任何一種類(lèi)型,
		那么mybatis是依據(jù)什么來(lái)判斷該使用setInt()還是setString()呢?其實(shí) MyBatis 是通過(guò)使用類(lèi)型處理器(type handlers)來(lái)決定這么做的。
		MyBatis 對(duì)于以下的類(lèi)型使用內(nèi)建的類(lèi)型處理器:所有的基本數(shù)據(jù)類(lèi)型、基本類(lèi)型的包裹類(lèi)型、byte[] 、
		java.util.Date、java.sql.Date、java,sql.Time、java.sql.Timestamp、java 枚舉類(lèi)型等。所以當(dāng) MyBatis 發(fā)現(xiàn)
		屬性的類(lèi)型屬于上述類(lèi)型,他會(huì)使用對(duì)應(yīng)的類(lèi)型處理器將值設(shè)置到 PreparedStatement 中,同樣地,當(dāng)從 SQL 結(jié)果集構(gòu)
		建 JavaBean 時(shí),也有類(lèi)似的過(guò)程。
	 -->
	<typeHandlers>
		<typeHandler handler="com.mybatis3.typehandlers. PhoneTypeHandler" />
		<package name="com.mybatis3.typehandlers" />
	</typeHandlers>
	<!-- 數(shù)據(jù)庫(kù)連接環(huán)境配置-->
	<environments default="development">
		<!-- environment:
		mybatis可以有多個(gè)dataScource環(huán)境,如DEV(開(kāi)發(fā)),TEST(測(cè)試),
		可以通過(guò)默認(rèn)的設(shè)置environment值來(lái)設(shè)定想要的environment  id。
		如果一個(gè)應(yīng)用需要連接多個(gè)數(shù)據(jù)庫(kù),需要將每一個(gè)數(shù)據(jù)庫(kù)設(shè)置成一個(gè)單獨(dú)的環(huán)境,
		并且為每一個(gè)數(shù)據(jù)庫(kù)設(shè)置一個(gè)SqlSessionFactory -->
		<environment id="development">
			<!-- 事務(wù)管理器
				type1:JDBC:mybatis內(nèi)部會(huì)使用JdbcTransactionFactory來(lái)創(chuàng)建TransectionManager。
					       例如,部署到tomcat的應(yīng)用程序,需要應(yīng)用程序自己來(lái)管理程序
				type2:MANAGED(托管,應(yīng)用本身不去管理實(shí)務(wù),交給所在服務(wù)器來(lái)管理):
					  mybatis內(nèi)部使用ManagedTransactionFactory來(lái)創(chuàng)建事務(wù)管理其TransactionManager
					       例如:當(dāng)一個(gè) JavaEE的應(yīng)用程序部署在類(lèi)似 JBoss, WebLogic,GlassFish 應(yīng)用服務(wù)器上時(shí),
					       它們會(huì)使用 EJB 進(jìn)行應(yīng)用服務(wù)器的事務(wù)管理能力。在這些管理環(huán)境中,你可以使用 MANAGED 事務(wù)管理器。
			 -->
			<transactionManager type="JDBC" />
			<!-- 數(shù)據(jù)源dataSource
				type1:UNPOOLED:會(huì)為每一個(gè)數(shù)據(jù)庫(kù)操作創(chuàng)建一個(gè)新的鏈接,并關(guān)閉它。適合于小數(shù)據(jù)小并發(fā)的情況
				type2:POOLED:會(huì)穿件一個(gè)數(shù)據(jù)庫(kù)連接池,開(kāi)發(fā)和測(cè)試階段常用模式
				type3:JNDI:從在服務(wù)器上配置好的JNDI數(shù)據(jù)源dataSource獲取數(shù)據(jù)庫(kù)連接,在生產(chǎn)環(huán)境,優(yōu)先考慮
			 -->
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
		<environment id="production">
			<transactionManager type="MANAGED" />
			<dataSource type="JNDI">
				<property name="data_source" value="java:comp/jdbc/MyBatisDemoDS" />
			</dataSource>
		</environment>
	</environments>
	<!-- mapper文件映射 -->
	<mappers>
		<mapper resource="com/mybatis3/mappers/StudentMapper.xml" /> 
		<mapper url="file:///D:/mybatisdemo/mappers/TutorMapper.xml" />
		<mapper class="com.mybatis3.mappers.TutorMapper" />
	</mappers>
	<!-- 
		附:
		1、mybatis執(zhí)行一條INSERT語(yǔ)句的過(guò)程
			1)創(chuàng)建一個(gè)有占位符的 PreparedStatement 接口,如下:
			Java Code 
			PreparedStatement pstmt = connection.prepareStatement
			("INSERT INTO STUDENTS(STUD_ID,NAME,EMAIL,DOB) VALUES(?,?,?,?)");
			2)檢查 Student 對(duì)象的屬性 studId 的類(lèi)型,然后使用合適 setXXX 方法去設(shè)置參數(shù)值。這里 studId 是 integer
			類(lèi)型,所以會(huì)使用 setInt()方法:
			Java Code 
			pstmt.setInt(1,student.getStudId());
			3)類(lèi)似地,對(duì)于 name 和 email 屬性都是 String 類(lèi)型,MyBatis 使用 setString()方法設(shè)置參數(shù)。
			Java Code
			pstmt.setString(2, student.getName());
			pstmt.setString(3, student.getEmail());
			4)至于 dob 屬性, MyBatis 會(huì)使用 setDate() 方法設(shè)置 dob 處占位符位置的值。
			5)MyBaits 會(huì)將 java.util.Date 類(lèi)型轉(zhuǎn)換為 into java.sql.Timestamp 并設(shè)值:
			pstmt.setTimestamp(4, new Timestamp((student.getDob()).
			getTime()));
		2、自定義typeHandler
			假設(shè)表 STUDENTS 有一個(gè) PHONE 字段,類(lèi)型為 VARCHAR(15),而 JavaBean  Student 有一個(gè) PhoneNumber 類(lèi)定義類(lèi)型的 phoneNumber 屬性。
			Java Code  
			public class PhoneNumber{
				private String countryCode;
				private String stateCode;
				private String number;
				public PhoneNumber(){
					//...
				}
			public PhoneNumber(String countryCode, String stateCode, String number){
				this.countryCode = countryCode;
				this.stateCode = stateCode;
				this.number = number;
			}
			public PhoneNumber(String string){
				if(string != null){
					String[] parts = string.split("-");
					if(parts.length > 0) this.countryCode = parts[0];
					if(parts.length > 1) this.stateCode = parts[1];
					if(parts.length > 2) this.number = parts[2];
				}
			}
			public String getAsString(){
				return countryCode + "-" + stateCode + "-" + number;
			}
				// Setters and getters
			}
			public class Student{
				private Integer id;
				private String name;
				private String email;
				private PhoneNumber phone;
				// Setters and getters
			}
			XML Code  
			<insert id="insertStudent" parameterType="Student">
				insert into students(name,email,phone)
				values(#{name},#{email},#{phone})
			</insert>
			這里,phone 參數(shù)需要傳遞給#{phone};而 phone 對(duì)象是 PhoneNumber 類(lèi)型。然而,MyBatis 并不知道該怎樣來(lái)處理這個(gè)類(lèi)型的對(duì)象。
			為了讓 MyBatis 明白怎樣處理這個(gè)自定義的 Java 對(duì)象類(lèi)型,如 PhoneNumber,我們可以創(chuàng)建一個(gè)自定義的類(lèi)型處理器,如下所示:
			1)MyBatis 提供了抽象類(lèi) BaseTypeHandler<T> ,我們可以繼承此類(lèi)創(chuàng)建自定義類(lèi)型處理器。
			Java Code 
			packagecom.mybatis3.typehandlers;
			importjava.sql.CallableStatement;
			importjava.sql.PreparedStatement;
			importjava.sql.ResultSet;
			importjava.sql.SQLException;
			importorg.apache.ibatis.type.BaseTypeHandler;
			importorg.apache.ibatis.type.JdbcType;
			importcom.mybatis3.domain.PhoneNumber;
			public class PhoneTypeHandler extends BaseTypeHandler<PhoneNumber>{
				@Override
				public void setNonNullParameter(PreparedStatement ps, int i,
				PhoneNumber parameter, JdbcType jdbcType) throwsSQLException{
					ps.setString(i, parameter.getAsString());
				}
				@Override
				public PhoneNumber getNullableResult(ResultSet rs, String columnName)throws SQLException{
					return new PhoneNumber(rs.getString(columnName));
				}
				@Override
				public PhoneNumber getNullableResult(ResultSet rs, int columnIndex)throws SQLException{
					return new PhoneNumber(rs.getString(columnIndex)); 
				}
				@Override
				public PhoneNumber getNullableResult(CallableStatement cs, int columnIndex)throws SQLException{
					return new PhoneNumber(cs.getString(columnIndex));
				}
			}
			2)我們使用 ps.setString()和 rs.getString()方法是因?yàn)?nbsp;phone 列是 VARCHAR 類(lèi)型。
			3)一旦我們實(shí)現(xiàn)了自定義的類(lèi)型處理器,我們需要在 mybatis-config.xml 中注冊(cè)它:
			XML Code 
			<?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="application.properties" />
				<typeHandlers>
					<typeHandler handler="com.mybatis3.typehandlers. PhoneTypeHandler" />
				</typeHandlers>
			</configuration>
			注冊(cè) PhoneTypeHandler 后, MyBatis 就能夠?qū)?nbsp;Phone 類(lèi)型的對(duì)象值存儲(chǔ)到 VARCHAR 類(lèi)型的列上。
	 -->
</configuration>

本文參考:Java Persistence with MyBatis 3(中文版)

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、三沙ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的三沙網(wǎng)站制作公司

文章標(biāo)題:mybatis-config詳細(xì)配置說(shuō)明
轉(zhuǎn)載來(lái)源:http://chinadenli.net/article8/gioeip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、、商城網(wǎng)站網(wǎng)站導(dǎo)航、建站公司、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)