JavaWeb基盘4——业务逻辑

service层

主要利用dao层的实现方法进行业务逻辑的处理

1.包含两个package

service         定义接口

service.impl    定义接口的实现类

2.简单事务,单数据库

1)不需要事务

直接从工厂中得到数据源进行处理,参数为false,最后要关闭数据源

IDataSourcd ds = MyBatisFactory.getMyBatisDataSource("pacer",false);

IUserDao dao = new UserDao(ds);

....

ds.close();



2)需要事务

参数为true,需要提交

IDataSourcd ds = MyBatisFactory.getMyBatisDataSource("pacer",true);

IUserDao dao = new UserDao(ds);

...

ds.commit();

ds.close();

3.分布式事务

设计多数据库,操作比较复杂

原理:把多个小事务放到一个大事务,当每个小事务都成功,大事务才成功;否则失败

主次事务:

    每个分布式事务包含一个主事务(起主导作用),多个次事务

1)创建分布式事务

2)开始事务

3)次事务处理,需要定义撤销函数(revoke)

4)主事务处理

5)提交或回滚事务

6)关闭事务



Demo

#1.创建分布式事务,同时把主事务的数据源ID传入

DistributedTransaction dtx = new DistributedTransaction("transtest1",DSComponent.MyBatis);

#2.开始分布式事务

dtx.begin();



#3.次事务

UserModel model = new UserModel("Mybatis","次事务");

final int id = model.getId();

SubTransaction subTrans2 = new SubTransaction("transtest",DSComponent.MyBatis){

    public void revoke(){

        IDataSource inds = this.getDs();

        IUserDao indao = new UserDao(inds);

        inds.delete(id2);

    }

};

IDataSource subds = dtx.getSubDS(subTrans2);

IUserDao dao = new UserDao(subds);

dao.insert(model);



#4.主事务

IDataSource ds = dtx.getMainDS();

IUserDao dao = new UserDao(ds);

UserModel model = new UserModel("MyBatis","主事务");

dao.insert(model);



#5.提交或回滚事务

UserModel result = dao.select(model.getId());

assertThat(result.getDepartment(),equalTo("主事务"));



#6.关闭事务

dtx.close();

来源张永光的博客

负责业务逻辑的类都必须实现这个接口,业务逻辑类BusinessImpl实现接口Business,BusinessImpl.java的示例代码如下: //******* Business.java************** public class BusinessImpl implement Business { private SaveData db; public void DiSaveDate (SaveData db) { this.db = db; } … //根据注入的存储类,存储数据 public void saveData() { … db.saveData(); … } } 编写测试类TestBusiness,TestBusiness.java的示例代码如下: //******* TestBusiness.java************** public class TestBusiness { private Business business = new BusinessImpl(); … //根据注入的存储类,存储数据 public void opraData() { … business. DiSaveDate (new XMLData()); business. saveData (); … } } 如果要完成依赖关系注入的对象,必须实现Business接口。 构造注入 构造注入是指在接受注入的类中定义一个构造方法,并在参数中定义需要注入的类。 (1)为了让类Business接受XMLData的注入,需要为它定义一个构造方法,来接受XMLData的注入。Business.java的示例代码如下: //******* Business.java************** public class Business { private SaveData db; public Business (SaveData db) { this.db = db; } … //根据注入的存储类,存储数据 public void saveData() { … db.saveData(); … } } (2)编写测试类TestBusiness,TestBusiness.java的示例代码如下: //******* TestBusiness.java************** public class TestBusiness { private Business business = new Business(new XMLData()); … //根据注入的存储类,存储数据 public void opraData() { … business. saveData (); … } } 即通过构造函数来完成依赖注入。 从前面对这三种依赖注入的方式中可以看出:其实所有的依赖注入都离不开抽象的支持,也就是说只有"面向接口编程",才能够实现依赖注入。 读者可能还会有疑惑:虽然具体的存储方式和业务逻辑无关了,可不是还要在调用业务逻辑的类里来改变具体的存储方式吗?这样一来,不是还要改代码吗?看起来面向接口编程也挺简单的,那Spring又为开发人员提供了哪些帮助呢?其实,Spring为开发人员提供了调用业务逻辑类的具体方式,也就是说,Spring不再需要开发人员编写调用具体调用业务逻辑的类,而是通过配置文档来实现对业务逻辑的调用,如果具体的存储方式发生了变化,开发人员只需要改变相应的配置文档即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值