Oracle批量新增
1、创建 SEQUENCE ,用于自增主键
sql
CREATE SEQUENCE TEST_SEQ
minvalue 1
maxvalue 9999999999999999999
start with 1
increment by 1
cache 100;
2、创建实体类,用于存数据
java
@Data
@Accessors(chain = true)
public class Student {
/**
* 主键(自增用TEST_SEQ)
*/
private Long id;
/**
* 名字
*/
private String name;
}
3、造数据,不用造自增id
java
List<Student> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Student student = new Student();
student.setName(String.valueOf(Math.random()));
list.add(student);
}
// 获取自增id
List<Student> studentList = studentMapper.selectBatchidBySequence(list);
// 批量新增
Integer studentResults = studentMapper.insertBatchStudent(mpPointsOpenList);
4、使用 SEQUENCE ,获取自增id
xml
<select id="selectBatchidBySequence" resultType="com.zhao.test.pojo.Student">
select TEST_SEQ.nextval as id, t.* from (
<foreach collection="list" index="index" item="item" separator="union all">
select
#{item.name,jdbcType=VARCHAR} as name
from dual
</foreach>
)t
</select>
5、批量新增
xml
<insert id="insertBatchStudent">
insert into STUDENT (ID,NAME)
select * from (
<foreach collection="list" item="item" separator="union all">
select #{item.id,jdbcType=BIGINT},#{item.name,jdbcType=VARCHAR}
from dual
</foreach>
)
</insert>
Oracle批量修改
还是用之前的实体类做修改
1、造数据
java
List<Student> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Student student = new Student();
student.setName(String.valueOf(Math.random()));
// 这里应为数据库有的id
student.setId((long) (Math.random() * 1000));
list.add(student);
}
// 批量修改
Integer studentResults = studentMapper.updateBatchStudent(list);
2、批量修改
xml
<update id="updateBatchStudent">
<foreach collection="list" item="item" separator=";" open="begin" close=";end;">
update STUDENT
<trim prefix="set" suffixOverrides=",">
<if test="item.name != null">NAME=#{item.name},</if>
</trim>
where ID = #{item.id}
</foreach>
</update>