【Javaweb】四(关于接口类的作用)
这里我们还是以房产信息管理系统的题目举例:

发现在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】四(关于接口类的作用)的更多相关文章
- python 全栈开发,Day21(抽象类,接口类,多态,鸭子类型)
一.昨日复习 派生方法和派生属性 super 只有在子父类拥有同名方法的时候, 想使用子类的对象调用父类的方法时,才使用super super在类内 : super().方法名(arg1,..) 指名 ...
- python's twenty-first day for me 抽象类和接口类以及多态
归一化设计: 不管是哪一个类的对象,都调用同一个函数去完成相似的功能. class Alipay: def pay(self,money): print('使用支付宝支付了%s' % money) c ...
- Python进阶-XVII 非python的接口类、多态、python自己的封装
1.python模拟java中的接口类 python中是没有接口类的概念的,因为它支持多继承,但是java不能,所以就提出一个接口类的概念 java : 面向对象编程 设计模式 —— 接口 接口类 : ...
- Java 中的接口有什么作用?以及接口和其实现类的关系?
Java 中的接口有什么作用? - Ivony的回答 - 知乎 https://www.zhihu.com/question/20111251/answer/16585393 这是一个初学者非常常见的 ...
- 接口java.util.Map的四个实现类HashMap Hashtable LinkedHashMap TreeMap
java中HashMap,LinkedHashMap,TreeMap,HashTable的区别 :java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMa ...
- dojo省份地市级联之地市Dao接口类(四)
dojo省份地市级联之地市Dao接口类 CityDao.java: /** * 地市 */ package com.you.dao; import java.util.List; import com ...
- day24-抽象类与接口类
接口类 1.继承有两种用途:一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继 ...
- Java从零开始学二十四(集合工具类Collections)
一.Collections简介 在集合的应用开发中,集合的若干接口和若干个子类是最最常使用的,但是在JDK中提供了一种集合操作的工具类 —— Collections,可以直接通过此类方便的操作集合 二 ...
- JAVA基础加强(张孝祥)_类加载器、分析代理类的作用与原理及AOP概念、分析JVM动态生成的类、实现类似Spring的可配置的AOP框架
1.类加载器 ·简要介绍什么是类加载器,和类加载器的作用 ·Java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader ...
- Java程序设计(2021春)——第四章接口与多态笔记与思考
Java程序设计(2021春)--第四章接口与多态笔记与思考 本章概览: 4.1 接口(接口的概念和声明接口.实现接口的语法) 4.2 类型转换 4.3 多态的概念 4.4 多态的应用 4.5 构造方 ...
随机推荐
- 揭秘 .NET 中的 TimerQueue(下)
前言 上文给大家介绍了 TimerQueue 的任务调度算法. https://www.cnblogs.com/eventhorizon/p/17557821.html 这边做一个简单的复习. Tim ...
- Vue 框架下提升加载速度的一些实战经验分享
现在前端的框架有很多,甚至两只手已经数不过来,当然也完全没必要全部都学,还是应该深入的学习一两个被广泛使用的就好.其实我和大部分同学的想法一致,认为最值得我们深究的还是主流的 Vue 和 React. ...
- ENVI+ERDAS实现Hyperion叶绿素含量反演:经验比值法、一阶微分法
本文介绍基于ENVI与ERDAS软件,依据Hyperion高光谱遥感影像,采用经验比值法.一阶微分法等,对叶绿素含量等地表参数加以反演的具体操作. 目录 1 前期准备与本文理论部分 1.1 几句闲谈 ...
- plt.rcParams运行时修改全局配置参数
plt.rcParams简单介绍 plt.rcParams即 "运行时配置参数"("runtime configuration parameters"),是运行 ...
- 《小白WEB安全入门》03. 漏洞篇
@ 目录 SQL注入和简单绕过原理 什么是SQL 什么是SQL注入 XSS漏洞原理 什么是XSS XSS分类 NOSQL注入 什么是NOSQL CSRF原理 什么是CSRF 网络摄像头入侵原理 什么是 ...
- API接口的对接流程和注意事项
API接口的对接流程和注意事项 随着互联网技术的发展和数字化时代的到来,API接口已经成为应用程序之间进行数据交换和通信的重要方式.API即应用程序接口,是一种定义.调用和交互的规范,使得不同应用 ...
- 低代码引擎 TinyEngine 正式发布!
在当今数字化飞速发展的时代,企业对高效.敏捷的应用程序需求日益旺盛.为了满足这一需求,越来越多的低代码开发平台开始涌现.这些平台通过提供简单易用的开发工具和优化后的开发流程,帮助开发者快速构建高质量. ...
- c语言代码练习14
//设计一个猜数字游戏,需要提示猜大了还是小了,直到猜对为止 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include & ...
- Blackmail
Blackmail Arthur Hailey The chief house officer, Ogilvie, who had declared he would appear at the Cr ...
- JDK对于Java的作用
JDK是Java Development Kit的缩写,是Java的开发工具包(SDK).JDK 是整个 Java 的核心,包括 Java 运行环境(Java Runtime Envirnment,简 ...