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

发现在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. 使用supervisor守护Prometheus进程

    使用supervisor守护Prometheus进程 目录 使用supervisor守护Prometheus进程 安装supervisor 安装Prometheus监控系统 配置supervisor ...

  2. LeetCode 周赛上分之旅 #39 结合中心扩展的单调栈贪心问题

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...

  3. 混合开发模式是否可以在App备案制度下突围

    网站 ICP 备案已施行了很久,我们也非常清楚必须在进行 ICP 备案后,网站才能在大陆范围合法运营,并且用户可以通过域名正常访问网站. 但是月初出了新规,明年起,国内的 App 也要像网站一样进行备 ...

  4. jmeter 二次开发详解

    背景: JMeter 是一个功能强大的性能测试工具,但它可能无法满足特定项目或组织的特定需求.通过进行二次开发,可以定制 JMeter,使其适应具体项目的需求.例如,可能需要添加自定义的 测试元件.报 ...

  5. 后浪搞的在线版 Windows 12「GitHub 热点速览」

    本周比较火的莫过于 3 位初中生开源的 Windows 12 网页版,虽然项目完成度不如在线版的 Windows 11,但是不妨一看.除了后生可畏的 win12 之外,开源不到一周的 open-int ...

  6. 我找回了我喜欢的Github Old Feed

    前言 这周Github更新了个人主页Feed(指的是用户的活动源或动态源),作为GitHub重度爱好者而言New Feed完全不是我之前所喜欢的效果.虽然说New Feed添加了允许用户可以自定义配置 ...

  7. Gradle 设置全局镜像源

    复制 init.gradle.kts 文件到 Windows 的 %USERPROFILE%/.gradle 或者 Linux 的 ~/.gradle 目录下.也可以直接复制文末的代码为 init.g ...

  8. 洛谷P2433 小学数学 N 合一

    写完了这道题结果脑子断电把浏览器关了......打开一看 没保存 寄 传送门:[深基1-2]小学数学 N 合一 - 洛谷 第一题 第二题 第三题 这几道题没啥好说的,直接输出就彳亍了 cout < ...

  9. docker入门加实战—从部署MySQL入门docker

    docker入门加实战-从部署MySQL入门docker docker部署MySQL 输入如下命令: docker run -d \ --name mysql \ -p 3306:3306 \ -e ...

  10. 《流畅的Python》 读书笔记 第二章数据结构(2) 231011

    2.5 对序列使用+和* 通常 + 号两侧的序列由相同类型的数据所构成,在拼接的过程中,两个被操作的序列都不会被修改,Python 会新建一个包含同样类型数据的序列来作为拼接的结果 +和*都遵循这个规 ...