mybatis配置文件簡介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在定義sqlSessionFactory時(shí)需要指定MyBatis主配置文件:
Xml代碼
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="dataSource" /> </bean>
MyBatis配置文件中大標(biāo)簽configuration下子標(biāo)簽包括:
configuration
|--- properties
|--- settings
|--- typeAliases
|--- typeHandlers
|--- objectFactory
|--- plugins
|--- environments
|--- |--- environment
|--- |--- |--- transactionManager
|--- |--- |__ dataSource
|__ mappers
properties屬性
properties和java的.properties的配置文件有關(guān)。配置properties的resource指定.properties的路徑,然后再在properties標(biāo)簽下配置property的name和value,則可以替換.properties文件中相應(yīng)屬性值。
Xml代碼
<!-- 屬性替換 --> <properties resource="mysql.properties"> <property name="jdbc.driverClassName" value="com.mysql.jdbc.Driver"/> <property name="jdbc.url" value="jdbc:mysql://localhost:3306/student_manager"/> <property name="username" value="root"/> <property name="password" value="limingnihao"/> </properties>
settings設(shè)置
這是MyBatis 修改操作運(yùn)行過程細(xì)節(jié)的重要的步驟。下方這個(gè)表格描述了這些設(shè)置項(xiàng)、含義和默認(rèn)值。
例如:
Xml代碼
<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="enhancementEnabled" value="false" /> <setting name="defaultExecutorType" value="SIMPLE" /> </settings>
typeAliases類型別名
類型別名是Java 類型的簡稱。
它僅僅只是關(guān)聯(lián)到XML 配置,簡寫冗長的JAVA 類名。例如:
Xml代碼
<typeAliases> <typeAlias alias="UserEntity" type="com.manager.data.model.UserEntity" /> <typeAlias alias="StudentEntity" type="com.manager.data.model.StudentEntity" /> <typeAlias alias="ClassEntity" type="com.manager.data.model.ClassEntity" /> </typeAliases>
使用這個(gè)配置,“StudentEntity”就能在任何地方代替“com.manager.data.model.StudentEntity”被使用。
對(duì)于普通的Java類型,有許多內(nèi)建的類型別名。它們都是大小寫不敏感的,由于重載的名字,要注意原生類型的特殊處理。
typeHandlers類型句柄
無論是MyBatis在預(yù)處理語句中設(shè)置一個(gè)參數(shù),還是從結(jié)果集中取出一個(gè)值時(shí),類型處理器被用來將獲取的值以合適的方式轉(zhuǎn)換成Java類型。下面這個(gè)表格描述了默認(rèn)的類型處理器。
你可以重寫類型處理器或創(chuàng)建你自己的類型處理器來處理不支持的或非標(biāo)準(zhǔn)的類型。要這樣做的話,簡單實(shí)現(xiàn)TypeHandler接口(org.mybatis.type),然后映射新的類型處理器類到Java類型,還有可選的一個(gè)JDBC類型。然后再typeHandlers中添加這個(gè)類型處理器。
新定義的類型處理器將會(huì)覆蓋已經(jīng)存在的處理Java的String類型屬性和VARCHAR參數(shù)及結(jié)果的類型處理器。要注意MyBatis不會(huì)審視數(shù)據(jù)庫元信息來決定使用哪種類型,所以你必須在參數(shù)和結(jié)果映射中指定那是VARCHAR類型的字段,來綁定到正確的類型處理器上。這是因?yàn)镸yBatis直到語句被執(zhí)行都不知道數(shù)據(jù)類型的這個(gè)現(xiàn)實(shí)導(dǎo)致的。
Java代碼
public class LimingStringTypeHandler implements TypeHandler { @Override public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { System.out.println("setParameter - parameter: " + ((String) parameter) + ", jdbcType: " + jdbcType.TYPE_CODE); ps.setString(i, ((String) parameter)); } @Override public Object getResult(ResultSet rs, String columnName) throws SQLException { System.out.println("getResult - columnName: " + columnName); return rs.getString(columnName); } @Override public Object getResult(CallableStatement cs, int columnIndex) throws SQLException { System.out.println("getResult - columnIndex: " + columnIndex); return cs.getString(columnIndex); } }
在配置文件的typeHandlers中添加typeHandler標(biāo)簽。
Xml代碼
<typeHandlers> <typeHandler javaType="String" jdbcType="VARCHAR" handler="liming.student.manager.type.LimingStringTypeHandler"/> </typeHandlers>
ObjectFactory對(duì)象工廠
每次MyBatis 為結(jié)果對(duì)象創(chuàng)建一個(gè)新實(shí)例,都會(huì)用到ObjectFactory。默認(rèn)的ObjectFactory 與使用目標(biāo)類的構(gòu)造函數(shù)創(chuàng)建一個(gè)實(shí)例毫無區(qū)別,如果有已經(jīng)映射的參數(shù),那也可能使用帶參數(shù)的構(gòu)造函數(shù)。
如果你重寫ObjectFactory 的默認(rèn)操作,你可以通過繼承org.apache.ibatis.reflection.factory.DefaultObjectFactory創(chuàng)建一下你自己的。
ObjectFactory接口很簡單。它包含兩個(gè)創(chuàng)建用的方法,一個(gè)是處理默認(rèn)構(gòu)造方法的,另外一個(gè)是處理帶參數(shù)構(gòu)造方法的。最終,setProperties方法可以被用來配置ObjectFactory。在初始化你的ObjectFactory實(shí)例后,objectFactory元素體中定義的屬性會(huì)被傳遞給setProperties方法。
Java代碼
public class LimingObjectFactory extends DefaultObjectFactory { private static final long serialVersionUID = -399284318168302833L; @Override public Object create(Class type) { return super.create(type); } @Override public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) { System.out.println("create - type: " + type.toString()); return super.create(type, constructorArgTypes, constructorArgs); } @Override public void setProperties(Properties properties) { System.out.println("setProperties - properties: " + properties.toString() + ", someProperty: " + properties.getProperty("someProperty")); super.setProperties(properties); } }
配置文件中添加objectFactory標(biāo)簽
Xml代碼
<objectFactory type="liming.student.manager.configuration.LimingObjectFactory"> <property name="someProperty" value="100"/> </objectFactory>
4.6 plugins插件
MyBatis允許你在某一點(diǎn)攔截已映射語句執(zhí)行的調(diào)用。默認(rèn)情況下,MyBatis允許使用插件來攔截方法調(diào)用:
Executor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler(getParameterObject, setParameters)
ResultSetHandler(handleResultSets, handleOutputParameters)
StatementHandler(prepare, parameterize, batch, update, query)
這些類中方法的詳情可以通過查看每個(gè)方法的簽名來發(fā)現(xiàn),而且它們的源代碼在MyBatis的發(fā)行包中有。你應(yīng)該理解你覆蓋方法的行為,假設(shè)你所做的要比監(jiān)視調(diào)用要多。如果你嘗試修改或覆蓋一個(gè)給定的方法,你可能會(huì)打破MyBatis的核心。這是低層次的類和方法,要謹(jǐn)慎使用插件。
使用插件是它們提供的非常簡單的力量。簡單實(shí)現(xiàn)攔截器接口,要確定你想攔截的指定簽名。
environments環(huán)境
MyBatis 可以配置多個(gè)環(huán)境。這可以幫助你SQL 映射對(duì)應(yīng)多種數(shù)據(jù)庫等。
mappers映射器
這里是告訴MyBatis 去哪尋找映射SQL 的語句??梢允褂妙惵窂街械馁Y源引用,或者使用字符,輸入確切的URL 引用。
例如:
Xml代碼
<mappers> <mapper resource="com/manager/data/maps/UserMapper.xml" /> <mapper resource="com/manager/data/maps/StudentMapper.xml" /> <mapper resource="com/manager/data/maps/ClassMapper.xml" /> </map
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
使用javaweb項(xiàng)目對(duì)數(shù)據(jù)庫增、刪、改、查操作的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于使用javaweb項(xiàng)目對(duì)數(shù)據(jù)庫增、刪、改、查操作的實(shí)現(xiàn)方法,avaWeb是指使用Java語言進(jìn)行Web應(yīng)用程序開發(fā)的技術(shù),可以利用Java編寫一些動(dòng)態(tài)網(wǎng)頁、交互式網(wǎng)頁、企業(yè)級(jí)應(yīng)用程序等,需要的朋友可以參考下2023-07-07springboot如何為web層添加統(tǒng)一請(qǐng)求前綴
這篇文章主要介紹了springboot如何為web層添加統(tǒng)一請(qǐng)求前綴,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02JAVA提高第八篇 動(dòng)態(tài)代理技術(shù)
這篇文章主要為大家詳細(xì)介紹了JAVA動(dòng)態(tài)代理技術(shù)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10SpringBoot項(xiàng)目整合Redis教程詳解
這篇文章主要介紹了SpringBoot項(xiàng)目整合Redis教程詳解,Redis?是完全開源的,遵守?BSD?協(xié)議,是一個(gè)高性能的?key-value?數(shù)據(jù)庫。感興趣的小伙伴可以參考閱讀本文2023-03-03Java數(shù)據(jù)結(jié)構(gòu)之二叉排序樹的實(shí)現(xiàn)
二叉排序樹(Binary Sort Tree),又稱二叉查找樹(Binary Search Tree),亦稱二叉搜索樹。本文詳細(xì)介紹了二叉排序樹的原理,并且提供了Java代碼的完全實(shí)現(xiàn)。需要的可以參考一下2022-01-01Java之Spring認(rèn)證使用Profile配置運(yùn)行環(huán)境講解
這篇文章主要介紹了Java之Spring認(rèn)證使用Profile配置運(yùn)行環(huán)境講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07k8s部署springboot實(shí)現(xiàn)前后端分離項(xiàng)目
本文主要介紹了k8s部署springboot實(shí)現(xiàn)前后端分離項(xiàng)目,主要包括配置文件、鏡像構(gòu)建和容器編排等方面,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01JavaWeb ServletContext基礎(chǔ)與應(yīng)用詳細(xì)講解
ServletConfig對(duì)象,叫Servlet配置對(duì)象。主要用于加載配置文件的初始化參數(shù)。我們知道一個(gè)Web應(yīng)用里面可以有多個(gè)servlet,如果現(xiàn)在有一份數(shù)據(jù)需要傳給所有的servlet使用,那么我們就可以使用ServletContext對(duì)象了2023-01-01