在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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐