每次對資料庫添加和洗掉資料,都是單條資料進行操作是不是很麻煩?
接下來,我們來對資料庫的資料進行一個批量操作,完成批量的添加和修改!
實作其實也是非常簡單的,主要是用到Mybatis的動態sql,眾所周知,MyBatis一個強大的特性之一通常是它的動態 SQL 能力,那現在我們就用這個特性去完成資料的批量操作,
實作程序
- 第一步 準備資料庫和對應的物體類‘
public class Product {
private Long id;
private String name;
private BigDecimal price;
public Product(String name, BigDecimal price) {
this.name = name;
this.price = price;
}
public Product() {
}
注意:物體類應該遵循javabean規范,提供有參和無參構造,并提供對應欄位的get和set方法
2.第二步 創建MyBatisUtils工具類
public class MybatisUtils {
private static SqlSessionFactory sessionFactory ;
static{
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//根據io流創建SqlSessionFactory物件
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession openSession(){
if (sessionFactory != null) {
return sessionFactory.openSession();
}
return null;
}
}
- 第三步 準備介面撰寫批量操作的方法
public interface ProductMapper {
/*添加多條資料*/
void add(List<Product> products);
/*洗掉多條資料*/
void delete(List<Long> ids);
}
- 第四步 xml檔案中撰寫spl陳述句
<?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">
<!--注:namespace的內容就是ProductMapper介面的全限定名-->
<mapper namespace="cn.itstudy._01_batch.mapper.ProductMapper">
<!--id的值保證ProductMapper介面的方法名一值-->
<!-- /*添加多條資料*/
void add(List<Product> products);
-->
<!--批量添加
mybatis或把集合或者陣列放在map中
如果回傳是集合: key默認是list
如果回傳是陣列:key默認是array
item:每次遍歷的結果
separator:沒遍歷一次用什么作為分隔
-->
<insert id="add">
INSERT into product (name,price) VALUES
<foreach collection="list" item="p" separator=",">
(#{p.name},#{p.price})
</foreach>
</insert>
<!--/*洗掉多條資料*/
void delete(List<Long> ids);-->
<!--批量洗掉
-->
<delete id="delete">
DELETE FROM product WHERE id IN
/*遍歷id*/
/*open : 拼接sql以什么開始 close: 拼接字串以什么結束*/
<foreach collection="list" item="p_id" separator="," open="(" close=")">
#{p_id}
</foreach>
</delete>
</mapper>
- 第五步 測驗
通過封裝的Mybatis工具類 ,獲取到映射物件
@Test
public void testAdd(){
//獲取session
SqlSession session = MybatisUtil.openSession();
//獲取映射物件 代理模式
ProductMapper mapper = session.getMapper(ProductMapper.class);
ArrayList<Product> list = new ArrayList();
list.add(new Product("熱干面",new BigDecimal(36)));
list.add(new Product("酥油面",new BigDecimal(40)));
list.add(new Product("干脆面",new BigDecimal(55)));
//批量添加到資料庫
mapper.add(list);
//提交事物
session.commit();
}
增刪改,只要是資料庫的資料發生了變化,一定要記得提交事物!!!
組態檔主要是連接資料庫
<?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>
<!-- 加載jdbc.properties-->
<properties resource="jdbc.properties"/>
<!--申明操作資料庫的環境-->
<environments default="MYSQL">
<environment id="MYSQL">
<!--使用jdbc的事務-->
<transactionManager type="JDBC"/>
<!--支持連接池-->
<dataSource type="POOLED">
<!--自動補全結構:ctrl+shift+回車-->
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
<property name="driver" value="${jdbc.driverClassName}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加載mapper.xml檔案 這里引入sql陳述句的xml檔案-->
</mappers>
</configuration>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/241406.html
標籤:其他
上一篇:MySQL學習-排序與分組函式
