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

发现在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. [python]使用diagrams绘制架构图

    简介 diagrams是python的一个第三方库,用于实现使用代码绘制架构图. 安装 依赖于 Graphviz,安装diagrams之前需要先安装 Graphviz(下载压缩包后,将bin目录添加到 ...

  2. 如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件

    原文链接:如何利用AI智能聊天机器人10秒钟做出一个故事绘本的神奇插件 ChatGPT以下称为AI智能聊天机器人 一.AI智能聊天机器人4中集成"Stories"插件 对于已经熟悉 ...

  3. 【AI绘画模型汇总】分享5个国内实用的AI绘画模型网站-C站AI模型平替网站

    鉴于大家未必会有魔法工具访问civitai(C站)下载AI模型,这里我搜集整理了5个实用的国内版AI模型素材库,无障碍访问下载Stable diffusion模型. 1.LiblibAI 访问速度快, ...

  4. 你能看到这个汉字么“  ” ?关于Unicode的私人使用区(PUA) 和浏览器端显示处理

    如果你现在使用的是chrome查看那么你是看不到我标题中的汉字的,显示为一个小方框,但是你使用edge查看的话,这个字就能正常的显示出来,不信你试试! 本故事源于我在做数据过程中遇到Unicode编码 ...

  5. 零代码,使用 Dify 和 Laf 两分钟接入企业微信 AI 机器人

    Dify 允许创建 AI 应用,并提供二次开发的能力.这里我将演示创建一个法律问答助手的 AI 应用,称作"知法".在本篇教程中,我将指导你为"知法"接入企业微 ...

  6. RabbitMQ 如何实现延迟队列?

    延迟队列是指当消息被发送以后,并不是立即执行,而是等待特定的时间后,消费者才会执行该消息. 延迟队列的使用场景有以下几种: 未按时支付的订单,30 分钟过期之后取消订单. 给活跃度比较低的用户间隔 N ...

  7. Java实践项目 - 商品分类

    Smiling & Weeping ---- 好想回到那个拉钩许诺的年代 1.1商品分类的思路:一次性查询三级分类 (一级为美味麒麟榜,二级为闭眼入,第三级为商品) 优点:只需要一次查询,根据 ...

  8. 使用KRPano资源分析工具强力加密JS文件

    本文地址:http://www.cnblogs.com/reachteam/p/6294767.html 软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278 ...

  9. Scrapy官方文档爬取

    最近想爬点啥东西看看, 所以接着学习了一点Scrapy, 学习过程中就试着去爬取Scrapy的官方文档作为练习之用, 现在已经基本完成了. 实现原理: 以 overview.html 为起点,通过 r ...

  10. 8.2 BeingDebugged

    BeingDebugged 是Windows系统PEB结构体中的一个成员,它是一个标志位,用于标识当前进程是否正在被调试.BeingDebugged的值为0表示当前进程未被调试,值为1表示当前进程正在 ...