数据库的批量操作

每次对数据库添加和删除数据,都是单条数据进行操作是不是很麻烦?
接下来,我们来对数据库的数据进行一个批量操作,完成批量的添加和修改!

实现其实也是非常简单的,主要是用到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>
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值