MyBatis可以利用SQL映射文件來配置,也可以利用Annotation來設置。MyBatis提供的一些基本注解如下表所示。
注解 |
目標 |
相應的XML |
描述 |
@CacheNamespace |
類 |
<cache> |
為給定的命名空間(比如類)配置緩存。屬性: implemetation,eviction, flushInterval , size 和 readWrite 。 |
@CacheNamespaceRef |
類 |
<cacheRef> |
參照另外一個命名空間的緩存來使用。 屬性:value,也就是類的完全限定名。 |
@ConstructorArgs |
方法 |
<constructor> |
收集一組結果傳遞給對象構造方法。 屬性:value,是形式參數的數組 |
@Arg |
方法 |
<arg> <idArg>
|
單獨的構造方法參數,是ConstructorArgs 集合的一部分。屬性:id,column,javaType,typeHandler。 id屬性是布爾值,來標識用於比較的屬性,和<idArg>XML 元素相似 |
@TypeDiscriminator |
方法 |
<discriminator> |
一組實例值被用來決定結果映射的表 現。屬性:Column, javaType , jdbcType typeHandler,cases。 cases屬性就是實例的數組。 |
@Case |
方法 |
<case> |
單獨實例的值和它對應的映射。屬性:value ,type ,results 。 Results 屬性是結果數組,因此這個注解和實際的ResultMap 很相似,由下面的 Results注解指定 |
@Results |
方法 |
<resultMap> |
結果映射的列表,包含了一個特別結果 列如何被映射到屬性或字段的詳情。 屬性:value ,是Result注解的數組 |
@Result |
方法 |
<result> <id> |
在列和屬性或字段之間的單獨結果映 射。屬性:id ,column , property, javaType ,jdbcType ,type Handler , one,many。id 屬性是一個布爾值,表 示了應該被用於比較的屬性。one屬性是單獨的聯系,和 <association> 相似,而many 屬性是對集合而言的,和 <collection>相似。 |
@One |
方法 |
<association> |
復雜類型的單獨屬性值映射。屬性: select,已映射語句(也就是映射器方 法)的完全限定名,它可以加載合適類 型的實例。注意:聯合映射在注解API 中是不支持的。 |
@Many |
方法 |
<collection> |
復雜類型的集合屬性映射。屬性: select,是映射器方法的完全限定名,它可加載合適類型的一組實例。注意:聯合映射在 Java注解中是不支持的。 |
@Options |
方法 |
映射語句的屬性 |
這個注解提供訪問交換和配置選項的寬廣范圍,它們通常在映射語句上作為屬性出現。而不是將每條語句注解變復雜,Options 注解提供連貫清晰的方式來訪問它們。屬性:useCache=true, flushCache=false, resultSetType=FORWARD_ONLY, statementType=PREPARED, fetchSize= -1,timeout=-1 , useGeneratedKeys=false , keyProperty=”id“。 理解Java 注解是很重要的,因為沒有辦法來指定“null ”作為值。因此,一旦你使用了 Options注解,語句就受所有默認值的支配。要注意什么樣的默認值來避免不期望的行為 |
@Insert @Update @Delete |
方法 |
<insert> <update> <delete> |
這些注解中的每一個代表了執行的真實 SQL。它們每一個都使用字符串數組(或單獨的字符串)。如果傳遞的是字符串數組,它們由每個分隔它們的單獨空間串聯起來。屬性:value,這是字符串數組用來組成單獨的SQL語句 |
@InsertProvider @UpdateProvider @DeleteProvider @SelectProvider |
方法 |
<insert> <update> <delete> <select> 允許創建動態 SQL。 |
這些可選的SQL注解允許你指定一個 類名和一個方法在執行時來返回運行 的SQL。基於執行的映射語句, MyBatis 會實例化這個類,然后執行由 provider 指定的方法. 這個方法可以選擇性的接 受參數對象作為它的唯一參數,但是必 須只指定該參數或者沒有參數。屬性: type,method。type 屬性是類的完全限定名。method 是該類中的那個方法名。 |
@Param |
參數 |
N/A |
當映射器方法需多個參數,這個注解可以被應用於映射器方法參數來給每個參數一個名字。否則,多參數將會以它們的順序位置來被命名。比如 #{1},#{2} 等,這是默認的。 使用@Param(“person”),SQL中參數應該被命名為#{person}。
|
測試select,insert,update,delete操作
實體類:
項目結構:
mybatis-config.xml:
<?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"> <!-- XML 配置文件包含對 MyBatis 系統的核心設置 --> <configuration> <properties resource="db.properties" /> <settings> <!-- 指定 MyBatis 所用日志的具體實現 --> <setting name="logImpl" value="STDOUT_LOGGING"/> <!-- 打開懶加載的開關 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 將積極加載改為消極加載 --> <setting name="aggressiveLazyLoading" value="false"/> </settings> <!-- 定義別名 位置在setting之后 --> <!-- <typeAliases> <typeAlias alias="user" type="org.model.User"></typeAlias> </typeAliases> --> <!-- 別名定義 推薦這種方式 掃描該包中的實體類以及子包中的實體類--> <typeAliases> <package name="model"/> </typeAliases> <environments default="mysql"> <!-- 環境配置,即連接的數據庫。 --> <environment id="mysql"> <!-- 指定事務管理類型,type="JDBC"指直接簡單使用了JDBC的提交和回滾設置 --> <transactionManager type="JDBC" /> <!-- dataSource指數據源配置,POOLED是JDBC連接對象的數據源連接池的實現。 --> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- mappers告訴了MyBatis去哪里找持久化類的映射文件 --> <mappers> <!-- <mapper resource="org/mapper/ten/proxy/UserMapper.xml"/> --> <mapper class="Intefaceproxy.UserInterfaceMapper"/> </mappers> </configuration>
可以看到之前的xxxMapper.xml文件已經刪除不需要引入了 而引入的則是一個接口 下面分別進行測試
@insert
@delete
@select
@update
-------------------------------------------
@One 一對一關系測試
對應的實體類
Person
Card
mybatis-config.xml中配置mapper接口的位置
CardMapper接口
PersonMapper接口
測試:
--------------------------
一對多關系測試
Student
Clazz
mybatis-config.xml中配置mapper接口的位置
StudentMapper接口
ClazzMapper接口
測試:
--------------------------------
多對多關系測試
實體類以及表關系
user表
article表
orders表
中間表item:
mybatis-config.xml中配置mapper接口的位置
userMapper接口:
articleMapper接口:
ordersMapper接口:
測試:
--------------------------