mybatis知识整理
1、Mybatis的xml文件中 的大于小于 不能 直接使用 > < 符号来比较大小
应该是 > 或者 <
2、Mybatis逆向生成的Example更新语句updateSelective和单纯的update语句区别:
前者是根据选中要更新的字段进行更新,如果有空的字段,则会保留原有字段值,不会全部更新。后者则是全部更新字段,有空值则字段值为空。
3、Mybatis的Mapper.xml案例,下面这个案例不要照抄,有问题,模糊查询的时候 用了 OR 连接,会导致查出的数据可能出现差错,解决方案是,将这个模糊查询放在最后。
<select id="getAdvList" parameterType="com.hotcoin.newadmin.otc.dto.AdvertiseDTO" resultType="com.hotcoin.newadmin.otc.vo.AdvertiseResultTypeVO">
SELECT
a.*,
b.frealname,
( SELECT count( * ) FROM otc_order WHERE ad_user_id = a.USER_ID AND `status` = 2 ) AS completeOrders
FROM
otc_advert a
LEFT JOIN f_user b ON a.USER_ID = b.fid
where 1=1
<if test="uidOrName !=null and uidOrName!='' ">
and a.USER_ID like concat (#{uidOrName},'%') or b.frealname like concat (#{uidOrName},'%')
</if>
<if test="coinId !=null and coinId!='' and coinId !=0">
and a.COIN_ID = #{coinId}
</if>
</select>
4、Mybatis时间戳查询问题,此时如果不写后面的 jdbcType查不出来数据
<if test="startTime !=null and startTime !=''">
AND a.create_time >= #{firstTime,jdbcType=TIMESTAMP}
</if>
<if test="endTime !=null and endTime !=''">
AND a.create_time <= #{lastTime,jdbcType=TIMESTAMP}
</if>
5、Mybatis进行table表格排序问题
像这种要对table表格进行排序,在对于接口设计的时候,可以让前端传递 column列字段,sort排序规则,两个字段作为查询字段规则。如下所示。
6、多表查询导致列字段含义模棱两可问题
Mybatis的xml书写sql语句的时候,如果是多表查询,一定注意两个表相同的字段,可以加上表名来区分相同字段。

7、Mybatis中判断数据库字段是否为空

8、Mybatis使用PageHelper插件来分页导致分页失效问题。(大坑)

//PageHelper.startPage只会对最近的一个查询语句生效
PageHelper.startPage(dto.getPageNum(),dto.getPageSize());
List<AssetBalanceResultVO> list = userOtcCoinWalletMapper.getBalanceList(queryMap);
9、Mybatis使用PageHelper插件来分页数据量太大或者查询语句复杂时导致分页失效问题。
//分页count(0)缓慢, startPage设置为false,分页插件不会统计总条数,可以自己写
PageHelper.startPage(dto.getPageNum(),dto.getPageSize(),false);
List<AssetBalanceResultVO> list = userOtcCoinWalletMapper.getBalanceList(queryMap);
本文整理了关于Mybatis的一些关键知识点,包括:1) xml文件中特殊符号的转义;2) updateSelective与update的区别;3) 模糊查询避免OR问题;4) 时间戳查询的jdbcType注意事项;5) 接口设计中的排序参数;6) 多表查询时字段歧义的解决;7) 字段为空的判断;8) PageHelper分页失效的坑;9) 大数据量分页与复杂查询时的PageHelper问题。
515

被折叠的 条评论
为什么被折叠?



