Mybatis怎么使用动态语句实现批量删除(mybatis,开发技术)

时间:2024-05-03 11:08:24 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

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

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

Mybatis怎么使用动态语句实现批量删除

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

<!--批量删除--> <deleteid="deleteMoreEmp"parameterType="int[]"> <!--deletefromempwhereempnoin(7789,7790)--> <!--forEach:用来循环collection:用来指定循环的数据的类型可以填的值有:array,list,mapitem :循环中为每个循环的数据指定一个别名index:循环中循环的下标open:开始close:结束separator:数组中元素之间的分隔符--> deletefromempwhereempnoin <foreachcollection="array"item="arr"index="no"open="(" separator=","close=")"> #{arr} </foreach> </delete>

下面是项目的结构

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

Mybatis怎么使用动态语句实现批量删除

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

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

/** *批量删除 * *@paramarr *@return */ publicbooleandoRemoveeMore(int[]arr);

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

 publicbooleandoRemoveeMore(int[]arr){ SqlSessionsqlSession=null; try{ sqlSession=MybatisSqlSessionFactory.getMySqlSession(); intresult=sqlSession.delete("cn.sz.hcq.pojo.Emp.deleteMoreEmp", arr); sqlSession.commit(); returnresult>0?true:false; }catch(Exceptione){ e.printStackTrace(); sqlSession.rollback(); }finally{ MybatisSqlSessionFactory.closeSqlSession(); } returnfalse; }

3、MybatisSqlSessionFactory.java

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

packagecn.sz.hcq.factory;importjava.io.IOException;importjava.io.Reader;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;publicclassMybatisSqlSessionFactory{ //配置文件 privatestaticfinalStringRESOURCE="mybatis_cfg.xml"; privatestaticReaderreader=null; privatestaticSqlSessionFactoryBuilderbuilder=null; privatestaticSqlSessionFactoryfactory=null; //可以在同一个线程范围内,共享一个对象 privatestaticThreadLocal<SqlSession>threadLocal=newThreadLocal<SqlSession>(); //静态代码块(类加载的时候执行一次) static{ try{ reader=Resources.getResourceAsReader(RESOURCE); builder=newSqlSessionFactoryBuilder(); factory=builder.build(reader); }catch(IOExceptione){ e.printStackTrace(); } } publicstaticSqlSessiongetMySqlSession(){ //从本地线程中获取session连接 SqlSessionsqlSession=threadLocal.get(); //连接为空则创建连接,并将该连接添加到本地线程中去 if(sqlSession==null){ if(factory==null){ rebuildFactory(); } sqlSession=factory.openSession(); } threadLocal.set(sqlSession); returnsqlSession; } //创建工厂 publicstaticvoidrebuildFactory(){ try{ reader=Resources.getResourceAsReader(RESOURCE); builder=newSqlSessionFactoryBuilder(); factory=builder.build(reader); }catch(IOExceptione){ e.printStackTrace(); } } //关闭连接 publicstaticvoidcloseSqlSession(){ SqlSessionsqlSession=threadLocal.get(); if(sqlSession!=null){ //关闭session sqlSession.close(); } //同时将本地线程中置为null(防止用户再次调用时出现空的session) threadLocal.set(null); }}

4、Emp.java为实体类

publicclassEmpimplementsSerializable{ privateIntegerempno; privateStringename; privateStringjob; privateIntegermgr; privateDatehiredate; privateDoublesal; privateDoublecomm; privateIntegerdeptno; publicIntegergetEmpno(){ returnempno; } publicvoidsetEmpno(Integerempno){ this.empno=empno; } publicStringgetEname(){ returnename; } publicvoidsetEname(Stringename){ this.ename=ename; } publicStringgetJob(){ returnjob; } publicvoidsetJob(Stringjob){ this.job=job; } publicIntegergetMgr(){ returnmgr; } publicvoidsetMgr(Integermgr){ this.mgr=mgr; } publicDategetHiredate(){ returnhiredate; } publicvoidsetHiredate(Datehiredate){ this.hiredate=hiredate; } publicDoublegetSal(){ returnsal; } publicvoidsetSal(Doublesal){ this.sal=sal; } publicDoublegetComm(){ returncomm; } publicvoidsetComm(Doublecomm){ this.comm=comm; } publicIntegergetDeptno(){ returndeptno; } publicvoidsetDeptno(Integerdeptno){ this.deptno=deptno; }}

5、Emp.xml为映射文件

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="cn.sz.hcq.pojo.Emp"> <!--批量删除--> <deleteid="deleteMoreEmp"parameterType="int[]"> <!--deletefromempwhereempnoin(7789,7790)--> <!--forEach:用来循环collection:用来指定循环的数据的类型可以填的值有:array,list,mapitem :循环中为每个循环的数据指定一个别名index:循环中循环的下标open:开始close:结束separator:数组中元素之间的分隔符--> deletefromempwhereempnoin <foreachcollection="array"item="arr"index="no"open="(" separator=","close=")"> #{arr} </foreach> </delete></mapper>

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

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!--数据源--> <environmentsdefault="myconn"> <environmentid="myconn"> <!--事务管理方式--> <transactionManagertype="JDBC"></transactionManager> <!--数据库连接参数--> <dataSourcetype="POOLED"> <!--type:数据源连接的方式,POOLED:连接池方式,UNPOOLED:非连接池的方式,JNDI:java命名与目录接口方式--> <propertyname="driver"value="org.gjt.mm.mysql.Driver"></property> <propertyname="url"value="jdbc:mysql://localhost:3306/db"></property> <propertyname="username"value="root"></property> <propertyname="password"value="root"></property> </dataSource> </environment> </environments> <!--引入实体映射文件--> <mappers> <mapperresource="cn/sz/hcq/pojo/Emp.xml"/> </mappers> <!--配置的参数--></configuration>

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

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.sz.hcq.pro</groupId> <artifactId>Mybatis_04</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!--https://mvnrepository.com/artifact/org.mybatis/mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.3</version> </dependency> <!--https://mvnrepository.com/artifact/mysql/mysql-connector-java--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> </dependencies></project>

8、Test.java为测试类

publicclassTest{ publicstaticvoidmain(String[]args){ IEmpDAOempDAO=newEmpDAOImpl(); System.out.println("----------批量删除----------"); int[]arr={7791,7792};//删除的主键 booleanremoveeMore=empDAO.doRemoveeMore(arr); System.out.println("批量删除的结果:"+removeeMore); }}

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

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:Mybatis怎么使用动态语句实现批量删除的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:如何使用Python创建条形图追赶动画下一篇:

8 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18