parameterType和resultType
1.parameterType:指定傳入的參數類型,傳遞的參數類型可以是簡單數據類型、pojo類型和map類型。
2.resultType: MyBaits會將sql查詢結果中的每一行記錄映射成resultType指定的類型然後返回。
resultType指定的類型有兩種:1.pojo類型 2.基本類型。
如果sql語句查詢的結果集是一行一列的話,那麼resultType指定的類型是基本類型;
<select id="findUserCount" resultType="java.lang.Integer">
select count(*) from user
</select>
或者使用別名int代替java.lang.Integer
<select id="findUserCount" resultType="java.lang.int">
select count(*) from user
</select>
如果sql語句查詢的結果集是一行多列的話,那麼resultType指定的類型是對應的pojo類型;
<select id="findUserById" parameterType="int" resultType="cn.tomble.pojo.User">
select * from user where id=#{id}
</select>
如果sql語句查詢的結果集是多行的話,即返回的是List或其他集合類型,那麼resultType指定的類型應該是集合的泛型類型,因爲MyBaits是將SQL語句查詢結果的每一行記錄映射成指定的類型,並且MyBaits通過SQL語句可以判斷出返回的結果集對應的是集合類型,但無法判斷集合中的泛型類型是什麼,所以需要我們在resultType中指定集合中的泛型類型;
<select id="findUserbyVo" parameterType="cn.tomble.pojo.QueryVo" resultType="cn.tomble.pojo.User">
select * from user where username like '%${user.username}%' and sex=#{user.sex}
</select>
#{}和${}
1.在MyBaits的Sql映射文件#{}表示的是一個佔位符號,通過#{}可以實現JDBC編程中的向佔位符設置值,並會自動進行java類型和jdbc類型的轉換。#{}可以接收簡單類型值或pojo屬性值。
1-1如果parammeterType指定的類型是基本數據類型(String long double等),那麼#{}中的變量名稱可以隨意編寫;
1-2 如果parameterType指定的類型是pojo類型,那麼#{}中的寫的是pojo對象的屬性名稱或屬性.屬性…;
<select id="findUserbyVo" parameterType="cn.tomble.pojo.QueryVo" resultType="cn.tomble.pojo.User">
select * from user where username like '%${user.username}%' and sex=#{user.sex}
</select>
因爲是根據QueryVo對象中的user對象中的username屬性和sex屬性進行模糊查詢,所以在#{}用了屬性.屬性的形式
1-3 如果parameterType指定的類型是Map類型,那麼#{}中寫的是Map中對應的key名稱。
2.在MyBaits的SQL映射文件的SQL語句中,${}表示來拼接字符串,通過${}可以將傳入的參數拼接在SQL中且不進行java類型和jdbc類型的轉換,${}可以接收簡單類型值和pojo對象的屬性值。
2-1如果parameterType中指定的是簡單數據類型,那麼${}中只能是value;
<select id="findUserByUserName" parameterType="java.lang.String" resultType="cn.tomble.pojo.User">
select * from user where username like '%${value}%'
</select>
2-2 如果parameterType中指定的是pojo類型,那麼${}中填寫的是pojo對應的屬性值。
3 小結:
#{}起到佔位符的作用,#{}可以有效防止sql注入問題;
${}起到字符串拼接的左右,但${}有sql注入的風險,所以要慎重使用;
當SQL語句中條件爲“=”時,使用佔位符#{};
當SQL語句中條件爲“like”時,使用拼接符${}。
MyBaits中支持別名
別名 |
映射的java中類型 |
_byte |
byte |
_long |
long |
_short |
short |
_int |
int |
_integer |
int |
_double |
double |
_float |
float |
_boolean |
boolean |
string |
String |
byte |
Byte |
long |
Long |
short |
Short |
int |
Integer |
integer |
Integer |
double |
Double |
float |
Float |
boolean |
Boolean |
date |
Date |
decimal |
BigDecimal |
bigdecimal |
BigDecimal |
map |
Map |
在MyBaits的sql映射文件中,就可以使用int來對應代替java中的java.lang.Integer
使用string來對應代替java中的java.lang.String