表数据更新语句类似:update 表名 set field1= value1,field2=value2 where 条件字段1=value3 and 条件字段2= value4;
在dao层,value1~value4一般是从一个vo值对象的属性中取值(不纠结于vo、po、bo、dto这些概念和区别,这里把dao层中的pojo也称为vo),这种方式存在的一个问题是:在这个vo对象中,不容易分辨出哪些属性用于set新值,哪些属性用于where条件中。
UpdateVoTemplate类
为了解决该问题,写了个vo类UpdateVoTemplate,该类具有两个属性vo对象:newValue属性对象用于update语句set,whereValue属性用于where条件。这个类是generic类,实际使用时要传两个具体的vo类进行实例化。
/**
*用于update sql语句的模板vo
* @author wanggb
*
* @param <UpdateValueVo> update set值vo
* @param <WhereVo> update where条件vo
*/
public class UpdateVoTemplate<UpdateValueVo,WhereVo>
{
private UpdateValueVo newValue;
private WhereVo whereValue;
public UpdateVoTemplate(UpdateValueVo newValue,WhereVo where) {
this.whereValue = where;
this.newValue = newValue;
}
// get方法省略
}
使用demo
如果有个这样的更新ip数据的语句update ip_pool set status =2,session_id='s001' where status =1 and ip in('58.215.180.214');
1)提取sql语句status=2,session_id='s001'中的两个属性产生一个IpStatusSetVo对象
public class IpStatusSetVo
{
private int status;
private String session_id;
//getter and setter方法省略
public IpStatusSetVo(int status, String session_id)
{
...
}
}
2)提取where status =1 and ip in('58.215.180.214')中的两个属性产生一个IpStatusWhereCondVo对象
public class IpStatusWhereCondVo
{
private int status;
private String[ ] ips;
//getter and setter方法省略
public IpStatusWhereCondVo (int status, String[ ] ips)
{
...
}
}
3)IpPoolDao方法: int updateIpStatus(UpdateVoTemplate<IpStatusSetVo, IpStatusWhereCondVo> ipStatusUpdateVo); //使用上面的两个类IpStatusSetVo, IpStatusWhereCondVo实例化模板类UpdateVoTemplate
4)对应的myibatis sql语句
<update id="updateIpStatus" parameterType="updateVoTemplate" flushCache="true">
update ip_pool set status= #{newValue.status},session_id=#{newValue.session_id}
where status = #{whereValue.status} and ip in
<foreach collection="whereValue.ips" index="index" item="item"
open="(" separator="," close=")">
#{item}
</foreach>
</update>
5)service层调用:
IpStatusSetVo newValueVo = new IpStatusSetVo(2,"s001");
IpStatusWhereCondVo whereValuevo = new IpStatusWhereCondVo(1,new String[]{"58.215.180.214"});
UpdateVoTemplate< IpStatusSetVo, IpStatusWhereCondVo> ipStatusUpdateVo = new UpdateVoTemplate<IpStatusSetVo, IpStatusWhereCondVo>(newValueVo, whereValuevo);
ipPoolDao.updateIpStatus(ipStatusUpdateVo);
6)如果UpdateValueVo或WhereVo只有一个属性,例如:
update ip_pool set status=2,session_id='s001' where ip='58.215.180.214';
该语句中的where条件只有一个ip字段,则可简化为UpdateVoTemplate<IpStatusSetVo,String>
调用如下:
IpStatusSetVo newValueVo = new IpStatusSetVo(2,"s001");
UpdateVoTemplate< IpStatusSetVo,String> ipStatusUpdateVo = new UpdateVoTemplate< IpStatusSetVo,String>(newValueVo, "58.215.180.214");
ipPoolDao.updateIpStatus(ipStatusUpdateVo);
sql如下:
<update id="updateIpStatus" parameterType="updateVoTemplate" flushCache="true">
update ip_pool set status= #{newValue.status},session_id=#{newValue.session_id}
where ip = #{whereValue}
</update>
相关推荐
MyBatis DAO层自动生成插件是一个非常实用的工具,它极大地简化了开发过程中DAO(Data Access Object)层的编写工作。MyBatis是Java领域的一款流行持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,使得...
Mybatis通用DAO设计封装主要涉及的是在Java开发中如何高效地使用Mybatis框架进行数据库操作。Mybatis是一款轻量级的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。通过提供自定义SQL、存储...
MybatisDAO是一个基于Java的持久层框架,它与Struts2、Spring3.0和MySQL数据库相结合,构建了一个高效、灵活的数据访问层。这个压缩包文件"**Mybatis_dao.rar_mybatis_dao_mybatis_dao.rar**"包含了实现这个集成项目...
在IT行业中,MyBatis是一个广泛使用的持久层框架,它允许开发者直接编写SQL语句,提供了灵活的数据访问和映射机制。这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。...
mybatis-generator 自动生成mybatis dao model层代码
spring+mybatis dao层使用动态代理实现org.mybatis.spring.mapper.MapperScannerConfigurer类设置属性指定dao接口以及sqlSessionFactory 或SqlSessionTemplate
在IT行业中,Mybatis是一个广泛使用的持久层框架,它提供了灵活的SQL映射功能和简单的对象映射,使得Java开发者可以方便地操作数据库。本文将深入探讨Mybatis的基础知识,特别是针对“Mybatis案例一所用建表语句”,...
在mybatis DAO层中,可以使用dbunit来进行单元测试。首先,需要在pom.xml文件中添加相关的依赖项,然后创建一个unitils.properties配置文件,用于配置自定义拓展模块,数据加载等相关信息。接着,使用dbunit来进行...
在MyBatis中,DAO类会包含SQL语句,并通过MyBatis的XML配置文件或者注解方式来实现。 自动化的Bean和DAO生成工具通常工作流程如下: 1. **连接数据库**:工具首先需要连接到指定的数据库,获取数据库的元数据,...
本项目是基于Mybatis进行DAO(Data Access Object)层的CRUD(Create、Read、Update、Delete)操作的源码实现,结合了Spring框架,便于管理和集成事务。 在Mybatis中,CRUD操作主要通过Mapper接口和对应的XML配置...
MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的DAO层、Model层和Mapper XML文件。这个工具极大地简化了开发过程,减少了手动编写这些常见代码的工作量,提高了开发效率。下面我们将详细探讨...
为了提高开发效率,我们可以借助特定的工具或插件来实现自动代码生成,这就是"生成mybatis的实体类+DAO层+xml层"的目的。 首先,我们需要理解MyBatis中的主要组件。实体类是Java对象,它们通常对应于数据库表的记录...
本文将详细介绍Idea的Mybatis插件及其如何帮助我们从DAO层直接进入Mapper文件,从而实现更便捷的Mybatis相关DAO到Mapper的开发。 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis...
MyBatis DAO XML 代码生成工具是一款高效实用的开发辅助软件,主要针对MyBatis框架,帮助开发者自动生成DAO(Data Access Object)层和对应的XML映射文件。使用这款工具,开发者无需手动编写大量重复的SQL操作代码,...
在Spring Boot和MyBatis框架集成的开发过程中,自动化生成DAO层接口与对应的XML配置文件可以极大地提高开发效率。下面将详细介绍如何实现这一功能,并深入探讨相关知识点。 首先,Spring Boot是一个快速开发框架,...
if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis
在MyBatis的`mapper.xml`文件中,我们可以创建一个UPDATE语句,并使用`if`标签来判断UserDTO对象的各个属性是否为空。如果属性不为空,那么就将其设置到UPDATE语句中。下面是一个示例: ```xml <update id="updata...
MyBatis Generator (MBG) 是一款强大的工具,它能够自动生成MyBatis的实体类、DAO接口以及Mapper XML文件,极大地提高了开发效率。在Java Web开发中,MyBatis作为一个优秀的持久层框架,它的自动代码生成器MBG是其...
在Mybatis中,Dao接口的实现类通常是DaoImpl,这个实现类会包含具体的SQL执行逻辑。基础的DaoImpl意味着它提供了一些基本的CRUD操作,例如保存(Insert)、查询(Select)、更新(Update)和删除(Delete)等方法,...
在本示例中,我们将探讨如何使用MyBatis连接到MySQL数据库并在Dao层进行数据处理。这对于初学者来说是一个很好的起点,可以帮助理解MyBatis的基础操作。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和...