这里我们还是以房产信息管理系统的题目举例:

发现在DAO层和service层都有接口类(注:impl是实现类)

为什么要用接口,不直接写实现类:

1、简单、规范性:这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)

2、便于维护、拓展:在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦,如果你一开始定义一个接口,把函数功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。

3、安全、严密性:它描述了系统对外的所有服务,而不涉及任何具体的实现细节。这样比较安全、严密一些(一般软件服务商考虑的比较多)

DAO层接口类

package com.yan.web.dao;

import com.yan.web.entity.AdminEntity;
import com.yan.web.entity.Customer; import java.util.List; public interface AdminDao {
AdminEntity getAdminByUserName(String userName); //注册
int addUser(AdminEntity adminEntity); List<Customer> adminList(String userName, Integer id);
List<Customer> adminList(); int deleteAdminById(Integer id); int updateAdmin(AdminEntity admin);
}

service层接口

package com.yan.web.service;

import com.yan.web.entity.AdminEntity;

/**
* 管理服务
*
* @author galax
* @date 2022/10/19
*/
public interface AdminService {
/**
* 被用户名admin
*
* @param userName 用户名
* @return {@link AdminEntity}
*/
AdminEntity getAdminByUserName(String userName); /**
* 添加用户
*
* @param adminEntity 管理实体
* @return boolean
*/// 注册
boolean addUser(AdminEntity adminEntity);
}

DAO层实现类

AdminDaoImpl.java(其他dao类同理)【完整代码】

package com.yan.web.dao.Impl;

import com.yan.web.dao.AdminDao;
import com.yan.web.entity.AdminEntity;
import com.yan.web.entity.Customer;
import com.yan.web.util.jdbcUtil; import java.sql.*;
import java.util.ArrayList;
import java.util.List; /**
* @author chenshy
* @date 2022/10/19
*/
public class AdminDaoImpl implements AdminDao {
/**
* 被用户名admin
*
* @param userName 用户名
* @return {@code AdminEntity}
*/
@Override
/*通过姓名获取输入的信息*/
public AdminEntity getAdminByUserName(String userName) {
Connection connection = jdbcUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("select * from admin where user_name=?");
try {
ps = connection.prepareStatement(stringBuilder.toString());
// 第一个?的参数
ps.setString(1, userName);
rs = ps.executeQuery();
if (rs.next()) {
int aid = rs.getInt("id");
String name = rs.getString("user_name");
String password = rs.getString("pwd");
int state = rs.getInt("state");
AdminEntity adminEntity = new AdminEntity();
adminEntity.setId(aid);
adminEntity.setUserName(name);
adminEntity.setPwd(password);
adminEntity.setState(state);
return adminEntity;
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(connection, ps, rs);
}
return null;
} /**
* 添加用户
*
* @param adminEntity 管理实体
* @return int
*/
@Override
/*将获取的信息添加到数据库中*/
public int addUser(AdminEntity adminEntity) {
Connection connection = jdbcUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("insert into admin(user_name,pwd,state) VALUES(?,?,?)");
try {
ps = connection.prepareStatement(stringBuilder.toString());
ps.setString(1, adminEntity.getUserName());
ps.setString(2, adminEntity.getPwd());
ps.setInt(3, adminEntity.getState());
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(connection, ps, rs);
}
return 0;
} @Override
public List<Customer> adminList(String userName, Integer id) {
Connection connection = jdbcUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("select * from customer");
try {
ps = connection.prepareStatement(stringBuilder.toString());
// ps.setObject(1, "%" + userName + "%");
// ps.setObject(2, id);
rs = ps.executeQuery();
List<Customer> list = new ArrayList<>();
while (rs.next()) {
long ids = rs.getInt("UserID");
String userName1 = rs.getString("UserName");
String sex = rs.getString("sex");
String IdNumber = rs.getString("IdNumber");
String Phone = rs.getString("Phone");
String User = rs.getString("User");
int audit = rs.getInt("audit");
String password = rs.getString("password");
Customer customer = new Customer();
customer.setUserid(ids);
customer.setUsername(userName1);
customer.setSex(sex);
customer.setIdnumber(IdNumber);
customer.setPhone(Phone);
customer.setUser(User);
customer.setAudit(audit);
customer.setPassword(password);
list.add(customer);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(connection, ps, rs);
}
return null;
} public List<Customer> adminList() {
Connection connection = jdbcUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("select * from customer");
try {
ps = connection.prepareStatement(stringBuilder.toString());
// ps.setObject(1, "%" + userName + "%");
// ps.setObject(2, id);
rs = ps.executeQuery();
List<Customer> list = new ArrayList<>();
while (rs.next()) {
long ids = rs.getInt("UserID");
String userName1 = rs.getString("UserName");
String sex = rs.getString("sex");
String IdNumber = rs.getString("IdNumber");
String Phone = rs.getString("Phone");
String User = rs.getString("User");
int audit = rs.getInt("audit");
String password = rs.getString("password");
Customer customer = new Customer();
customer.setUserid(ids);
customer.setUsername(userName1);
customer.setSex(sex);
customer.setIdnumber(IdNumber);
customer.setPhone(Phone);
customer.setUser(User);
customer.setAudit(audit);
customer.setPassword(password);
list.add(customer);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(connection, ps, rs);
}
return null;
} @Override
public int deleteAdminById(Integer id) {
Connection connection = jdbcUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("delete from admin where id=?");
try {
ps = connection.prepareStatement(stringBuilder.toString());
ps.setObject(1, id);
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(connection, ps, rs);
}
return 0;
} @Override
public int updateAdmin(AdminEntity admin) {
Connection connection = jdbcUtil.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("update admin set user_name=?,pwd=?,state=? where id =?");
try {
ps = connection.prepareStatement(stringBuilder.toString());
ps.setObject(1, admin.getUserName());
ps.setObject(2, admin.getPwd());
ps.setObject(3, admin.getState());
ps.setObject(4, admin.getId());
return ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
jdbcUtil.ReleaseResource(connection, ps, rs);
}
return 0;
}
}

下面我们来解读一下(下一篇)

【Javaweb】四(关于接口类的作用)的更多相关文章

  1. python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)

    一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...

  2. python's twenty-first day for me 抽象类和接口类以及多态

    归一化设计: 不管是哪一个类的对象,都调用同一个函数去完成相似的功能. class Alipay: def pay(self,money): print('使用支付宝支付了%s' % money) c ...

  3. Python进阶-XVII 非python的接口类、多态、python自己的封装

    1.python模拟java中的接口类 python中是没有接口类的概念的,因为它支持多继承,但是java不能,所以就提出一个接口类的概念 java : 面向对象编程 设计模式 —— 接口 接口类 : ...

  4. Java 中的接口有什么作用?以及接口和其实现类的关系?

    Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...

  5. 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...

  6. dojo省份地市级联之地市Dao接口类(四)

    dojo省份地市级联之地市Dao接口类 CityDao.java: /** * 地市 */ package com.you.dao; import java.util.List; import com ...

  7. day24-抽象类与接口类

    接口类 1.继承有两种用途:一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继 ...

  8. Java从零开始学二十四(集合工具类Collections)

    一.Collections简介 在集合的应用开发中,集合的若干接口和若干个子类是最最常使用的,但是在JDK中提供了一种集合操作的工具类 —— Collections,可以直接通过此类方便的操作集合 二 ...

  9. JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架

    1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...

  10. Java程序设计(2021春)——第四章接口与多态笔记与思考

    Java程序设计(2021春)--第四章接口与多态笔记与思考 本章概览: 4.1 接口(接口的概念和声明接口.实现接口的语法) 4.2 类型转换 4.3 多态的概念 4.4 多态的应用 4.5 构造方 ...

随机推荐

  1. 69.9K Star,最强开源内网穿透工具:frp

    作为一名开发者,有很多场景需要用到内网穿透,比如:我们在接入一些大平台做第三方应用时,在本地开发微信公众号工具的时候需要让微信平台能否访问到本地提供的接口.除此之外,还有很多其他场景,也会用到,比如: ...

  2. axios快速上手(简单使用)

    axios对ajax请求进行了封装,并且使用promise的链式调用使得网络请求的代码逻辑更为清晰,同时支持async和await的编写方式使代码看起来像同步,更加方便于理解和阅读.axios这个库的 ...

  3. frp内网穿透环境搭建--服务端ubuntu 客户端win10

    前提条件:1个公网ip服务器,例如我的是腾讯云服务器ubuntu20 下载frp软件,下的是0.33.0版本,该版本直接把软件封装成服务,能用ubuntu直接定义开机自启等 github:https: ...

  4. SpringBoot 测试实践 - 2:单元测试与集成测试

    单元测试 vs. 集成测试 只编写单测,无法测试方法之间的集成情况,而且某些需求可能会修改多个方法,这可能会影响方法对应的单测,涉及到大量的相关单测的修改,这样的维护成本很高 可以把重心放在完善集成测 ...

  5. numpy中计算相关系数的np.corrcoef

    np.corrcoef的作用 计算 Pearson 乘积矩相关系数.它可以用来分析给定数据集中各个变量之间的线性相关程度,返回一个相关系数矩阵,相关系数矩阵中的值介于 -1 到 1 之间,包括 -1 ...

  6. Leetcode刷题笔记——单调性

    单调性 单调性是数学中使用的一种常见性质,通常用于描述函数,在高等数学中的定义常常为: 设函数f(x)在区间I上有定义,如果对于I上的任意两个数x1和x2,当x1<x2时,有f(x1)<f ...

  7. MAUI+Masa Blazor APP 各大商店新手发布指南(三)vivo篇

    目录 前言 准备材料 审核流程 测试报告 隐私测试报告 隐私行为数据 其他问题 总结 前言 上架vivo商店,使用厂家的离线推送当然是一个重要原因,与小米不同,vivo的推送服务可以在应用未上架的情况 ...

  8. 一款国产开源 Web 防火墙神器!

    随着开源 Web 框架和各种建站工具的兴起,搭建网站已经是一件成本非常低的事情,但是网站的安全性很少有人关注,以至于 WAF 这个品类也鲜为人知. 一.WAF 是什么? WAF 是 Web 应用防火墙 ...

  9. 探析ElasticSearch Kibana在测试工作中的实践应用

    一. 为什么使用ES Kibana 离线数据测试中最重要的就是数据验证,一部分需要测试es存储数据的正确性,另一部分就需要验证接口从es取值逻辑的正确性.而为了验证es取值逻辑的正确性,就需要用到Ki ...

  10. elmentui表单重置初始值问题与解决方法

    背景 在做管理台项目时,我们会经常使用到表单+表格+弹窗表单的组合,以完成对数据的增.删.查.改. 在vue2+elementui项目中,使用弹窗dialog+表单form,实现对数据的添加和修改. ...