BaseService --- service层的抽取

2023-05-16

service层的抽取和dao层的抽取差不多相同,主要不同点是dao实例化的问题,需要在调用时传入,并在BaseServiceImpl接收。 
详细的过程说明请参考dao层的抽取。 
dao层的抽取:http://blog.csdn.net/kyle0349/article/details/51914504

1、抽取前UserService接口

package cn.tax.nsfw.user.service;
import java.io.FileInputStream;
import java.io.Serializable;
import java.util.List;
import cn.tax.nsfw.user.entity.User;

public interface UserService {
    public void save(User user);//保存

    public void delete(User user);//删除用户

    public void update(User user);//更新用户

    public User findById(Serializable id);//根据主键查找用户

    public List<User> getAll();//查看所有

    public List<User> findLike(User user);//模糊查询

    public User findByName(String userName);//根据用户名查询 保证用户名唯一

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2、抽取前UserServiceImpl (实现类)

package cn.tax.nsfw.user.service.impl;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;

import cn.tax.nsfw.user.dao.UserDao;
import cn.tax.nsfw.user.entity.User;
import cn.tax.nsfw.user.service.UserService;

@Service("userService")
public class UserServiceImpl implements UserService {

    @Resource
    private UserDao userDao;

    public void save(User user) {
        userDao.save(user);
    }
    public void delete(User user) {
        userDao.delete(user);
    }
    public void update(User user) {
        userDao.update(user);
    }
    public User findById(Serializable id) {
        return userDao.findById(id);
    }
    public List<User> getAll() {
        return userDao.getAll();
    }
    public List<User> findLike(User user) {
        return userDao.findLike(user);
    }
    public User findByName(String userName) {
        return userDao.findByName(userName);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

3、创建BaseService(接口)

package cn.tax.core.service;
import java.io.Serializable;
import java.util.List;
public interface BaseService<T> {
    public void save(T entity);// 保存

    public void delete(T entity);// 删除用户

    public void update(T entity);// 更新用户

    public T findById(Serializable id);// 根据主键查找用户

    public List<T> getAll();// 查看所有

}   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4、创建BaseServiceImpl (实现类)

  注意:
  这里我们需要用到userDao,而在这不能直接实例化userDao,
  所以需要加一个set方法,在调用service层的时候,把userDao传进来 
  用BaseDao接收userDao是没问题的。
  • 1
  • 2
  • 3
  • 4
  • 5
package cn.tax.core.service.impl;
import java.io.Serializable;
import java.util.List;
import cn.tax.core.dao.BaseDao;
import cn.tax.core.service.BaseService;
public class BaseServiceImpl<T> implements BaseService<T> {

    private BaseDao<T> baseDao;
    public void setBaseDao(BaseDao<T> baseDao) {
        this.baseDao = baseDao;
    }

    public void save(T entity) {
        baseDao.save(entity);
    }
    public void delete(T entity) {
        baseDao.delete(entity);
    }
    public void update(T entity) {
        baseDao.update(entity);
    }
    public T findById(Serializable id) {
        return baseDao.findById(id);
    }
    public List<T> getAll() {
        return baseDao.getAll();
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

5、UserService 继承BaseService

 可以把BaseService中有的方法在UserService注释掉(删除)
  • 1
  • 2
package cn.tax.nsfw.user.service;
import java.io.FileInputStream;
import java.io.Serializable;
import java.util.List;
import cn.tax.core.service.BaseService;
import cn.tax.nsfw.user.entity.User;

public interface UserService extends BaseService<User> {

    /*public void save(User user);//保存

    public void delete(User user);//删除用户

    public void update(User user);//更新用户

    public User findById(Serializable id);//根据主键查找用户

    public List<User> getAll();//查看所有

*/
    //以下两个方法是根据业务需要新增的方法,
    //可以看到抽取完BaseService后,service层只剩下新增的业务,比较简洁
    public List<User> findLike(User user);//模糊查询

    public User findByName(String userName);//根据用户名查询 保证用户名唯一

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

6、UserServiceImpl 继承BaseServiceImpl

同样可以把BaseServiceImpl中有的方法在UserServiceImpl中注释掉(删除) 
注意:

  • A、第4点中说到在BaseServiceImpl中需要调用userDao,但没办法直接实例化,需要调用service层时传进去的问题,那么就是在这里传,在service是通过@Resource拿到IOC容器中userDao的, 
    B、 @Resource可以放在private UserDao userDao;上面,也可以放在public void 
    setUserDao(UserDao userDao)上面, 
    C、我们需要传userDao到BaseServiceImpl中,通过supper调用父类即BaseServiceImpl的setUserDao方法, 
    D、这样就把userDao传进到BaseServiceImpl中,避免空指针异常。
package cn.tax.nsfw.user.service.impl;
import java.io.FileInputStream;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import cn.tax.core.service.impl.BaseServiceImpl;
import cn.tax.nsfw.user.dao.UserDao;
import cn.tax.nsfw.user.entity.User;
import cn.tax.nsfw.user.service.UserService;

@Service("userService")
public class UserServiceImpl extends BaseServiceImpl<User>  implements UserService {
    private UserDao userDao;
    @Resource
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
        super.setBaseDao(userDao);
    }
    /*public void save(User user) {
        userDao.save(user);
    }
    public void delete(User user) {
        userDao.delete(user);
    }
    public void update(User user) {
        userDao.update(user);
    }
    public User findById(Serializable id) {
        return userDao.findById(id);
    }
    public List<User> getAll() {
        return userDao.getAll();
    }*/
    public List<User> findLike(User user) {
        return userDao.findLike(user);
    }
    public User findByName(String userName) {
        return userDao.findByName(userName);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BaseService --- service层的抽取 的相关文章

随机推荐

  • 3D检测入门 - KITTI数据集

    参考链接 官网 xff1a http www cvlibs net datasets kitti index php 传感器介绍 xff1a http www cvlibs net datasets kitti setup php 相机内外
  • 请多多指教

    我是菜鸟 xff0c 还请各位大虾多多指教 xff01
  • VINS-DUAL 测试(小觅相机)

    设置小觅相机参数 直接从小觅相机内部获取各种参数 xff0c 把小觅相机给的SDK编译好后 xff0c 找到以下路径中生成的可执行文件 MYNT EYE D SDK samples output bin 直接执行下面两个文件 xff1a g
  • VINS-FUSION 研究日志 (3)进入 estimator.cpp Part A

    继续碎碎念梳理VINS FUSION 上一篇博文梳理了整个程序的入口 xff0c 其实只是做了传感器参数的读取与配置 xff0c 传感器测量数据的订阅 两件事情 estimator cpp 中有一个持续运行的线程 xff0c 是在 void
  • “Failed to get convolution algorithm. This is probably because cuDNN failed to initialize”错误的解决办法

    最近在使用TF2 0 运行程序出现以下错误 Failed to get convolution algorithm This is probably because cuDNN failed to initialize 一开始怀疑是CUDA
  • Linux多线程调用ubus导致死锁问题

    测试组发现用户进程在某种特定情况下 xff0c 会出现死锁 xff0c 现象是进程还在S状态 xff0c 但没有任何反应 xff0c 所以怀疑死锁 问题复现 通过几次测试发现 xff0c 进程中设置的参数恢复出厂后重启进程很大概率会出现死锁
  • Hi3559AV100 HDMI转MIPI-CSI LT6911UXC转换芯片调试

    Hi3559AV100项目 xff0c 需要接HDMI 4K摄像头 xff0c 需要把HDMI转成MIPI CSI信号接入CPU xff0c 从而实现信号的转换和实现 我们拿到的海思开发板是HI3559A4SDMEB VER A xff0c
  • 电脑抓wifi空中包三种方法

    WIN10电脑 下载wireshark软件 xff0c 设置WIFI网卡为monitor模式 xff1a C WINDOWS system32 gt cd Npcap C Windows System32 Npcap gt WlanHelp
  • 简述TCP的三次握手过程

    TCP握手协议 在TCP IP协议中 TCP协议提供可靠的连接服务 采用三次握手建立一个连接 第一次握手 xff1a 建立连接时 客户端发送syn包 syn 61 j 到服务器 并进入SYN SEND状态 等待服务器确认 xff1b SYN
  • buildroot使用外部编译链编译bluez蓝牙工具

    在开发ublox w263 wifi蓝牙时 xff0c 之前是使用yocto系统集成编译出的bluez工具 xff0c 减少了自己编译工具软件和依赖库的工作 xff0c 切换项目使用原生linux系统后 xff0c 所以的软件需要自己编译
  • 软件替代硬件HW_RANDOM随机数解决方案

    问题背景 使用低成本平台方案时 xff0c 发现不支持HW RANDOM硬件随机数 xff0c 这样在开启wifi wpa2加密ap后 xff0c 电脑多次提示连接失败才连接成功 xff0c 很影响用户体验 硬件不支持硬件随机数那么就需要使
  • Android下打印出现read: Unexpected EOF!分析

    背景 xff1a 在抓SmePlayer打印时 xff0c 打开debug级别后 xff0c xshell终端就嘟嘟响然后打印出几百行后就打出read Unexpected EOF 结束了 这时候完全没有抓到我需要的打印 xff0c 用lo
  • VMWare中处理器和内存配置含义

    背景 在创建虚拟机系统后 xff0c 默认处理器配置都是为1 xff0c 内存一般选为1G xff0c 然而在使用Linux系统编译大型软件时 xff0c 速度慢耗时较长 xff0c 这时候就需要调整一下处理器和内存配置 xff0c 使得计
  • Linux mkfs.ext4命令参数使用

    命令使用 mkfs ext4 参数 设备 参数说明 c 格式化前检查分区是否有坏块 Checking for bad blocks read only test 19 34 done 0 21 elapsed 0 0 0 errors Ch
  • Xshell 6多个会话窗口消失只能显示一个问题解决

    背景 某一天同事操作了我的Xshell导致我的会话窗口消失只能显示一个 xff0c 通过点击选项卡排列可以显示出消失的窗口 xff0c 但是使用极为不方便 xff0c 下面问题解决 解决 正常显示 xff1a 有三个选项窗口 异常显示 xf
  • OpenWrt学习(一)搭建Linux开发环境

    环境 目前大部分的 linux开发都是在PC虚拟机上进行的 xff0c 所采用的 linux系统版本有 Ubuntu Redhat Debian Fedora 等 xff0c 我们一般在 windows 操作系统上利用 VMware 43
  • OpenWrt学习(三)源码大包编译

    编译大包 make V 61 99 xff0c V 61 99 用来生成编译过程的详细信息 xff0c 方便查找出错原因 xff0c 或者用V 61 s 建议加 j x xff08 x 为CPU core数量 xff09 选项 xff0c
  • Linux gcc自带检测内存泄漏工具asan

    背景 排查和检测内存泄漏的问题时 xff0c 需要选择一些好用的工具 xff0c 由于dmalloc编译复杂 xff0c valgrind依赖太多 xff0c 所以选择使用gcc自带检测内存泄漏工具asan xff0c 版本4 8之后就支持
  • Linux物理内存较少导致OOM问题分析

    背景 开发项目过程中 xff0c 发现盒子启动后物理内存持续的减少 xff0c CMA内存过了一段时间后也出现明显减少情况 xff0c 到最后会低概率性的出现OOM杀掉进程的情况 xff1b 通过ps命令监控所有进程在开机后的虚拟内存VSZ
  • BaseService --- service层的抽取

    service层的抽取和dao层的抽取差不多相同 xff0c 主要不同点是dao实例化的问题 xff0c 需要在调用时传入 xff0c 并在BaseServiceImpl接收 详细的过程说明请参考dao层的抽取 dao层的抽取 xff1a