mybatis 基础

mybatis 

#{}和${}  只能用order by ${}

#{}可以防止sql注入,相当于一个占位符 where name=? 无需关心参数类型mybatis会自动进行java类型和jdbc类型的转换,当参数类型是基本类型或者基本类型的封装类型都可以用#{value} 。#{value}可以任性的名称#{id}#{name}

当参数类型为字符串是无需加单引号‘’ 如where name=#{value} ,name like #{value} 需要在参数中拼接"%aa%" 

${} 以字符串拼接的形式 ,直接拼接sql,无法防止sql注入,多用于表明 from ${tableName}, order by ${} 当参数类型为基本类型或者基本类型的封装类型,必须是${value} 

如:where name=‘${value}’ ,where name like '%${value}%'

parameterType 

基本类型如:int ,long ,string 以及基本类型的封装类型Integer Long等 无需写parameterType 可以使任意#{value} value 可以使任意的值 根据类型匹配的名称

1)参数类型为 Long 或者long; public T_UserDTO selectUserByIdL(Long id) 也可以是 (long id)

<select id="selectUserByIdL" resultType="com.qb.domain.T_UserDTO" >
select *from t_user where id=#{value};
</select>

2)参数类型为int 或者Integer ; public T_UserDTO selectUserByIdI(int id)
<select id="selectUserByIdI" resultType="com.qb.domain.T_UserDTO">
select * from t_user where id=#{value};
</select>

3)参数类型为String ;public T_UserDTO selectUserByName(String name); 无需加单引号 

<select id="selectUserByName" resultType="com.qb.domain.T_UserDTO">
select * from t_user where uname=#{value};
</select>

4)参数类型是数组 Integer[] uids;public List<String> selectUByIDAry(@Param("uids") Integer[] uids);

<select id="selectUByIDAry" parameterType="java.lang.reflect.Array" resultType="string">
select uname from t_user where id in

<!--uids 必须和@Param("uids") 名称一样-->
<foreach collection="uids" item="uid" open="(" close=")"
separator=",">
#{uid}
</foreach>
</select>

5) 参数类型是实体的封装类型 public List<T_UserDTO> selectUByEntityExt(T_UserDaoExtend userDaoExtend)

<select id="selectUByEntityExt" parameterType="com.qb.domain.T_UserDaoExtend"
resultType="com.qb.domain.T_UserDTO">
select * from t_user where id in

<!--uids 是实体T_UserDaoExtend 的属性名称-->
<foreach collection="uids" item="uid" open="(" close=")"
separator=",">
#{uid}
</foreach>

<!--roleDto 是T_UserDaoExtend的属性名--> 

and uname=#{roleDto.rname}
</select>

5)参数类型是hashmap 

<select id="selectUByHashMap" parameterType="hashmap"
resultType="hashmap">

<!--uname 是map的key-->
select * from t_user where uname=#{uname} and upassword=#{pwd}
</select>

resultType

int,string,long 单条数据 返回结果是一条还是多条和resultType 没有关系会根据dao 的方法中的返回值判断是调用selectOne 还是selectList所以 无论是 返回一条数据还是多条数据基本类型都是int,string,long 

1)返回结果是hashmap 根据key value 的形式将数据库中的数据返回 可以使单条也可是是多条但是resultType=“hashmap”

<select id="selectUser" resultType="hashmap">
select * from t_user ;
</select>

2)返回结果是list<string>
<select id="selectUserName" resultType="string">
select uname from t_user;
</select>

3)返回结果是list<Long>
<select id="selectUserId" resultType="long">
select id from t_user;
</select>

4)返回结构是list<Integer>
<select id="selectUserIdLI" resultType="int">
select id from t_user;
</select>

5)返回结果是int
<select id="selectUserOne" resultType="int">
select id from t_user where id=1;
</select>

6)返回结构是实体 List<T_UserDTO>

<select id="selectUserByName" resultType="com.qb.domain.T_UserDTO">

select * from t_user where uname=#{value};
</select>

7)返回结果是T_UserDTO

<select id="selectUserByName" resultType="com.qb.domain.T_UserDTO">

select * from t_user where uname=#{value};

</select>

8)返回结果是resulMap 是实体映射关系:将表里面的column映射到实体里面的字段上

<select id="getUserRoleByUid" parameterType="int" resultMap="selectUserRoleResultMap">
SELECT u.id,u.uname,u.upassword,r.*,p.id as pid,p.pre_name,p.role_id
FROM t_role r
INNER JOIN t_user u ON r.uid=u.id
INNER JOIN t_permission p ON r.rid=p.role_id
where u.id= #{value};
</select>

foreach 的collection 可以使list 或者array 也可是值@param(“名称”)指定的名称 如果实体类就是类里面的属性名称

 

posted @ 2017-04-27 14:38  暖暖-木木  阅读(91)  评论(0)    收藏  举报