MyBatis insert实体如何返回主键
程序员文章站
2022-06-27 10:42:32
目录insert实体如何返回主键一、insert 属性详解二、mapper接口三、执行mapper.xml 返回主键四、测试结果六、批量插入七、小结一下mybatis添加记录,返回主键idinsert...
insert实体如何返回主键
一、insert 属性详解
-
parametertype
:入参的全限定类名或类型别名 -
keycolumn
:设置数据表自动生成的主键名。对特定数据库(如postgresql),若自动生成的主键不是第一个字段则必须设置 -
keyproperty
:默认值unset,用于设置getgeneratedkeys方法或selectkey子元素返回值将赋值到领域模型的哪个属性中 -
usegeneratedkeys
:取值范围true|false(默认值),设置是否使用jdbc的getgenereatedkeys方法获取主键并赋值到keyproperty设置的领域模型属性中。mysql和sqlserver执行auto-generated key field,因此当数据库设置好自增长主键后,可通过jdbc的getgeneratedkeys方法获取。但像oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了 -
statementtype
:取值范围statement,prepared(默认值),callable -
flushcache
:取值范围true(默认值)|false,设置执行该操作后是否会清空二级缓存和本地缓存 -
timeout
:默认为unset(依赖jdbc驱动器的设置),设置执行该操作的最大时限,超时将抛异常 -
databaseid
:取值范围oracle|mysql等,表示数据库厂家,元素内部可通过`<if test="_databaseid = 'oracle'">`来为特定数据库指定不同的sql语句
二、mapper接口
三、执行mapper.xml 返回主键
两种方式均满足需求。
注意:mapper接口返回值依然是成功插入的记录数,但不同的是主键值已经赋值到领域模型实体的id中了。
四、测试结果
六、批量插入
<insert id="add" parametertype="com.test.model.course"> <foreach collection="list" item="item" index="index" separator=";"> insert into tb_course (course_name, teacher_name, course_week, course_time, place, gmt_create, gmt_modify) values (#{coursename,jdbctype=varchar}, #{teachername,jdbctype=varchar}, #{courseweek,jdbctype=varchar}, #{coursetime,jdbctype=varchar}, #{place,jdbctype=varchar}, #{gmtcreate,jdbctype=timestamp}, #{gmtmodify,jdbctype=timestamp}) </foreach></insert>
七、小结一下
两种方式:
1、添加属性 usegeneratedkeys="true" keyproperty="id"
2、添加代码
<selectkey resulttype="java.lang.short" order="after" keyproperty="id"> select last_insert_id() as id </selectkey>
推荐使用第一种!
mybatis添加记录,返回主键id
role.java实体类
public class role implements serializable { private string roleid; private string name; private integer status; public string getroleid() { return roleid; } public void setroleid(string roleid) { this.roleid = roleid; } public string getname() { return name; } public void setname(string name) { this.name = name; } public integer getstatus() { return status; } public void setstatus(integer status) { this.status = status; } }
sysroledao.java
public interface sysroledao { public int addrole(sysrole role); }
mapper-role.xml
<insert id="addrole" parametertype="sysrole" usegeneratedkeys="true" keyproperty="roleid" keycolumn="role_id"> insert into t_sys_role( name,status ) values( #{name,jdbctype=varchar}, #{status,jdbctype=varchar}, ) </insert>
注:
1、添加记录能够返回主键的关键点在于需要在<insert>标签中添加以下三个属性<insert usegeneratedkeys="true" keyproperty="id" keycolumn="id"></insert>。
-
usegeneratedkeys
:必须设置为true,否则无法获取到主键id。 -
keyproperty
:设置为pojo对象的主键id属性名称。 -
keycolumn
:设置为数据库记录的主键id字段名称
2、新添加主键id并不是在执行添加操作时直接返回的,而是在执行添加操作之后将新添加记录的主键id字段设置为pojo对象的主键id属性
testdao.java
@runwith(springjunit4classrunner.class) @contextconfiguration(locations= {"classpath:config/spring-core.xml","classpath:config/spring-web.xml"}) public class testdao{ @autowired sysroledao roledao; @test public void test() { sysrole role=new sysrole(); role.setname("admin10"); role.setstatus(1); system.out.println("返回结果:"+roledao.addrole(role)); system.out.println("主键id:"+role.getroleid()); } }
打印结果
返回结果:1
主键id:12
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
上一篇: 黑鲨4pro手机如何开启鲨鲨酱?黑鲨4pro开启鲨鲨酱的方法
下一篇: Go各时间字符串使用解析