MyBatis

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值