iservice封装有哪些方法_SSM 关于service和dao的封装

近期由于客户需求,所以我们整个小组开始开发java项目。

虽然很久以前也是系统学习过。不过干了这么多年 .net  ,有关java的早就扔了。

好了,废话不多说。我们看看SSM 关于service和dao的封装(对于java来说,我是个菜鸡,有问题大家请指正)

一 对于SSM框架的搭建,我就不细讲了。

直接上图结构:

上面这个是我搭建的程序结构。

红框的是重点会改造的层。

二  修改 dao 层

首先,我们看一下原始的目录结构:(原始目录结构并没有  IDao/IDaoBase.java)

我们几乎在每个mapper.java文件中都看到了相同的代码。虽然他们是自动生成的。。。。

以下就是SysUserMapper的代码。

注释部分:是自动生成的,

未注释部分:是我额外添加的方法。

public interface SysUserMapper extends IDaoBase {

//public interface SysUserMapper {

// int deleteByPrimaryKey(Integer userid);

//

// int insert(SysUser record);

//

// int insertSelective(SysUser record);

//

// SysUser selectByPrimaryKey(Integer userid);

//

// int updateByPrimaryKeySelective(SysUser record);

//

// int updateByPrimaryKey(SysUser record);

SysUser selectByAccount(String account);

List findAll();

}

根据代码中

public interface SysUserMapper extends IDaoBase {

我们很明确的知道了。我封装了IDaoBase,让所有的mapper都继承了IDaoBase

IDaoBase  代码

public interface IDaoBase {

int deleteByPrimaryKey(Integer id);

int insert(T record);

int insertSelective(T record);

T selectByPrimaryKey(Integer id);

int updateByPrimaryKeySelective(T record);

int updateByPrimaryKey(T record);

}

记得每个Mapper.java都继承IDaoBase

当然这里细心的朋友,一定会发觉一个问题。

为何我使用

public interface SysUserMapper extends IDaoBase

而不是

public interface SysUserMapper extends IDaoBase

这个问题,我后面讲,目前叫它:问题一

三  修改Service和Impl层

serivce层:

这个层就很简单了。先看结构

我们不看impl

先看service。

其实就是创建了一个 IBaseService.java

然后看代码

public interface IBaseService {

int deleteByPrimaryKey(Integer id);

ResultModel insert(T record);

ResultModel insertSelective(T record);

T selectByPrimaryKey(Integer id);

ResultModel updateByPrimaryKeySelective(T record);

ResultModel updateByPrimaryKey(T record);

}

然后看一下 IUserService.java的代码

public interface IUserService {

/*int deleteByPrimaryKey(Integer userid);

ResultModel insert(SysUser record);

ResultModel insertSelective(SysUser record);

SysUser selectByPrimaryKey(Integer userid);

int updateByPrimaryKeySelective(SysUser record);

int updateByPrimaryKey(SysUser record);*/

ResultModel selectByUsername(SysUser tUser);

List findAll();

}

注释部分:是自动生成的,

未注释部分:是我额外添加的方法。

这里也有一个问题,

public interface IUserService

我并没有继承IBaseService

其实这个无伤大雅,继承不继承,都随意。

记做问题二

最后,我们看一下 impl层

很明显,我创建了 BaseServiceImpl

看一下代码:

ResultModel是我定义的一个返回类型。这里不用管它

public class BaseServiceImpl> implements IBaseService{

@Autowired

protected U mapper;

@Override

public int deleteByPrimaryKey(Integer id) {

// TODO Auto-generated method stub

return mapper.deleteByPrimaryKey(id);

}

@Override

public ResultModel insert(T record) {

// TODO Auto-generated method stub

ResultModel resultModel = new ResultModel();

int num = mapper.insert(record);

if (num == 0) {

resultModel.setCode(ResultModel.FAIL_CODE);

resultModel.setMessage(ResultModel.FAIL_MESSAGE);

}

return resultModel;

}

@Override

public ResultModel insertSelective(T record) {

// TODO Auto-generated method stub

ResultModel resultModel = new ResultModel();

int num = mapper.insertSelective(record);

if (num == 0) {

resultModel.setCode(ResultModel.FAIL_CODE);

resultModel.setMessage(ResultModel.FAIL_MESSAGE);

}

return resultModel;

}

@Override

public T selectByPrimaryKey(Integer id) {

// TODO Auto-generated method stub

return mapper.selectByPrimaryKey(id);

}

@Override

public ResultModel updateByPrimaryKeySelective(T record) {

// TODO Auto-generated method stub

ResultModel resultModel = new ResultModel();

int num = mapper.updateByPrimaryKeySelective(record);

if (num == 0) {

resultModel.setCode(ResultModel.FAIL_CODE);

resultModel.setMessage(ResultModel.FAIL_MESSAGE);

}

return resultModel;

}

@Override

public ResultModel updateByPrimaryKey(T record) {

// TODO Auto-generated method stub

ResultModel resultModel = new ResultModel();

int num = mapper.updateByPrimaryKey(record);

if (num == 0) {

resultModel.setCode(ResultModel.FAIL_CODE);

resultModel.setMessage(ResultModel.FAIL_MESSAGE);

}

return resultModel;

}

}

UserServiceImpl

@Service("userService")

public class UserServiceImpl extends BaseServiceImpl implements IUserService {

@Override

public ResultModel selectByUsername(SysUser tUser) {

// TODO Auto-generated method stub

ResultModel resultModel = new ResultModel();

SysUser result = mapper.selectByAccount(tUser.getAccount());

resultModel.setObject(result);

return resultModel;

}

@Override

public List findAll() {

// TODO Auto-generated method stub

List result = mapper.findAll();

return result;

}

}

这里主要解释一下

public class BaseServiceImpl> implements IBaseService

先看BaseServiceImpl  implements IBaseService

和UserServiceImpl implements IUserService

这也是问题二的答案了。由于BaseServiceImpl 继承了IBaseService ,所以对于IBaseService的6个基本方法,已经在BaseServiceImpl 被实现了。

并且UserServiceImpl implements IUserService  说明UserServiceImpl 会实现IUserService  中的方法。所以问题二继承不继承都无所谓。

接着

BaseServiceImpl中的

BaseServiceImpl>

就对应了

UserServiceImpl中的

UserServiceImpl extends BaseServiceImpl

很明显,我需要将实体对象 SysUser和 Mapper对象SysUserMapper传递给BaseServiceImpl。

这样我才知道调用哪个Mapper和实体对象。

这也是问题一的来源,可能是我封装的有问题。毕竟java还是不太熟悉,而且还是mybatis作为 orm的ssm架构。

这里整个帖子也进入了尾声。

四  问题二的讨论(可以略过)

应该没什么好多分析的了。我们可以讨论一下问题一

本来我尝试在SysUserMapper中将

public interface SysUserMapper extends IDaoBase

修改为

public interface SysUserMapper extends IDaoBase

如此一来我本来想在

UserServiceImpl 中将

public class UserServiceImpl extends BaseServiceImpl implements IUserService

修改为

public class UserServiceImpl extends BaseServiceImpl> implements IUserService

奈何,由于泛型的继承格式改变,我就要去修改

BaseServiceImpl中的

public class BaseServiceImpl> implements IBaseService

将它改为

public class BaseServiceImpl,U extends IDaoBase> implements IBaseService

上面这句是伪代码。

其实我本意就是如果能传递接口泛型U 这样,那么世界就更美好一些了。不过我试了不行,毕竟我是java的彩笔。

希望有朋友可以指正观点。

甚至你说这样的封装没有用,也没关系。其实我也就希望给后面的人偷偷懒。不用再次创建很多重复的service和impl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值