如果對(duì)于編寫(xiě)大量的 ?Mapper
?文件比較反感可以采用注解方式,這種方式對(duì)于一些 ?簡(jiǎn)單的查詢(xún)
? 和可以使用 ?快速規(guī)則
? 的查詢(xún)來(lái)說(shuō),既可以減少?gòu)?fù)雜度也可以更靈活。
由于注解化 ?Mapper
?最大的特點(diǎn)就是無(wú)需 ?Mapper
?文件,SQL 配置會(huì)集中在 Mapper 接口的注解上。因此作為 注解化 Mapper 需要標(biāo)記 ?@SimpleMapper
? 注解。
??提示??
請(qǐng)注意 ?@SimpleMapper
? 和 ?@RefMapper
? 兩個(gè)注解不能同時(shí)使用,但它們都能夠正確處理注解化 Mapper。 不過(guò)仍然要注意的是請(qǐng)避免 注解化 Mapper 和 Mapper 文件的定義沖突,遇到?jīng)_突 HasorDB 也不能正確處理好它們。
用于配置一個(gè) ?select
?查詢(xún),例如下列 Mapper 和接口可以簡(jiǎn)化成一個(gè)注解化 Mapper 方法。
<select id="queryUser">
select * from `test_user`
where
<if test="age != null">
and age = #{age}
</if>
</select>
下面使用 ?快速'或'條件
? 簡(jiǎn)化 ?if
? 之后在利用 ?@Query
?注解化的結(jié)果。
@SimpleMapper()
public interface UserMapper {
@Query(value = "select * from `test_user` where @{and, age = :age }",
resultType = TestUser.class)
List<TestUser> queryUser(@Param("age") int age);
}
?@Query
? 注解擁有很多屬性,這些屬性和 ?<select>
? 標(biāo)簽是相對(duì)應(yīng)的
屬性名 | 描述 |
---|---|
value 獨(dú)有
|
必選,配置 SQL 查詢(xún) |
xml 獨(dú)有
|
可選,value 中的內(nèi)容如果使用了 動(dòng)態(tài) SQL 中定義的動(dòng)態(tài)SQL標(biāo)簽,那么需要設(shè)置為 true 。表示這是 XML格式的片段。 |
statementType
|
可選,STATEMENT 、PREPARED 、CALLABLE 對(duì)應(yīng)了 Statement , PreparedStatement 或 CallableStatement 中的一種。默認(rèn)值為 PREPARED
|
timeout
|
可選,當(dāng)配置的值大于 0 時(shí)會(huì)被設(shè)置到 Statement.setQueryTimeout ,用于表示查詢(xún)最長(zhǎng)等待的超時(shí)時(shí)間。默認(rèn)值是 -1
|
resultMap
|
可選,對(duì)于映射配置的引用。select 標(biāo)簽可以使用 resultMap 和 resultType 其中的一種,不應(yīng)該同時(shí)使用它們。如果沒(méi)有配置將會(huì)按照 map 來(lái)處理 |
resultType
|
可選,將返回的預(yù)期類(lèi)型的完全限定類(lèi)名或別名。注意,在集合的情況下,這應(yīng)該是集合包含的類(lèi)型,而不是集合本身的類(lèi)型,不應(yīng)該同時(shí)使用resultMap 和 resultType 。 |
fetchSize
|
可選,當(dāng)配置的值大于 0 時(shí)會(huì)被設(shè)置到 Statement.setQueryTimeout ,用于表示查詢(xún)最長(zhǎng)等待的超時(shí)時(shí)間。默認(rèn)值是 -1
|
resultSetType
|
可選,FORWARD_ONLY 、SCROLL_INSENSITIVE 、SCROLL_SENSITIVE 和 DEFAULT 其中的一種。默認(rèn)值是 DEFAULT 相當(dāng)于未設(shè)置。 |
multipleResult
|
可選,FIRST 、LAST 、ALL 用于處理多結(jié)果集的情況。它們對(duì)應(yīng)的行為是 保留第一個(gè)結(jié)果集 、保留最后一個(gè)結(jié)果集 、全部保留 。默認(rèn)配置是 LAST
|
?@Insert
? 注解的功效和 ?<insert>
? 標(biāo)簽相同,下面是示例:
<insert id="insertUser">
insert into `test_user` (
`id`, `name`, `age`, `create_time`
) values (
#{id}, #{name}, #{age}, #{createTime}
)
</insert>
使用 ?@Insert
? 注解化方式。
@SimpleMapper()
public interface UserMapper {
@Insert(value = "insert into `test_user` ( `id`, `name`, `age`, `create_time` ) "+
" values ( #{id}, #{name}, #{age}, #{createTime})")
int queryUser(TestUser user);
}
?@Insert
? 注解擁有很多屬性,這些屬性和 ?<insert>
? 標(biāo)簽是相對(duì)應(yīng)的
屬性名 | 描述 |
---|---|
value 獨(dú)有
|
必選,配置 SQL 查詢(xún) |
xml 獨(dú)有
|
可選,value 中的內(nèi)容如果使用了 動(dòng)態(tài) SQL 中定義的動(dòng)態(tài)SQL標(biāo)簽,那么需要設(shè)置為 true 。表示這是 XML格式的片段。 |
statementType
|
可選,STATEMENT 、PREPARED 、CALLABLE 對(duì)應(yīng)了 Statement , PreparedStatement 或 CallableStatement 中的一種。默認(rèn)值為 PREPARED
|
timeout
|
可選,當(dāng)配置的值大于 0 時(shí)會(huì)被設(shè)置到 Statement.setQueryTimeout ,用于表示查詢(xún)最長(zhǎng)等待的超時(shí)時(shí)間。默認(rèn)值是 -1
|
?@Update
? 注解的功效和 ?<update>
? 標(biāo)簽相同,下面是示例:
<update id="updateAge">
update `test_user` set age = #{age} where id = #{id}
</update>
使用 ?@Update
? 注解化方式。
@SimpleMapper()
public interface UserMapper {
@Update(value = "update `test_user` set age = #{age} where id = #{id}")
int updateAge(@Param("age") int age, @Param("id") int id);
}
?@Update
? 注解擁有很多屬性,這些屬性和 ?<update>
? 標(biāo)簽是相對(duì)應(yīng)的
屬性名 | 描述 |
---|---|
value 獨(dú)有
|
必選,配置 SQL 查詢(xún) |
xml 獨(dú)有
|
可選,value 中的內(nèi)容如果使用了 動(dòng)態(tài) SQL 中定義的動(dòng)態(tài)SQL標(biāo)簽,那么需要設(shè)置為 true 。表示這是 XML格式的片段。 |
statementType
|
可選,STATEMENT 、PREPARED 、CALLABLE 對(duì)應(yīng)了 Statement , PreparedStatement 或 CallableStatement 中的一種。默認(rèn)值為 PREPARED
|
timeout
|
可選,當(dāng)配置的值大于 0 時(shí)會(huì)被設(shè)置到 Statement.setQueryTimeout ,用于表示查詢(xún)最長(zhǎng)等待的超時(shí)時(shí)間。默認(rèn)值是 -1
|
?@Delete
? 注解的功效和 ?<delete>
? 標(biāo)簽相同,下面是示例:
<delete id="deleteById">
delete from `test_user` where id = #{id}
</delete>
使用 ?@Delete
? 注解化方式。
@SimpleMapper()
public interface UserMapper {
@Update(value = "delete from `test_user` where id = #{id}")
int updateAge(@Param("id") int id);
}
?@Delete
? 注解擁有很多屬性,這些屬性和? <delete>
? 標(biāo)簽是相對(duì)應(yīng)的
屬性名 | 描述 |
---|---|
value 獨(dú)有
|
必選,配置 SQL 查詢(xún) |
xml 獨(dú)有
|
可選,value 中的內(nèi)容如果使用了 動(dòng)態(tài) SQL 中定義的動(dòng)態(tài)SQL標(biāo)簽,那么需要設(shè)置為 true 。表示這是 XML格式的片段。 |
statementType
|
可選,STATEMENT 、PREPARED 、CALLABLE 對(duì)應(yīng)了 Statement , PreparedStatement 或 CallableStatement 中的一種。默認(rèn)值為 PREPARED
|
timeout
|
可選,當(dāng)配置的值大于 0 時(shí)會(huì)被設(shè)置到 Statement.setQueryTimeout ,用于表示查詢(xún)最長(zhǎng)等待的超時(shí)時(shí)間。默認(rèn)值是 -1
|
?@Param
?注解只能標(biāo)記在方法的參數(shù)上,用來(lái)在拼接動(dòng)態(tài) SQL 時(shí)候引用到對(duì)應(yīng)的屬性。
比較常見(jiàn)的方式如下,?#{id}
? 對(duì)應(yīng)? @Param("id")
?
@Update(value = "delete from `test_user` where id = #{id}")
int updateAge(@Param("id") int id);
如果方法入?yún)⒂星覂H有一個(gè)對(duì)象,那么這個(gè)對(duì)象無(wú)需標(biāo)記 ?@Param
? 注解,它的每一個(gè)屬性都會(huì)被識(shí)別。例如:
public class TestUser {
private Integer id;
private String name;
private Integer age;
private Date createTime;
// getters and setters omitted
}
@Insert(value = "insert into `test_user` "+
"values ( #{id}, #{name}, #{age}, #{createTime})")
int queryUser(TestUser user);
如果參數(shù)沒(méi)有標(biāo)記 ?@Param
? 注解那么會(huì)以參數(shù)的所在順序 前面加上固定的 ?arg
?來(lái)替代,例如:
@Update(value = "update `test_user` set age = #{arg0} where id = #{arg1}")
int updateAge(int age, int id);
更多建議: