05.Mybatis初级使用-Mapper映射器(二)

本文详细介绍了使用MyBatis实现数据库的基本操作CRUD,包括插入(insert)、更新(update)、删除(delete)等方法的实现方式及注意事项。特别关注了主键自动生成与回填、自定义主键生成规则等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值