表数据更新语句类似: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>
相关推荐
mybatisDAO层自动生成插件,使用前需根据自己的操作系统,修改配置文件中代码生成的目录即可。
mybatis-generator 自动生成mybatis dao model层代码
spring+mybatis dao层使用动态代理实现org.mybatis.spring.mapper.MapperScannerConfigurer类设置属性指定dao接口以及sqlSessionFactory 或SqlSessionTemplate
Mybatis案例一所用建表语句Mybatis案例一所用建表语句Mybatis案例一所用建表语句
适用于springboot(整合过mybatis的)和常规SSM项目,可以获取完整的mybatis执行的sql语句,用于直观的看到执行sql是否异常
NULL 博文链接:https://zhaoshijie.iteye.com/blog/2003209
NULL 博文链接:https://benworld.iteye.com/blog/1841031
springboot+mybatis(mybatis dao与xml文件自动生成)
MyBatis在webApp中的使用,此种使用方式是实现dao层接口,并未让mybatis自动生成dao接口的实现类
if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis
另一种机制采用xml文件形式实现dao、service、controller层封装,具体业务类只需继承就可实现基本的CRUD操作,整个工程导入即可运行(一个月心算之作,稍贵一点,下载以后大部分资料都不需要看了)
springMvc+Mybatis 最新版+Dao 层封装; 使用了 2016-07-28 maven 上下载的当前最新版本jar包 4.3.2 搭建的 springMVC + Mybatis +DAO 层封装..仅供参考学习...
Mybatis的 mapper.xml 中 update 语句使用 if 标签判断对像属性是否为空值。本文重点给大家介绍Mybatis和orcale update语句中接收参数为对象的实例代码,需要的朋友参考下吧
关于mybatis自动生成语句,还有一些jar,需要的联系我
自动读取数据库表结构,生成bean和mybatis dao文件,dao含基本的增删改查和分页方法
使用MyBatis Generator生成DAO
可以生成mybatis的dao层和xml文件,在generatorConfig.xml中修改相关的数据库信息,然后运行main方法。
把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。 明确: 我们在实际开发中,都是越简便越好,...
Mybatis执行SQL语句的方式
mybatis 自动生成实体类dao