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();