每次對數據庫添加和刪除數據,都是單條數據進行操作是不是很麻煩?
接下來,我們來對數據庫的數據進行一個批量操作,完成批量的添加和修改!
實現其實也是非常簡單的,主要是用到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>