Mybatis如何使用动态语句实现批量删除(delete结合foreach)

网友投稿 356 2022-08-21


Mybatis如何使用动态语句实现批量删除(delete结合foreach)

目录下面我将演示如何使用动态语句批量删除数据库数据下面是项目的结构1、IEmpDAO.java为接口提供批量删除数据方法2、EmpDAOImpl.java为接口的实现类3、MybatisSqlSessionFactory.java4、Emp.java为实体类5、Emp.xml为映射文件6、mybatis_cfg.xml为mybatis主配置文件7、pom.xml为maven引入依赖的文件8、Test.java为测试类

下面我将演示如何使用动态语句批量删除数据库数据

本人在数据库建了一张emp员工表(表的数据自己填充),表的结构如下:

批量删除的核心代码为,在实体映射文件中配置如下的代码:

delete from emp where empno in

separator="," close=")">

#{arr}

separator="," close=")">

#{arr}

下面是项目的结构

本人使用的是maven搭建的web项目

IEmpDAO.java为接口提供批量删除数据方法,EmpDAOImpl.java为接口的实现类,MybatisSqlSessionFactory.java为本人创建的获取sqlSession的工具类,Emp.java为实体类,Emp.xml为映射文件,mybatis_cfg.xml为mybatis主配置文件,Test.java为测试类,pom.xml为maven引入依赖的文件。

1、IEmpDAO.java为接口提供批量删除数据方法

/**

* 批量删除

*

* @param arr

* @return

*/

public boolean doRemoveeMore(int[] arr);

2、EmpDAOImpl.java为接口的实现类

public boolean doRemoveeMore(int[] arr) {

SqlSession sqlSession = null;

try {

sqlSession = MybatisSqlSessionFactory.getmysqlSession();

int result = sqlSession.delete("cn.sz.hcq.pojo.Emp.deleteMoreEmp",

arr);

sqlSession.commit();

return result > 0 ? true : false;

} catch (Exception e) {

e.printStackTrace();

sqlSession.rollback();

} finally {

MybatisSqlSessionFactory.closeSqlSession();

}

return false;

}

3、MybatisSqlSessionFactory.java

为本人创建的获取sqlSession的工具类

package cn.sz.hcq.factory;

import java.io.IOException;

import java.io.Reader;

import org.apache.ibatis.io.Resources;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisSqlSessionFactory {

// 配置文件

private static final String RESOURCrMlpcWfcCE = "mybatis_cfg.xml";

private static Reader reader = null;

private static SqlSessionFactoryBuilder builder = null;

private static SqlSessionFactory factory = null;

// 可以在同一个线程范围内,共享一个对象

private static ThreadLocal threadLocal = new ThreadLocal();

// 静态代码块(类加载的时候执行一次)

static {

try {

reader = Resources.getResourceAsReader(RESOURCE);

builder = new SqlSessionFactoryBuilder();

factory = builder.build(reader);

} catch (IOException e) {

e.printStackTrace();

}

}

public static SqlSession getMySqlSession() {

// 从本地线程中获取session连接

SqlSession sqlSession = threadLocal.get();

// 连接为空则创建连接,并将该连接添加到本地线程中去

if (sqlSession == null) {

if (factory == null) {

rebuildFactory();

}

sqlSession = factory.openSession();

}

threadLocal.set(sqlSession);

return sqlSession;

}

// 创建工厂

public static void rebuildFactory() {

try {

reader = Resources.getResourceAsReader(RESOURCE);

builder = new SqlSessionFactoryBuilder();

factory = builder.build(reader);

} catch (IOException e) {

e.printStackTrace();

}

}

// 关闭连接

public static void closeSqlSession() {

SqlSession sqlSession = threadLocal.get();

if (sqlSession != null) {

// 关闭session

sqlSession.close();

}

// 同时将本地线程中置为null(防止用户再次调用时出现空的session)

threadLocal.set(null);

}

}

4、Emp.java为实体类

public class Emp implements Serializable {

private Integer empno;

private String ename;

private String job;

private Integer mgr;

private Date hiredate;

private Double sal;

private Double comm;

private Integer deptno;

public Integer getEmpno() {

return empno;

}

public void setEmpno(Integer empno) {

this.empno = empno;

}

public String getEname() {

return ename;

}

public void setEname(String ename) {

this.ename = ename;

}

public String getJob() {

return job;

}

public void setJob(String job) {

this.job = job;

}

public Integer getMgr() {

return mgr;

}

public void setMgr(Integer mgr) {

this.mgr = mgr;

}

public Date getHiredate() {

return hiredate;

}

public void setHiredate(Date hiredate) {

this.hiredate = hiredate;

}

public Double getSal() {

return sal;

}

public void setSal(Double sal) {

this.sal = sal;

}

public Double getComm() {

return comm;

}

public void setComm(Double comm) {

this.comm = comm;

}

public Integer getDeptno() {

return deptno;

}

public void setDeptno(Integer deptno) {

this.deptno = deptno;

}

}

5、Emp.xml为映射文件

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

delete from emp where empno in

separator="," close=")">

#{arr}

separator="," close=")">

#{arr}

6、mybatis_cfg.xml为mybatis主配置文件

"http://mybatis.org/dtd/mybatis-3-config.dtd">

7、pom.xml为maven引入依赖的文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

cn.sz.hcq.pro

Mybatis_04

0.0.1-SNAPSHOT

war

org.mybatis

mybatis

3.2.3

mysql

mysql-connector-java

5.1.39

8、Test.java为测试类

public class Test {

public static void main(String[] args) {

IEmpDAO empDAO = new EmpDAOImpl();

System.out.println("----------批量删除----------");

int[] arr = { 7791, 7792 };//删除的主键

boolean removeeMore = empDAO.doRemoveeMore(arr);

System.out.println("批量删除的结果:" + removeeMore);

}

}

完成代码后,运行测试类就可以完成批量删除。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java十分钟精通Log4j日志的使用
下一篇:java线程池不同场景下使用示例经验总结
相关文章

 发表评论

暂时没有评论,来抢沙发吧~