數據庫的批量操作

每次對數據庫添加和刪除數據,都是單條數據進行操作是不是很麻煩?
接下來,我們來對數據庫的數據進行一個批量操作,完成批量的添加和修改!

實現其實也是非常簡單的,主要是用到Mybatis的動態sql。衆所周知,MyBatis一個強大的特性之一通常是它的動態 SQL 能力。那現在我們就用這個特性去完成數據的批量操作。

實現過程

  1. 第一步 準備數據庫和對應的實體類‘
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;
    }
}
  1. 第三步 準備接口編寫批量操作的方法
public interface ProductMapper {

    /*添加多條數據*/
    void add(List<Product> products);

    /*刪除多條數據*/
    void delete(List<Long> ids);
}
  1. 第四步 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>
  1. 第五步 測試
    通過封裝的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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章