我是靠谱客的博主 精明网络,最近开发中收集的这篇文章主要介绍Mybatis使用过程中的一些总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. myBatis choose when:条件查询,以前不太清楚它的含义,都是使用if判断,或在程序里判断,使用了之后,发觉有些场景下还是挺不错的。

场景1:默认排序
<choose>
	<when test="sortName != null and sortType != null">
		ORDER BY ${sortName} ${sortType}
	</when>
	<otherwise>
		ORDER BY order_create_time DESC
	</otherwise>
</choose>

场景2:通过一个字段判断是否支持模糊查询
<choose>
	<when test="isLike != null and isLike !=''">
		<if test="sellerName != null">
			seller_name like #{sellerName,jdbcType=VARCHAR} and
		</if>
	</when>
	<otherwise>
		<if test="sellerName != null">
			seller_name = #{sellerName,jdbcType=VARCHAR} and
		</if>
	</otherwise>
</choose>

2. mybatis的sum()函数返回类型是BigDecimal类型,所以我们处理的时候需要注意下:

   1> 返回 Object 值,然后通过 Integer.parseInt(obj.toString()); 来得到int值;

    2> 返回 BigDecimal 值,然后通过 BigDecimal.intValue()得到需要的值,应该说我们推荐使用第二种方法。

   3> 如果指定resultType为Long类型的话,则不用考虑BigDecimal;

<select id="selectByParams" resultType="java.util.Map" parameterType="java.util.Map">
		select sum(amount) as amountTotal,company_id as companyId
		from test
		<include refid="selectByParamsWhere" />
</select>

3. 同理,mybatis的count()函数返回类型是Long;


4. mybatis的#{} 和 ${}的不同场景,或者说区别:

  1) #{},预编译SQL时,会将传入的数据都当成一个字符串,会对自动传入的数据加一个引号; ${}仅仅是文本替换。如:

select * from student order by #{stuId}
会转化为:
select * from student order by 'stu_id'
select * from student order by ${stuId}
会转化为:
select * from student order by stu_id
  2) ${}一般用在order by, limit, group by等场景
<if test=" offset != null and limit != null">
	limit ${offset}, ${limit}
</if>
  3) 能用#{}实现的方式就不要用${}来实现,主要是为了防止sql注入问题;比如:

select * from ${tableName} where id = #{name}
假如,我们的参数 tableName 为  
user; delete user; --
那么 SQL 动态解析阶段之后,预编译之前的 sql 将变为:
select * from user; delete user; -- where name = ?;
-- 之后的语句将作为注释,不起作用,因此本来的一条查询语句偷偷的包含了一个删除表数据的 SQL。

  4) 直接接受从用户传入的内容并直接访问数据库,这种做法是不安全的。这会导致潜在的SQL注入攻击,因此不应该允许用户输入的数据直接访问数据库,应该对输入的数据自行转义并检查。


5. mybatis在查询的时候,如果返回的是map而不是实体对象的话,map中的value如果为null的话,那这个字段就没有返回,这样的话可能会有空指针的出现;

  1)  一种方式就是不返回map,返回实体对象,然后映射一下;

  2)  另一种方式,网上说的,不过还没验证过;

在mybatis的配置文件中加入,mybatis必须3.2版本以上
<settings>  
  	<setting name="cacheEnabled" value="true"/>   
    <setting name="callSettersOnNulls" value="true"/>  
</settings>  

  3)  调用到这个接口的地方进行非空判断;


最后

以上就是精明网络为你收集整理的Mybatis使用过程中的一些总结的全部内容,希望文章能够帮你解决Mybatis使用过程中的一些总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部