高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤(上)

简介: 高效掌握JDBC技术(三)| 三层架构理念 | 书写符合事务特性的工具类 | JUnit测试框架 | JDBC项目开发步骤

1、三层架构

一种合理的项目分层理念,好处为可以简化设计、各司其职、更容易扩展内容

三层架构分为:

表示层(UI、WEB):跟用户对接

业务逻辑层(service):书写功能的整体逻辑

数据访问层(dao):对接数据库

1.1、数据访问层

DAO:和数据库交接、内存放着对数据库内容增删改查的方法

1.2、业务逻辑层

Service:存放着代表主要功能的方法,内部内容主要为调用DAO+逻辑控制代码

1.2.1、组成

Service接口:


一张表对应一个Service

Service中存放着与该表相关的所有功能方法

命名与表名相关:PersonService

包:须存放在service包下 com.xxx.service

Service实现类:


一个实现类实现一个service接口

命名为接口名+Impl:PersonServiceImpl

包:须存放在service.impl下 com.xxx.service.impl

1.3、表示层

view:负责跟用户对接

1.3.1、实现

一个功能一个视图类

命名:功能+View

包:须放在view包下 com.xxx.view

内容:调用service+Scanner

1.4、完整实现步骤

1.书写实体类

package com.bz.entity;
import java.io.Serializable;
public class User implements Serializable {
    private Integer id;
    private String username;
    private String pwd;
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
    public User(Integer id, String username, String pwd) {
        this.id = id;
        this.username = username;
        this.pwd = pwd;
    }
}

2.书写DAO

package com.bz.dao;
import com.bz.entity.User;
/**
 * 跟数据库对接:从数据库中查找user信息
 */
public interface UserDao {
    /**
     * 查询用户信息是否存在
     * @param username  用户名
     * @param pwd 密码
     * @return  用户对象
     */
    User selectUser(String username,String pwd) throws Exception;
}

3.书写DaoImpl


package com.bz.dao.impl;
import com.bz.dao.UserDao;
import com.bz.entity.User;
import com.bz.util.JDBCUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class UserDaoImpl implements UserDao {
    @Override
    public User selectUser(String username, String pwd) throws Exception {
        User user=null;//用来返回
        Connection conn= JDBCUtils.getConnection();
        String sql = "select * from t_user where u_username=? and u_pwd=?";
        PreparedStatement ps=conn.prepareStatement(sql);
        ps.setString(1,username);
        ps.setString(2, pwd);
        ResultSet rs=ps.executeQuery();
        if (rs.next()) {
            Integer id = rs.getInt("u_id");
            String name = rs.getString("u_username");
            String password = rs.getString("u_pwd");
            user = new User(id, name, password);
        }
        JDBCUtils.close(rs,ps,conn);
        return user;
    }
}

4.书写Service

package com.bz.service;
public interface UserService {
    /**
     * 用户登录
     * @param username  用户输入的账号名
     * @param pwd 用户输入的密码
     * @return 是否登录成功
     */
    boolean login(String username,String pwd) throws Exception;
}

5.书写ServiceImpl

package com.bz.service.impl;
import com.bz.dao.UserDao;
import com.bz.dao.impl.UserDaoImpl;
import com.bz.service.UserService;
public class UserServiceImpl implements UserService {
    //创建Dao对象
    private UserDao ud=new UserDaoImpl();
    @Override
    public boolean login(String username, String pwd)throws Exception {
        if (ud.selectUser(username, pwd)!=null) {
            return true;
        }else{
            return false;
        }
    }
}

6.书写view

package com.bz.view;
import com.bz.service.UserService;
import com.bz.service.impl.UserServiceImpl;
import java.util.Scanner;
/**
 * 用户登录
 */
public class UserloginTest {
    public static void main(String[] args) throws Exception{
        UserService us=new UserServiceImpl();
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String username=sc.next();
        System.out.println("请输入密码:");
        String pwd=sc.next();
        //调用Service方法判断登录是否成功
        if (us.login(username,pwd)){
            System.out.println("登录成功!");
        }else {
            System.out.println("登录失败");
        }
    }
}
目录
相关文章
|
18天前
|
安全 Unix Linux
Metasploit Pro 4.22.7-2025050101 发布 - 专业渗透测试框架
Metasploit Pro 4.22.7-2025050101 发布 - 专业渗透测试框架
55 10
Metasploit Pro 4.22.7-2025050101 发布 - 专业渗透测试框架
|
27天前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.7-2025042101 发布 - 专业渗透测试框架
Metasploit Pro 4.22.7-2025042101 (Linux, Windows) - 专业渗透测试框架
49 5
Metasploit Pro 4.22.7-2025042101 发布 - 专业渗透测试框架
|
27天前
|
人工智能 自然语言处理 数据可视化
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
|
7天前
|
数据采集 安全 Linux
Metasploit Pro 4.22.7-2025051201 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.7-2025051201 (Linux, Windows) - 专业渗透测试框架
25 4
Metasploit Pro 4.22.7-2025051201 (Linux, Windows) - 专业渗透测试框架
|
7天前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
25 4
Metasploit Framework 6.4.63 (macOS, Linux, Windows) - 开源渗透测试框架
|
1月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
237 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
10天前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
53 6
|
1月前
|
人工智能 安全 测试技术
AI做奥赛题能及格吗?OlympicArena:上海交大推出多学科认知推理基准测试框架,挑战AI极限
OlympicArena是由上海交大等机构联合推出的多学科认知推理基准测试框架,包含7大学科11,163道奥林匹克竞赛级题目,通过细粒度评估推动AI向超级智能发展。
98 12
AI做奥赛题能及格吗?OlympicArena:上海交大推出多学科认知推理基准测试框架,挑战AI极限
|
1月前
|
存储 安全 Linux
Metasploit Pro 4.22.7-2025040601 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.7-2025040601 (Linux, Windows) - 专业渗透测试框架
74 1
Metasploit Pro 4.22.7-2025040601 (Linux, Windows) - 专业渗透测试框架
|
1月前
|
Linux 网络安全 iOS开发
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架
49 0
Metasploit Framework 6.4.55 (macOS, Linux, Windows) - 开源渗透测试框架

热门文章

最新文章