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