首页 >> 大全

JAVA 3层架构及其实例文件/代码规范

2023-09-20 大全 26 作者:考证青年

目录

架构

为什么要使用3层架构

各个部分应有的文件

表现层

业务逻辑

数据访问层

各层示例代码

表现层

jsp

业务逻辑层

接口

逻辑

数据访问层

dao 接口

dao 操作

一图胜万言

如何讲解代码架构_代码架构是什么意思_

架构图

为什么要使用3层架构

1 方便团队分工 利于维护

2 规范代码,在开发软件时对每个层的代码进行规范,固定开发语言的风格。

3 降低更新难度,当软件系统要换数据库时,只要将数据访问层的代码修改就好了。

4 实现"高内聚、低耦合"。易于分配资源。

5 是使得代码逻辑清晰。

各个部分应有的文件 表现层

应该有的文件(jsp+)

业务逻辑层

应该有的文件(的接口,及其实现的逻辑代码)

具体的逻辑代码应该包括,多次对Dao层的操作(多次查询,修改,登陆的检验,用户在线状态的检验等等)也包括对数据库的连接,关闭等等

数据访问层

应该有的

DAO(全称Data ,意为数据访问接口/对象)

DAO中也应该定义接口,及其实现(具体指增删改查的代码)

(意为实体类是数据库表的映射)

utils是工具集的意思,其中连接数据库,关闭数据库/数据源/对象的一些操作应该写在这里的某个类里面

各层示例代码 表现层 jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Title



序号品牌名称企业名称排序品牌介绍状态操作
${brand.id}${brand.brandName}${brand.companyName}${brand.ordered}${brand.description} ${brand.status}修改 删除

package com.teaching.jsp.servlet;import com.teaching.jsp.entity.Brand;
import com.teaching.jsp.service.BrandService;
import com.teaching.jsp.service.impl.BrandServiceImpl;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;@WebServlet(name = "AddBrandServlet", value = "/addBrand")
public class AddBrandServlet extends HttpServlet {BrandService brandService=new BrandServiceImpl();@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("utf8");//接收参数String brandName = request.getParameter("brandName");String companyName = request.getParameter("companyName");String ordered = request.getParameter("ordered");String description = request.getParameter("description");String status = request.getParameter("status");//封装BrandBrand brand = new Brand();brand.setBrandName(brandName);brand.setDescription(description);brand.setCompanyName(companyName);brand.setOrdered(Integer.valueOf(ordered));brand.setStatus(Integer.valueOf(status));//调用Service去处理业务brandService.insertBrand(brand);//转发到selectAllresponse.sendRedirect("/teachingJsp/selectBrand");}
}

业务逻辑层 接口

package com.teaching.jsp.service;import com.teaching.jsp.entity.Brand;import java.util.List;public interface BrandService {List selectAllBrand();boolean insertBrand(Brand brand);Brand selectBrandById(String id);boolean updateBrand(Brand brand);
}

逻辑

package com.web.serivce.impl;import com.web.dao.Impl.UserDaoImpl;
import com.web.dao.UserDao;
import com.web.entity.User;
import com.web.serivce.UserServlet;
import com.web.utils.DbUtils;import java.sql.Connection;
import java.sql.SQLException;public class UserService implements UserServlet {private UserDao userDao=new UserDaoImpl();//使用Dao查询当前的用户@Overridepublic User getUserByUserEntity(User user) {//service是有多个dao方法组成//和数据库交互相关的方法调用//其中获取数据库连接,关闭连接 应该写在本层User u= null;Connection connection =null;try {connection = DbUtils.getConnection();connection.setAutoCommit(false);u = userDao.selectUserByEntity(user,connection);connection.commit();} catch (SQLException e) {try {connection.rollback();} catch (SQLException ex) {throw new RuntimeException(ex);}throw new RuntimeException(e);} finally {if (connection!=null){try {DbUtils.close(connection);} catch (SQLException e) {throw new RuntimeException(e);}}}return u;}//判断用户是否注册@Overridepublic boolean registryUser(User user) {User u= null;Connection connection =null;int row=0;try {connection = DbUtils.getConnection();connection.setAutoCommit(false);int i=userDao.selectUserByUsername(user.getUsername(),connection);if (i>0){throw new RuntimeException("username已经存在");}row+=userDao.insertUser(user,connection);connection.commit();} catch (SQLException e) {try {connection.rollback();} catch (SQLException ex) {throw new RuntimeException(ex);}throw new RuntimeException(e);} finally {if (connection!=null){try {DbUtils.close(connection);} catch (SQLException e) {throw new RuntimeException(e);}}}return row>0;}
}

数据访问层 dao 接口

package com.teaching.jsp.dao;import com.teaching.jsp.entity.Brand;import java.util.List;
//DAO 的全称是Data Access Object
public interface BrandDao {List selectAll();boolean insert(Brand brand);Brand selectBrandById(String id);boolean updateBrand(Brand brand);
}

dao 操作

对数据库的连接不应该写在此层,应该写在层

package com.teaching.web.dao;import com.teaching.web.entity.User;
import com.teaching.web.utils.DbUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class UserDaoImpl implements UserDao {@Overridepublic User selectUserByEntity(User user, Connection connection) throws SQLException {String sql="select id,username,password from user where username=? and password=?";User u = null;PreparedStatement ps = connection.prepareStatement(sql);ps.setString(1, user.getUsername());ps.setString(2, user.getPassword());ResultSet rs = ps.executeQuery();if (rs.next()){u =new User(rs.getInt(1),rs.getString(2),rs.getString(3));}return u;}@Overridepublic int insertUser(User user, Connection connection) throws SQLException {String sql="insert into user values (null,?,?)";PreparedStatement ps = connection.prepareStatement(sql);ps.setString(1, user.getUsername());ps.setString(2, user.getPassword());int i = ps.executeUpdate();DbUtils.close(ps,null,null);return i;}@Overridepublic int selectUserByUsername(String username, Connection connection) throws SQLException {PreparedStatement ps=null;ResultSet resultSet=null;int anInt=0;try {String sql="select count(*) from user where username=?";ps = connection.prepareStatement(sql);ps.setString(1,username);resultSet = ps.executeQuery();if (resultSet.next()){anInt = resultSet.getInt(1);}} finally {DbUtils.close(ps,resultSet,null);}return anInt;}}

package com.teaching.jsp.entity;public class Brand {// id 主键private Integer id;// 品牌名称private String brandName;// 企业名称private String companyName;// 排序字段private Integer ordered;// 描述信息private String description;// 状态:0:禁用  1:启用private Integer status;public Brand() {}public Brand(Integer id, String brandName, String companyName, String description) {this.id = id;this.brandName = brandName;this.companyName = companyName;this.description = description;}public Brand(Integer id, String brandName, String companyName, Integer ordered, String description, Integer status) {this.id = id;this.brandName = brandName;this.companyName = companyName;this.ordered = ordered;this.description = description;this.status = status;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getBrandName() {return brandName;}public void setBrandName(String brandName) {this.brandName = brandName;}public String getCompanyName() {return companyName;}public void setCompanyName(String companyName) {this.companyName = companyName;}public Integer getOrdered() {return ordered;}public void setOrdered(Integer ordered) {this.ordered = ordered;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}@Overridepublic String toString() {return "Brand{" +"id=" + id +", brandName='" + brandName + '\'' +", companyName='" + companyName + '\'' +", ordered=" + ordered +", description='" + description + '\'' +", status=" + status +'}';}
}

package com.teaching.jsp.utils;import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;import javax.sql.DataSource;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;public class DbUtils {private static DataSource dataSource;static {Properties prop=new Properties();try {prop.load(new FileInputStream("F:\\JAVA EE Preject\\课堂练习\\src\\com\\teaching\\jsp\\db.properties"));System.out.println("iiii");dataSource = DruidDataSourceFactory.createDataSource(prop);} catch (IOException e) {throw new RuntimeException(e);} catch (Exception e) {throw new RuntimeException(e);}}public static void test(){System.out.println(DbUtils.class.getClassLoader().getResource("db.properties"));}public static Connection getConnection() throws SQLException {System.out.println("iiii111");return dataSource.getConnection();}public static void close(Connection connection) throws SQLException {if (connection!=null){connection.close();}}public static void close(PreparedStatement ps, ResultSet rs,Connection connection) throws SQLException {if (rs!=null){rs.close();}if (ps!=null){ps.close();}if (connection!=null){connection.close();}}
}

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了