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