mybatis开发要点-insert主键ID获取和多参数传递

简介: mybatis开发要点-insert主键ID获取和多参数传递

一、插入数据主键ID获取


一般我们在做业务开发时,经常会遇到插入一条数据并使用到插入数据的ID情况。如果先插入在查询的话需要多一次sql查询,未免效率太低。因此mybatis也有提供插入数据并返回主键ID的方式。如下


1、Insert/update


1.1、属性解释


image.png

  • 注意:自增长序号不是简单的行数+1,而是序号最大值+1;既当前10000条数据,但主键ID到12000,则返回的为12001.而不是10001.


1.2、代码示例


  <insert id="insert1" parameterType="TUser" useGeneratedKeys="true"  keyProperty="id">
    insert into t_user (id, userName, realName,
    sex, mobile,
    email,
    note, position_id)
    values (#{id,jdbcType=INTEGER},
    #{userName,jdbcType=VARCHAR},
    #{realName,jdbcType=VARCHAR},
    #{sex,jdbcType=TINYINT}, #{mobile,jdbcType=VARCHAR},
    #{email,jdbcType=VARCHAR},
    #{note,jdbcType=VARCHAR},
    #{position.id,jdbcType=INTEGER})
  </insert>


该插入指令会取出主键并由ID字段来接收

2、selectKey

1.1、属性解释


image.png

1.2、代码示例


  <insert id="insert2" parameterType="TUser">
    <selectKey keyProperty="id" order="AFTER" resultType="int">
      select
      LAST_INSERT_ID()
    </selectKey>
    insert into t_user (id, userName, realName,
    sex, mobile,
    email,
    note,
    position_id)
    values (#{id,jdbcType=INTEGER},
    #{userName,jdbcType=VARCHAR},
    #{realName,jdbcType=VARCHAR},
    #{sex,jdbcType=TINYINT}, #{mobile,jdbcType=VARCHAR},
    #{email,jdbcType=VARCHAR},
    #{note,jdbcType=VARCHAR},
    #{position.id,jdbcType=INTEGER})
  </insert>


二、查询如何传入多个参数

1、使用map传递参数;

特点:可读性差,导致可维护性和可扩展性差,杜绝使用;

代码示例

1、xml

  <select id="selectByEmailAndSex1" resultMap="BaseResultMap"   parameterType="map">
    select
    <include refid="Base_Column_List" />
    from t_user a
     where a.email like CONCAT('%', #{email}, '%') and
     a.sex =#{sex}
  </select>


2、调用层

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("email", email);
    params.put("sex", sex);
    List<TUser> list1 = mapper.selectByEmailAndSex1(params);
    System.out.println(list1.size());


2、使用注解传递参数;

特点:直观明了,当参数较少一般小于5个的时候,建议使用;

代码示例

1、xml


  <select id="selectByEmailAndSex2" resultMap="BaseResultMap">
    select
    <include refid="Base_Column_List" />
    from t_user a
    where a.email like CONCAT('%', #{email}, '%') and
    a.sex = #{sex}
  </select>

2、调用层

    Page<TUser> startPage = PageHelper.startPage(2, 3);
    List<TUser> list2 = mapper.selectByEmailAndSex2(email, sex);
    System.out.println(list2.size());

3、使用Java Bean的方式传递参数;

特点:当参数大于5个的时候,建议使用;

代码示例

1、xml


  <select id="selectByEmailAndSex3" resultMap="BaseResultMap"
    parameterType="com.enjoylearning.mybatis.entity.EmailSexBean">
    select
    <include refid="Base_Column_List" />
    from t_user a
    where a.email like CONCAT('%', #{email}, '%') and
    a.sex = #{sex}
  </select>

2、调用层

    EmailSexBean esb = new EmailSexBean();
    esb.setEmail(email);
    esb.setSex(sex);
    List<TUser> list3 = mapper.selectByEmailAndSex3(esb);
    System.out.println(list3.size());
目录
相关文章
|
1月前
|
Java 数据库连接 mybatis
Mybatis Plus保存数据返回主键id
Mybatis Plus保存数据返回主键id
19 1
|
4月前
|
Java 测试技术 数据库连接
【MyBatisPlus】MyBatisPlus 整合开发
【1月更文挑战第19天】【MyBatisPlus】MyBatisPlus 整合开发
|
4月前
|
SQL Oracle 关系型数据库
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
整合Mybatis-Plus高级,Oracle 主键Sequence,Sql 注入器实现自定义全局操作
92 0
|
1天前
|
Java 数据库连接 数据库
Springboot整合mybatisPlus开发
MyBatis-Plus是一个MyBatis的增强工具,旨在简化开发和提高效率。它在不修改原有MyBatis的基础上提供额外功能。要将MyBatis-Plus集成到SpringBoot项目中,首先通过Maven添加mybatis-plus-boot-starter和相应数据库驱动依赖,然后配置application.yml中的数据库连接信息,并指定Mapper类的扫描路径。Mapper接口可继承BaseMapper实现基本的CRUD操作。
|
2月前
|
安全 算法 Java
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架
27 0
|
4月前
|
Java 数据库连接 数据库
JAVAEE框架技术之10-myBatis注解式开发
JAVAEE框架技术之10-myBatis注解式开发
55 0
JAVAEE框架技术之10-myBatis注解式开发
|
4月前
|
SQL Java 数据库连接
快速上手MyBatis Plus:简化CRUD操作,提高开发效率!
快速上手MyBatis Plus:简化CRUD操作,提高开发效率!
|
4月前
|
SQL Java 数据库连接
Mybatis 开发神器 Fast MyBatis
Mybatis 开发神器 Fast MyBatis
38 1
|
4月前
|
Java 关系型数据库 MySQL
Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗?
Mybatis和Mybatis-Plus执行插入语句后可以返回主键ID吗?
56 0

相关实验场景

更多