java 触发器_用java触发器的实现松耦合

本文介绍了如何使用Java实现一个松耦合的触发器机制,通过定义接口`TriggerClientUpdateInf`,在客户信息更新后,销售记录和合同记录等模块可以通过实现该接口并放入统一的列表中,由客户更新处的代码遍历执行,从而达到更新相关记录的目的,降低了各模块间的依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class Client

{

@Id

@GeneratedValue(generator = "uuidGenerator")

@GenericGenerator(name = "uuidGenerator", strategy = "uuid")

@Column(length = 32)

private String id;//标识

@Column(length = 10)

private String code; //编号

@Column(length = 50)

private String name; //名称

//其他省略

}

客户销售记录类

public class Sell

{

@Id

@GeneratedValue(generator = "uuidGenerator")

@GenericGenerator(name = "uuidGenerator", strategy = "uuid")

@Column(length = 32)

private String id;//标识

@Column

private double price;//单价

@Column

private double amount;//数量

@Column

private double money;//金额

@Column(length = 32)

private String clientId; //客户ID

@Column(length = 50)

private String clientName; //客户名称

//其他省略

}

客户合同记录类

public class Contract

{

@Id

@GeneratedValue(generator = "uuidGenerator")

@GenericGenerator(name = "uuidGenerator", strategy = "uuid")

@Column(length = 32)

private String id;//标识

@Column(length = 20)

private String code; //合同编码

@Column(length = 50)

private String name; //合同名称

@Column(length = 32)

private String clientId; //客户ID

@Column(length = 50)

private String clientName; //客户名称

//其他省略

}

3、客户更新触发器接口的定义

public interface TriggerClientUpdateInf

{

List ls=new ArrayList(); //存放所有实现该接口的类对象

/**

* 功能描述:客户信息更新后触发

*日期:2012-4-16

*@author : 劲风

*@param dao 数据库操作类

*@param dto 客户DTO,主要传入要更新客户的id和更新后的名称

*/

public void afterClientUpdate(Dao dao,ClientDto dto);

}

4、销售记录对触发器的实现

@org.springframework.stereotype.Service //为了让spring将该类管理,以便将类载入内存,以便执行static中的语句

public class TriggerClientUpdateSell implements TriggerClientUpdateInf

{

@Override

public void afterClientUpdate(Dao dao, ClientDto dto)

{

String hql="update Sell t set t.clientName='"+dto.getName+"' where t.clientId='"+dto.getId+"'";

dao.updateByHql(hql);

}

static

{

TriggerClientDeleteInf.ls.add(new TriggerClientUpdateSell());

}

}

5、合同记录对触发器的实现

@org.springframework.stereotype.Service //为了让spring将该类管理,以便将类载入内存,以便执行static中的语句

public class TriggerClientUpdateContract implements TriggerClientUpdateInf

{

@Override

public void afterClientUpdate(Dao dao, ClientDto dto)

{

String hql="update Contractt set t.clientName='"+dto.getName+"' where t.clientId='"+dto.getId+"'";

dao.updateByHql(hql);

}

static

{

TriggerClientDeleteInf.ls.add(new TriggerClientUpdateContract());

}

}

6、在客户更新处的代码

...

List ls =TriggerClientUpdateInf.ls;

for(TriggerClientUpdateInf tr:ls)

{

tr.afterClientUpdate(dao,clientDto); //

}

...

如此,便可用实现TriggerClientUpdateInf来实现构耦合。(1)在客户更新处,会将所有放入list中的实现TriggerClientUpdateInf接口的对象的afterClientUpdate方法执行一遍。谁放的,放的什么,我不关心,我只认这个接口,执行一扁即可。(2)其它关心客户更新的模块,如销售记录,只需要实现接口,并将一个实例放入list中即可!

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-04-27 08:32

浏览 12553

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值