高效掌握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("登录失败");
        }
    }
}
目录
相关文章
|
1月前
|
设计模式 前端开发 测试技术
Flutter 项目架构技术指南
探讨Flutter项目代码组织架构的关键方面和建议。了解设计原则SOLID、Clean Architecture,以及架构模式MVC、MVP、MVVM,如何有机结合使用,打造优秀的应用架构。
Flutter 项目架构技术指南
|
1月前
|
分布式计算 算法 调度
课3-详解隐私计算框架的架构和技术要点
隐语架构涵盖产品、算法、计算、资源和硬件五层,旨在实现互联互通和跨域管控。产品层包括SecretPad等,简化用户和集成商体验。算法层涉及PSI/PIR、SCQL和联邦学习,提供隐私保护的数据分析和学习。计算层如RayFed、SPU、HEU等,支持分布式计算和密态处理。资源层的KUSCIA用于跨机构任务编排,硬件层涉及FPGA等加速器。互联互通支持黑盒和白盒模式,确保不同平台协作。跨域管控则强调数据流转控制,保护数据权益。
|
1月前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
34 0
|
20天前
|
Java 测试技术 程序员
junit单元测试
junit单元测试
|
1月前
|
NoSQL Java Redis
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件(二)
【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的分布式锁的功能组件
15 0
|
6天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
ava从入门到精通:2.3.1数据库编程——学习JDBC技术,掌握Java与数据库的交互
|
1月前
|
存储 监控 安全
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
金石推荐 | 【分布式技术专题】「单点登录技术架构」一文带领你好好认识以下Saml协议的运作机制和流程模式
72 1
|
1月前
|
存储 Java 应用服务中间件
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
54 0
|
1月前
|
canal 消息中间件 关系型数据库
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
【分布式技术专题】「分布式技术架构」MySQL数据同步到Elasticsearch之N种方案解析,实现高效数据同步
89 0