mybatis插入单个对象 多个对象 key冲突更新操作
·
在mybatis操作过程中会有插入对象,批量插入表格等情况。下面对常见几种情形进行示例:
//根据id批量获取一批用户信息
List<User> queryByIds(List<Integer> Ids);
//批量插入user对象
int insertBatch(List<User> userList);
//插入单个对象
int insert(@Param("user") User user);
对应xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.home.test.UserMapper">
<select id="queryByIds" parameterType="java.util.List" resultMap="UserMap">
select id,name,age,update_time from user WHERE id IN
<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</select>
<update id="insertBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (name, age, update_time)
VALUES
<foreach collection="list" item="user" index="index" separator=",">
(#{user.name},#{user.age},#{user.updateTime})
</foreach>
ON DUPLICATE KEY UPDATE
update_time = VALUES(update_time)
</update>
<insert id="insert" parameterType="com.home.test.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (name, age, updateTime)
VALUES
(#{user.name},#{user.age},#{user.updateTime})
</insert>
</mapper>
说明:
queryByIds foreach按照list进行遍历 按照逗号进行拼接。
insertBatch 批量插入也是使用foreach方法。如果表格中有自增的主键可以指定useGeneratedKeys keyProperty 这样就不需要插入时设置值了。另外如果插入过程中想对部分重复的key只进行更新的操作,可以使用 ON DUPLICATE KEY UPDATE
ON DUPLICATE KEY UPDATE
update_time = VALUES(update_time)
//例如某个id已经存在,这个时候想只想更新 那么就在此处对指定的值更新即可
//当让也可以直接赋值update_time = NOW()
insert 在定义mapper接口是指定param的值 从该值读取数据 @Param(“user”) User user
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)