设为首页 收藏本站
查看: 1299|回复: 0

[经验分享] mybatis基础操作之批量操作

[复制链接]

尚未签到

发表于 2016-11-26 09:57:13 | 显示全部楼层 |阅读模式
  Mybatis批量操作,包括批量新增、修改、删除等,本次使用Oracle数据库进行操作。
  首先新建表

-- Create table
create table TEST_INSERT
(
ID        NUMBER not null,
NAME      VARCHAR2(12),
AGE       NUMBER(3),
STARTDATE DATE
)
-- Create/Recreate primary, unique and foreign key constraints
alter table TEST_INSERT
add primary key (ID)

  2新建JavaBean

package bean;
import java.util.Date;
public class TestInsert {
private long id;
public String toString() {
return "t [id=" + id + ", age=" + age + ", startDate="
+ startDate.toLocaleString()+ ", name=" + name + "]";
}
private int age;
private Date startDate;
private String name;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public TestInsert(long id, int age, Date startDate, String name) {
super();
this.id = id;
this.age = age;
this.startDate = startDate;
this.name = name;
}
public TestInsert() {
super();
}
public TestInsert(int age, Date startDate, String name) {
super();
this.age = age;
this.startDate = startDate;
this.name = name;
}
}

  首先是Mybatis使用注解方式批量新增

public interface TestInsertMapper {
@Insert("insert into test_insert (id, name, age, startDate) values (#{id}, #{name}, #{age}, #{startDate}) ")
public void insertTest(TestInsert test);
}
  mybatis.xml配置为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<!-- <setting name="useGeneratedKeys" value="true" /> -->
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25000" />
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url"
value="jdbc:oracle:thin:@localhost:1521:xe" />
<property name="username" value="admin" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- <mapper resource="config/score.xml" /> -->
<mapper resource="config/testinsert-mapper.xml"/>
<mapper class="mapper.TestInsertMapper"/>  
</mappers>
</configuration>

  对应的例子为:

public void batchInsert1() throws Exception {
SqlSession sqlSession = ssf.openSession(ExecutorType.BATCH);
TestInsertMapper pmapper = sqlSession.getMapper(TestInsertMapper.class);
long start = System.currentTimeMillis();
try {
for (int i = 0; i < 16; i++) {
pmapper.insertTest(testList.get(i));}
sqlSession.commit();
} finally {
sqlSession.close();
System.out.println((System.currentTimeMillis() - start) + " ms---");
}
}
  下面是for-each进行插入,对应的配置为:

<insert id="OracleBatchInsert" parameterType="java.util.List">
insert into test_insert(id, name, age, startDate)(
<foreach collection="list" item="test" index="index"
separator="union all">
select
#{test.id}, #{test.name}, #{test.age},
#{test.startDate}
from dual
</foreach>
)
</insert>
  测试例子和上面的差不多

public void batchInsert2() throws Exception {
SqlSession sqlSession = ssf.openSession();
long start = System.currentTimeMillis();
try {
sqlSession.insert("test.OracleBatchInsert", testList);
sqlSession.commit();
} finally {
sqlSession.close();
System.out.println((System.currentTimeMillis() - start) + " ms---");
}
}
  上面例子是主键自己指定的,接下来是使用Oracle的序列作为主键,对应的配置为

<insert id="OracleBatchSeqInsert" parameterType="java.util.List">
insert into test_insert(id, name, age, startDate)(
select
STUDENT_ID_SEQUENCE.NEXTVAL,A.* from(
<foreach collection="list" item="test" index="index"
separator="union all">
select #{test.name}, #{test.age},
#{test.startDate}
from dual
</foreach>
)A)
</insert>
  测试例子和上面一样
  接下来是批量更新,对应配置为

<update id="updateByIds" parameterType="map">
update test_insert
set startDate = #{startDate,jdbcType=TIMESTAMP} where id in
<foreach collection="list" item="item" index="index" open="("
close=")" separator=",">
#{item}
</foreach>
</update>
  测试例子为:

public void batchUpdate() {
SqlSession sqlSession = ssf.openSession();
long start = System.currentTimeMillis();
try {
Map map = new HashMap();
map.put("startDate", new Date());
map.put("list", idlist);
sqlSession.update("test.updateByIds", map);
sqlSession.commit();
} finally {
sqlSession.close();
//
System.out.println((System.currentTimeMillis() - start) + " ms---");
}
}
  最后是批量删除,配置如下:

<delete id="deleteBatch" parameterType="list">
delete from test_insert where id in
<foreach collection="list" item="item" index="index" open="("
close=")" separator=",">
#{item}
</foreach>
</delete>
  测试例子如下:

public void batchDelete() {
SqlSession sqlSession = ssf.openSession();
long start = System.currentTimeMillis();
try {
sqlSession.delete("test.deleteBatch", idlist);
sqlSession.commit();
} finally {
sqlSession.close();
//
System.out.println((System.currentTimeMillis() - start) + " ms---");
}
}
  全文完,源码就不打包了,上面都有,写的不好的地方,请多包涵,谢谢!
  --------------------------------------------------------------------------------------------
  Ibatis2 批量插入配置为:

<insert id="oraclebatchinsert" parameterClass="java.util.List">
insert into test_insert(id, name, age, startDate)(
<iterate conjunction="union all">
select
#idsList[].id#, #idsList[].name#, #idsList[].age#,
#idsList[].startDate#
from dual
</iterate>
)
</insert>
<insert id="oracleseqbatchinsert" parameterClass="java.util.List">
insert into test_insert(id, name, age, startDate)(
select
STUDENT_ID_SEQUENCE.NEXTVAL,A.* from(
<iterate conjunction="union all">
select
#idsList[].name#, #idsList[].age#,
#idsList[].startDate#
from dual
</iterate>
)A)
</insert>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305760-1-1.html 上篇帖子: Mybatis List列表In查询实现 下篇帖子: MyBatis动态SQL完整版 (转)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表