`
顽石
  • 浏览: 166858 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

myibatis dao层update语句使用的generic po类

 
阅读更多

表数据更新语句类似: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类

为了解决该问题,写了个voUpdateVoTemplate,该类具有两个属性vo对象:newValue属性对象用于update语句setwhereValue属性用于where条件。这个类是generic类,实际使用时要传两个具体的vo类进行实例化。

/**

 *用于update sql语句的模板vo

 * @author wanggb

 *

 * @param <UpdateValueVo>  update setvo

 * @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)

   {

      ...

   }

}

 

3IpPoolDao方法: 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)如果UpdateValueVoWhereVo只有一个属性,例如:

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>

 

分享到:
评论

相关推荐

    mybatisDAO层自动生成插件

    MyBatis DAO层自动生成插件是一个非常实用的工具,它极大地简化了开发过程中DAO(Data Access Object)层的编写工作。MyBatis是Java领域的一款流行持久层框架,它允许开发者将SQL语句直接写在XML配置文件中,使得...

    Mybatis通用DAO设计封装(mybatis)

    Mybatis通用DAO设计封装主要涉及的是在Java开发中如何高效地使用Mybatis框架进行数据库操作。Mybatis是一款轻量级的持久层框架,它避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。通过提供自定义SQL、存储...

    Mybatis_dao.rar_mybatis dao_mybatis_dao.rar

    MybatisDAO是一个基于Java的持久层框架,它与Struts2、Spring3.0和MySQL数据库相结合,构建了一个高效、灵活的数据访问层。这个压缩包文件"**Mybatis_dao.rar_mybatis_dao_mybatis_dao.rar**"包含了实现这个集成项目...

    mybatis直接执行sql语句后续之一

    在IT行业中,MyBatis是一个广泛使用的持久层框架,它允许开发者直接编写SQL语句,提供了灵活的数据访问和映射机制。这篇博客“mybatis直接执行sql语句后续之一”可能探讨了如何在MyBatis中高效且有效地执行SQL操作。...

    mybatis-generator 自动生成mybatis dao model层代码

    mybatis-generator 自动生成mybatis dao model层代码

    dao层动态代理实现demo

    spring+mybatis dao层使用动态代理实现org.mybatis.spring.mapper.MapperScannerConfigurer类设置属性指定dao接口以及sqlSessionFactory 或SqlSessionTemplate

    Mybatis案例一所用建表语句

    在IT行业中,Mybatis是一个广泛使用的持久层框架,它提供了灵活的SQL映射功能和简单的对象映射,使得Java开发者可以方便地操作数据库。本文将深入探讨Mybatis的基础知识,特别是针对“Mybatis案例一所用建表语句”,...

    对dbunit进行mybatis DAO层Excel单元测试(必看篇)

    在mybatis DAO层中,可以使用dbunit来进行单元测试。首先,需要在pom.xml文件中添加相关的依赖项,然后创建一个unitils.properties配置文件,用于配置自定义拓展模块,数据加载等相关信息。接着,使用dbunit来进行...

    根据表结构自动生成bean类和mybatis dao类

    在MyBatis中,DAO类会包含SQL语句,并通过MyBatis的XML配置文件或者注解方式来实现。 自动化的Bean和DAO生成工具通常工作流程如下: 1. **连接数据库**:工具首先需要连接到指定的数据库,获取数据库的元数据,...

    mybatis基于Dao的crud操作源码

    本项目是基于Mybatis进行DAO(Data Access Object)层的CRUD(Create、Read、Update、Delete)操作的源码实现,结合了Spring框架,便于管理和集成事务。 在Mybatis中,CRUD操作主要通过Mapper接口和对应的XML配置...

    mybatis生成对应的dao/model/mapper

    MyBatis Generator(MBG)是一个强大的工具,用于自动生成MyBatis的DAO层、Model层和Mapper XML文件。这个工具极大地简化了开发过程,减少了手动编写这些常见代码的工作量,提高了开发效率。下面我们将详细探讨...

    生成mybatis的实体类+dao层+xml层

    为了提高开发效率,我们可以借助特定的工具或插件来实现自动代码生成,这就是"生成mybatis的实体类+DAO层+xml层"的目的。 首先,我们需要理解MyBatis中的主要组件。实体类是Java对象,它们通常对应于数据库表的记录...

    idea的mybatis插件支持从dao到maper

    本文将详细介绍Idea的Mybatis插件及其如何帮助我们从DAO层直接进入Mapper文件,从而实现更便捷的Mybatis相关DAO到Mapper的开发。 MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis...

    mybatis dao xml 代码生成工具

    MyBatis DAO XML 代码生成工具是一款高效实用的开发辅助软件,主要针对MyBatis框架,帮助开发者自动生成DAO(Data Access Object)层和对应的XML映射文件。使用这款工具,开发者无需手动编写大量重复的SQL操作代码,...

    springboot+mybatis(mybatis dao与xml文件自动生成)

    在Spring Boot和MyBatis框架集成的开发过程中,自动化生成DAO层接口与对应的XML配置文件可以极大地提高开发效率。下面将详细介绍如何实现这一功能,并深入探讨相关知识点。 首先,Spring Boot是一个快速开发框架,...

    mybatis动态SQL语句

    if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis

    Mybatis和orcale update语句中接收参数为对象的实例代码

    在MyBatis的`mapper.xml`文件中,我们可以创建一个UPDATE语句,并使用`if`标签来判断UserDTO对象的各个属性是否为空。如果属性不为空,那么就将其设置到UPDATE语句中。下面是一个示例: ```xml &lt;update id="updata...

    mybatis 自动生成实体类dao

    MyBatis Generator (MBG) 是一款强大的工具,它能够自动生成MyBatis的实体类、DAO接口以及Mapper XML文件,极大地提高了开发效率。在Java Web开发中,MyBatis作为一个优秀的持久层框架,它的自动代码生成器MBG是其...

    Mybatis通用增删改查

    在Mybatis中,Dao接口的实现类通常是DaoImpl,这个实现类会包含具体的SQL执行逻辑。基础的DaoImpl意味着它提供了一些基本的CRUD操作,例如保存(Insert)、查询(Select)、更新(Update)和删除(Delete)等方法,...

    MyBatis链接MySql数据库,在Dao层处理

    在本示例中,我们将探讨如何使用MyBatis连接到MySQL数据库并在Dao层进行数据处理。这对于初学者来说是一个很好的起点,可以帮助理解MyBatis的基础操作。 1. **MyBatis简介** MyBatis消除了几乎所有的JDBC代码和...

Global site tag (gtag.js) - Google Analytics