Mybatis主配置文件常見使用講解


在開發中我們通常將Mybatis中配置文件分兩種,主配置文件與和dao對應的映射文件。

其實最后mybatis解析的還是一個主配置文件。

而映射文件會通過我們配置<mappers>屬性,或指定掃描路徑,將映射文件導入主配置文件,最后一起解析。

下面是主配置文件常見使用講解:

Mybatisproperties文件的引入

properties導入后可以將可能會改變的屬性放在單獨的文件,例如連接數據時的賬號密碼等,方便管理,

在mybatis中使用properties標簽,如下,resource是類路徑,url是網絡路徑或磁盤路徑資源

<properties resource="org/mybatis/example/config.properties">
</properties>

 導入后就可以用${}進行屬性引用,如配置dataSource的幾個屬性

<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

Mybatis<setting>的使用

格式

<settings>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
</settings>

mapUnderscoreToCamelCase配置后查詢時會自動將數據表的_命名格式轉換成駝峰命名,然后對實體bean進行注入。如user_name會轉成userName;

Mybatis<mappers>的使用

mappers用作指定要映射文件的位置

使用格式

<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>

Mapper可以添加resource URL class屬性

Resource:指定類路徑的xml文件

URL:從網絡獲取xml文件

 

如何將映射xml文件與dao接口建立對應關系

方式一、將xml和接口類放在同一目錄下,直接指定接口類的全限類名

方式二、基於注解的接口類

推薦: 重要Dao接口需要寫SQL映射文件

不重要,簡單的Dao接口使用注解

<package>批量注冊 name屬性指定包名 自動掃描包內的xml文件

 

如何在添加數據后讓方法返回這條數據的id

在<intsert >中添加useGeneratedKeys="true" keyProperty="" 兩個屬性

keyProperty指定將id注入Bean的哪個屬性

Oracle不支持自增id是從序列中拿到,然后插入到數據表

可以在<insert>查詢語句前添加<selectKey keyProperty=”id” order=”before”>標簽

從序列中獲取一個id : select EMPLOYEES_SQL.nextval from dual ,然后注入到beanid

然后再查詢填充其他數據。

 

參數的傳遞

當只傳一個參數時,#{paramName},paramName可以隨便命名

當傳入多個參數時,會被封裝成一個map

Key :param1,param2,...paramN;1,2....N

Value :真實值

所以需要使用#{param1}#{1}

如果想簡單化

方法一、可以在Dao的方法參數添加@Param注解,自定義Key的值

方法二、如果參數時業務邏輯的數據模型,可以傳入POJO,這樣可以用#{attrName}獲取

方法三、如果參數不是業務邏輯模型數據,可以傳入MAP,這樣可以用#{keyName}獲取

方法四、如果多個參數不是業務模型數據,但要經常使用,可以編寫TO(Transfer Object)數據傳輸對象

Page{

Int index;

Int size;

}

如果傳入的的是collectionListSet)類型或數組,會被特殊處理

Key=Collection(collection) 或者Listlist

 

關於取值符號#{}

#{}${}都可以進行取值

區別:

#{}:以預編譯的形式(可以防止SQL注入),將參數設置到SQL語句中,PrepareStatement

${}:取出的值直接拼裝到SQL語句中

大多情況下取參數使用#{}

 

原生jdbc不支持占位符的地方可以使用${}進行取值

例如:使用分表,按年份拆表

Select * from ${tableName};

 

#{}:更豐富的用法

規定參數規則

JavaTypejdbcTypemode(存儲過程)、numericScale

resultMaptypeHandlerjdbcTypeNameexpression(未來准備支持的功能)

jdbcType通常需要在某種特定的條件下被設置;

在我們數據為null的時候,有些數據庫可能不能識別mybatisnull的默認處理。如Oracle

報錯JdbcType OtherType:無效類型。

因為mybatis對所有NULL映射的都是原生JdbcOtherType類型

解決方法:

1、#{email,jdbcType=OTHER};

2、jdbcTypeForNull=NULL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM