Insert
insert元素用来向数据库插入记录,结果返回一个整数,表示成功插入的记录条数。
RoleMapper接口
int insert(Role role);
roleMapper.xml<insert id="insert" parameterType="Role">
insert into role (role_name, note) values (#{roleName}, #{note})
</insert>
测试程序Role role = new Role();
role.setRoleName("Michael");
role.setNote("This is Michael's note.");
int num = roleMapper.insert(role);
System.out.println(num);
session.commit();
数据库id字段主键自增,结果输出1,查询数据库发现新增了一条Michael记录。注意调用session.commit(),因为mybatis默认数据源不自动提交。设置自动提交的方法:session = sqlSessionFactory.openSession(true);
指定openSession方法参数为true。主键回填
数据库设置了主键自增时,通过inser元素的useGeneratedKeys属性和keyProperty属性可以完成主键回填,即插入数据库成功后自动生成的主键字段值回填到参数javabean的主键属性中去。javabean 中的主键属性要有getter、setter方法。这在实际工作中很有用处。
roleMapper.xml
<insert id="insert" parameterType="Role" useGeneratedKeys="true" keyProperty="id">
insert into role (role_name, note) values (#{roleName}, #{note})
</insert>
测试代码Role role = new Role();
role.setRoleName("Michael");
role.setNote("This is Michael's note.");
roleMapper.insert(role);
System.out.println(role);
程序构建的Role对象没有设置id值,当执行inser方法之后,打印role发现,此时role对象id已经被设置了。查看数据库可以找到相应记录。
有时候数据库主键没有设置自增,或情况复杂,可以通过insert元素的子元素selectKey自定义主键生成规则
<insert id="insert" parameterType="Role" useGeneratedKeys="true" keyProperty="id">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="BEFORE">
select if(max(id) is null, 10001, max(id) + 1) as newId from role_cpy
</selectKey>
insert into role_cpy (id, role_name, note) values (#{id}, #{roleName}, #{note})
</insert>
order设置为BEFORE表示执行insert语句之前执行selectKey中的语句,根据主键生成规则生成id值,insert语句执行时,将生成的id值同时写入数据库,并且回填到javabean对象中id属性。update与delete
RoleMapper接口
int update(Role role);
int delete(Integer id);
roleMapper.xml<update id="update" parameterType="Role">
update role set
role_name = #{roleName},
note = #{note}
where id = #{id}
</update>
<delete id="delete" parameterType="java.lang.Integer">
delete from role where id = #{id}
</delete>