文章目录
- 前言
- Java使用MyBatis实现对数据的批量添加与批量删除
- 一、MyBatis是什么?
- 二、使用步骤
- 1.引入库
- 2.数据模拟
- 3. 在项目下创建实体类及对应的mapper文件和mapper.xml文件
- 3.1.goods实体类
- 3.2.GoodsMapper文件
- 3.3.GoodsMapper.xml文件
- 3.4.工具类
- 3.5.测试类
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
Java使用MyBatis实现对数据的批量添加与批量删除
提示:以下是本篇文章正文内容,下面案例可供参考
一、MyBatis是什么?
MyBatis中文网 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
二、使用步骤
1.引入库
代码如下(示例):
首先在pom.xml文件中加入依赖,如下所示
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.15</version>
</dependency>
2.数据模拟
下面是我使用的数据库表
/*
Navicat Premium Data Transfer
Source Server : RpWn
Source Server Type : MySQL
Source Server Version : 50735 (5.7.35)
Source Host : localhost:3306
Source Schema : demo
Target Server Type : MySQL
Target Server Version : 50735 (5.7.35)
File Encoding : 65001
Date: 19/03/2024 19:11:07
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for goods
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`price` decimal(10, 2) NULL DEFAULT NULL,
`num` int(11) NULL DEFAULT 0,
`weight` decimal(10, 2) NULL DEFAULT NULL,
`cpu` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`memory` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`bodyMemory` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updateTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`isdel` bit(1) NULL DEFAULT b'0',
`categoryCode` varchar(7) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 146 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
3. 在项目下创建实体类及对应的mapper文件和mapper.xml文件
3.1.goods实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Alias("goods")
public class Goods {
int id;
String code;
String name;
double price;
int num;
double weight;
String cpu;
String memory;
String bodyMemory;
String createTime;
String updateTime;
String categoryCode;
}
3.2.GoodsMapper文件
public interface GoodsMapper {
int foreachAdd(List<Goods> list);
int removeMany(List<Integer> list);
}
3.3.GoodsMapper.xml文件
<mapper namespace="com.llf.mapper.GoodsMapper">
<insert id="foreachAdd" parameterType="java.util.List">
insert into goods (
code,
name,
price,
num,
weight,
cpu,
memory,
bodyMemory,
categoryCode
)
values
<foreach collection="list" item="goods" index="index" separator=",">
(
#{goods.code,jdbcType=VARCHAR},
#{goods.name,jdbcType=VARCHAR},
#{goods.price,jdbcType=DOUBLE},
#{goods.num,jdbcType=INTEGER},
#{goods.weight,jdbcType=DOUBLE},
#{goods.cpu,jdbcType=VARCHAR},
#{goods.memory,jdbcType=VARCHAR},
#{goods.bodyMemory,jdbcType=VARCHAR},
#{goods.categoryCode,jdbcType=VARCHAR}
)
</foreach>
</insert>
<delete id="removeMany">
update goods
set isdel=1
where id in
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>
因为我在做删除操作时是使用逻辑删除,即在表中添加了一个isdel
字段来表示是否删除,如果是物理删除则需要改为:
<delete id="removeMany">
delete from goods
where id in
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
这样就是把数据库表中的数据给删除了
3.4.工具类
利用单例模式创建唯一的SqlSessionFactory
实例对象,因为这个类是重量级的,而我们程序关闭前都使用同一个,所以我们要这样设计,减少资源浪费。
public class FactoryUtil {
@Getter
private static final SqlSessionFactory factory;
static {
InputStream is = FactoryUtil.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(is);
}
}
3.5.测试类
public void testForeachAdd() {
SqlSession session = FactoryUtil.getFactory().openSession(true);
GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class);
List<Goods> list = new ArrayList<>();
list.add(new Goods(0, "123", "zx", 32, 4, 34.5, "cpu", "16", "128", null, null, "123"));
list.add(new Goods(0, "132123", "z22x", 312, 41, 324.5, "cpu", "16", "128", null, null, "12123"));
list.add(new Goods(0, "231123", "z22x", 326, 46, 314.5, "cpu", "16", "128", null, null, "12311"));
int n = goodsMapper.foreachAdd(list);
System.out.println(n);
session.close();
}
public void testRemoveMany() {
SqlSession session = FactoryUtil.getFactory().openSession(true);
GoodsMapper goodsMapper = session.getMapper(GoodsMapper.class);
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int n = goodsMapper.removeMany(list);
System.out.println(n);
session.close();
}
提示:在MyBatis中对数据库数据进行增删改时默认事务不会自动提交,所以我们在创建SqlSession对象时要在openSession方法中加入一个参数true,即可自动提交事务。
总结
在使用MyBatis是要常看官方文档,MyBatis中文网,看文档看API我们才会更熟悉,才会更深刻的去使用别的框架。