目录

mybatis使用记录

[TOC]

mybatis使用Criteria的用法小坑

原文:https://developer.aliyun.com/article/665448

在用Criteria时,相关代码如下:

1
2
3
4
final RolePermissionExample example = new RolePermissionExample();
        example.createCriteria().andRoleIdEqualTo(roleId);
        example.createCriteria().andProjectIdEqualTo(projectId);
        List<RolePermission> rolePermissions = rolePermissionMapper.selectByExample(example);

后面发现只有第一个条件才生效,第二个是不生效的。 经调整,代码修改如下:

1
2
3
final RolePermissionExample example = new RolePermissionExample();
        example.createCriteria().andRoleIdEqualTo(roleId).andProjectIdEqualTo(projectId);
        List<RolePermission> rolePermissions = rolePermissionMapper.selectByExample(example);

经测试,功能正常!

mybatis批量插入返回主键id

可以实现,前提要:

  1. 升级Mybatis版本到3.3.1以上
  2. 在mapper.java中不能使用@param注解。
  3. Mapper.xml中使用list变量接受Dao中的集合。
  4. xxxDao中,也只能传一个LIST参数. 两个参数是不行的

issue链接:https://github.com/mybatis/mybatis-3/pull/350

示例

1
int batchInsert(List<FastDriverDislikeCargoEntity> cargoEntityList);

注意collection用的参数名是list

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<insert id="batchInsert" keyProperty="id" useGeneratedKeys="true">
    insert into fast_driver_dislike_cargo (driver_id, consign_id, intention_id, cargo_name,
    operator_id, dislike_reason, source,
    create_time, update_time, is_valid)
    VALUES
    <foreach collection="list" item="entity" separator="," index="index">
      (#{entity.driverId}, #{entity.consignId}, #{entity.intentionId}, #{entity.cargoName}, #{entity.operatorId},
      #{entity.dislikeReason}, #{entity.source}, #{entity.createTime}, #{entity.updateTime}, 1)
    </foreach>
  </insert>