MyBatis

来源:互联网 发布:最好企业网络投资理财 编辑:程序博客网 时间:2024/04/30 10:25
MyBatis
========================================================================
MyBatis/Ibatis中#和$的区别
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
   如:order by #{user_id},如果传入的值是666,那么解析成sql时的值为order by "666",
   如果传入的值是id,则解析成的sql为order by "id".

2.$将传入的数据直接显示生成在sql中。
   如:order by ${user_id},如果传入的值是888,那么解析成sql时的值为order by 888,
   如果传入的值是id,则解析成的sql为order by id.

3.#方式能够很大程度防止sql注入;$方式无法防止Sql注入。

4.$方式一般用于传入数据库对象,例如传入表名、字段名.

5.一般能用#的就别用$.

ps:在使用mybatis中还遇到<![CDATA[     ]]>的用法,在该符号内的语句,将不会被当成字符串来处理,而是直接当成sql语句,
比如sql中有大于号>比较时;要执行一个存储过程时等
========================================================================

========================================================================
MyBatis insert操作返回主键
MyBatis insert语句默认返回的是插入的记录条数;

int userAdd(UserEntit user); //dao mapper层

<insert id="add" parameterType="UserEntity" useGeneratedKeys="true" keyProperty="id">
    insert into ......
</insert>

返回值为插入的记录条数
user.getId()为插入记录的主键id
========================================================================

========================================================================
MyBatis insert批量插入

int batchInsert(@Param("list") List<User> userList);

<insert id="batchInsert" parameterType="java.util.List">
    insert into t_user(username,password,age)
    values
   <foreach collection="list" item="item" index="index" separator="," >      
           (#{item.username},#{item.password},age)  
   </foreach>
</insert>
========================================================================

========================================================================
MyBatis in

1. 当查询的参数只有一个时

1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
findByIds(List<Long> ids)
<select id="findByIdsMap" resultMap="BaseResultMap">        Select        <include refid="Base_Column_List" />        from t_user where ID in        <foreach item="item" index="index" collection="list" open="(" separator="," close=")">             #{item}        </foreach>  </select> 
1.2 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
findByIds(Long[] ids)
<select id="findByIdsMap" resultMap="BaseResultMap">      select      <include refid="Base_Column_List" />      from t_user where ID in      <foreach item="item" index="index" collection="array" open="(" separator="," close=")">           #{item}      </foreach>  </select> 
2. 当查询的参数有多个时,例如 findByIds(String name, Long[] ids)
 这种情况需要特别注意,在传参数时,一定要改用Map方式,这样在collection属性可以指定名称,下面是一个示例
 Map<String, Object> params = new HashMap<String, Object>(2);
 params.put("name", name);
 params.put("ids", ids);
 mapper.findByIdsMap(params);
 <select id="findByIdsMap" resultMap="BaseResultMap">       select           <include refid="Base_Column_List" />           from tabs where ID in           <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">                #{item}           </foreach>   </select>  

========================================================================



0 0
原创粉丝点击