一般处理程序加简单三层实现增删查改(1)

一般处理程序通常实现IHttpHandler接口,ashx效率比较高效,webform(aspx)比较消耗资源,mvc效率刚好介于两者之间

一般处理程序处理过程(HttpHandler)

IIS处理不了这种后缀程序通过映射表将该程序传递给ASPNET_ISAPI.DLL的程序,然后又将请求转给了网站程序
网站程序调用HttpRuntime类的静态方法处理请求,有以下步骤:
1,实现System.Web.IHttpHandle特殊接口的类
实现了该接口的类都能作为一个外部请求的目标程序
2,创建 HttpContext context 数据上下文对象,用于处理请求的所以参数数据.
(主要是httpRequest-->用于Form表单数据url 参数 和httpResponse()主要包含了FileStream对象用于保存输出的数据)
3,分析请求报文,并将数据封装到HttpWorkerRequest对象对应的属性
并调用HttpApplicationFactory的类中的静态方法来创建HttpApplication对象
(实际上是先通过httpApplication池 看有没有空闲的  没有才创建),那么
该对象会处理此次请求的所有运行过程
4,httpContex对象传入到httpApplication的时候就可以调用页面类中的ProcessRequest方法

 

好了一般处理程序就说到这里吧!

开始我来实现我的简单三层

第一步我首先搭建了DAL层(数据访问层)

因为是直接与数据库发生关系的,所以我新建了一个HelperSQL.cs类



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudentManagement.DAL
{
    //需要系统配置;系统设定;系统设置;查看系统配置程序集
    using System.Configuration;
    using System.Data.SqlClient;
    using System.Data;
   public class HelperSQL
    {
        //在ui的配置文件中配置AppSettings
       public static string str = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"];

       private static SqlConnection connection;
       public static SqlConnection Connection {
           get {
               //判断是否有这个连接没有
               if (connection == null) {
                   //创建连接
                   connection = new SqlConnection(str);
                   //打开连接
                   connection.Open();
               }
                   //判断连接是否是关闭的
               else if(connection.State==System.Data.ConnectionState.Closed){
                   //打开连接
                   connection.Open();
               }
                   //判断连接是否中断
               else if (connection.State == System.Data.ConnectionState.Broken) {
                   //先关闭连接
                   connection.Close();
                   //打开连接
                   connection.Open();
               }
               //返回连接
               return connection;
           }
       }

       public static int ExecuteCommand(string strsql)
       {
           //传入数据库命令和连接
           SqlCommand sqlcmd = new SqlCommand(strsql, Connection);
           //执行语句返回受影响的行数
           int result = sqlcmd.ExecuteNonQuery();
           return result;
       }
       public static int ExecuteCommand(string str, params SqlParameter[] values) {
           //传入数据库命令和连接
           SqlCommand sqlcmd = new SqlCommand(str, Connection);
           //增加参数
           sqlcmd.Parameters.AddRange(values);
           return sqlcmd.ExecuteNonQuery();
       }

       public static DataSet GetDataSet(string str) {
           //创建一个内存缓存
           DataSet ds = new DataSet();
           //传入命令和连接
           SqlCommand sqlcmd = new SqlCommand(str,Connection);
           //创建一个桥接器
           SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd);
           //写入内存
           sqlda.Fill(ds);
           //返回
           return ds;
       }

       public static DataSet GetDataSet(string str, params SqlParameter[] values)
       {
           //创建一个内存缓存
           DataSet ds = new DataSet();
           //传入命令和连接
           SqlCommand sqlcmd = new SqlCommand(str, Connection);
           //增加参数
           sqlcmd.Parameters.AddRange(values);
           //打开桥连接
           SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd);
           //写入到内存
           sqlda.Fill(ds);
           //返回
           return ds;
       }

       public static DataSet StoredProcedure(string strName, params IDataParameter[] parmenters)
       {
           using (SqlConnection connection = new SqlConnection(str))
           {
               //创建一个内存缓存
               DataSet ds = new DataSet();
               //创建一个桥连接
               SqlDataAdapter sqlda = new SqlDataAdapter();
               //告诉桥连接这个是存储过程
               sqlda.SelectCommand = StoredProcedureCommand(connection, strName, parmenters);
               //写入内存
               sqlda.Fill(ds);
              //返回
               return ds;
           }
       }
       private static SqlCommand StoredProcedureCommand(SqlConnection sqlcc, string strName, IDataParameter[] parmenters) {
           //传入存储过程名称和连接数据库命令
           SqlCommand sqlcmd = new SqlCommand(strName, sqlcc);
           //告诉数据库这个是存储过程
           sqlcmd.CommandType = CommandType.StoredProcedure;
           foreach (var item in parmenters)
           {
               if (item !=null)
               {
                   //判断的参数是输入输出或者参数是输入并且参数不能为空
                   if ((item.Direction==ParameterDirection.InputOutput||
                  
                       item.Direction==ParameterDirection.Input  )&&
                  
                       (item.Value==null))
                   {
                       //该类区分空值(空对象)和未初始化值
                       item.Value = DBNull.Value;
                   }
                   //加入这个参数
                   sqlcmd.Parameters.Add(item);
               }      
           }
           //返回连接和命令
           return sqlcmd;
       }
   }
}
View Code

 

这个是手动搭建的一个类库,可能不全,随后我会附加上一个比较全的sqlHelper.cs类文件

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace DAL
{
    /// <summary>
    /// 数据层 - 数据库 操作类
    /// </summary>
    internal class SqlHelper
    {
        //获得配置文件的连接字符串
        public readonly static string strConn = System.Configuration.ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
        #region 01.查询数据表 static DataTable ExecuteDataTable(string strSql, params SqlParameter[] paras)
        /// <summary>
        /// 查询数据表
        /// </summary>
        /// <param name="strSql">sql语句</param>
        /// <param name="paras">参数数组</param>
        /// <returns>数据表</returns>
        public static DataTable GetDataTable(string strSql, params SqlParameter[] paras)
        {
            //创建数据库连接对象
            SqlConnection conn = new SqlConnection(strConn);
            //创建适配器对象(sql命令,连接通道)
            SqlDataAdapter da = new SqlDataAdapter(strSql, conn);
            //为适配器添加参数
            da.SelectCommand.Parameters.AddRange(paras);
            //创建数据表对象
            DataTable dt = new DataTable();
            //适配器 读取数据库,并将查询的结果 装入程序的 dt里
            da.Fill(dt);
            //返回数据表
            return dt;
        }
        #endregion
        #region 02.执行非查询语句 int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
        /// <summary>
        /// 执行非查询语句)
        /// </summary>
        /// <param name="strSql">sql语句</param>
        /// <param name="paras">参数数组</param>
        /// <returns>受影响的行数</returns>
        public static int ExcuteNonQuery(string strSql, params SqlParameter[] paras)
        {
            int res = -1;
            //创建连接通道
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                //创建命令对象(sql语句,连接通道)
                SqlCommand cmd = new SqlCommand(strSql, conn);
                //添加参数
                cmd.Parameters.AddRange(paras);
                conn.Open();
                //执行非查询SQL命令
                res = cmd.ExecuteNonQuery();
            }
            return res;
        }
        #endregion
        #region 03.执行多条非查询语句 public static int ExcuteNonQuerys(string[] strSqls, SqlParameter[][] parasArr)
        /// <summary>
        /// 执行多条非查询语句
        /// </summary>
        /// <param name="strSql">sql语句数组</param>
        /// <param name="paras">参数二维数组</param>
        /// <returns>受影响的行数</returns>
        public static int ExcuteNonQuerys(string[] strSqls, SqlParameter[][] parasArr)
        {
            int res = 0;
            //创建连接通道
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                //打开数据库连接
                conn.Open();
                //创建事务
                SqlTransaction tran = conn.BeginTransaction();
                //创建命令对象
                SqlCommand cmd = conn.CreateCommand();
                //为命令对象指定事务
                cmd.Transaction = tran;
                try
                {
                    //循环执行sql语句
                    for (int i = 0; i < strSqls.Length; i++)
                    {
                        //获得要执行的sql语句
                        string strSql = strSqls[i];
                        //为命令对象指定 此次执行的 sql语句
                        cmd.CommandText = strSql;
                        //添加参数
                        if (parasArr.Length > i)//如果 参数2维数组的长度大于当前循环的下标
                        {
                            cmd.Parameters.AddRange(parasArr[i]);//将 交错数组 的第一个元素(其实也是一个数组,添加到参数集合中)
                        }
                        res += cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                    }
                    tran.Commit();//提交事务
                }
                catch (Exception ex)
                {
                    res = 0;
                    tran.Rollback();//回滚事务
                    throw ex;
                }
            }
            return res;
        }
        #endregion
        #region 04.执行Scalar查询单个值 public static int ExcuteScalar(string strSql, params SqlParameter[] paras)
        /// <summary>
        /// 执行Scalar查询单个值
        /// </summary>
        /// <param name="strSql">sql语句</param>
        /// <param name="paras">参数数组</param>
        /// <returns>返回查询结果</returns>
        public static int ExcuteScalar(string strSql, params SqlParameter[] paras)
        {
            int res = -1;
            //创建连接通道
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                //创建命令对象(sql语句,连接通道)
                SqlCommand cmd = new SqlCommand(strSql, conn);
                //添加参数
                cmd.Parameters.AddRange(paras);
                conn.Open();
                //将查询结果转换为int类型并返回
                res = Convert.ToInt32(cmd.ExecuteScalar());
            }
            return res;
        }
        #endregion
        #region 05.执行分页存储过程 public static DataTable GetPageList(int pageIndex, int pageSize, out int pageCount, out int rowCount)
        /// <summary>
        ///执行特殊的分页存储过程
        /// </summary>
        /// <param name="userID">用户ID</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="pageSize">页容量</param>
        /// <param name="pageCount">总页数--输出</param>
        /// <param name="rowCount">总行数--输出</param>
        /// <returns></returns>
        public static DataTable GetPageListByProc(int userID, int pageIndex, int pageSize, out int rowCount, out int pageCount)
        {
            DataTable dt = new DataTable();
            //创建连接通道
            using (SqlConnection conn = new SqlConnection(strConn))
            {
                //创建适配器对象
                SqlDataAdapter da = new SqlDataAdapter("GetPageList", conn);
                //设置 命令类型 为存储过程
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                //设置 参数
                da.SelectCommand.Parameters.AddWithValue("@pageIndex", pageIndex);//当前页码
                da.SelectCommand.Parameters.AddWithValue("@pageSize", pageSize);//页容量
                da.SelectCommand.Parameters.AddWithValue("@userID", userID); //用户ID
                //在存储过程中 输出参数
                da.SelectCommand.Parameters.Add(new SqlParameter("@rowCount", SqlDbType.Int));
                da.SelectCommand.Parameters.Add(new SqlParameter("@pageCount", SqlDbType.Int));
                //将后面两个参数 设置为 输出类型
                da.SelectCommand.Parameters[3].Direction = ParameterDirection.Output;
                da.SelectCommand.Parameters[4].Direction = ParameterDirection.Output;
                //执行 并将查询到的 结果 赋给 数据表对象
                da.Fill(dt);
                //获得 存储过程 返回的 输出参数
                rowCount = Convert.ToInt32(da.SelectCommand.Parameters[3].Value);
                pageCount = Convert.ToInt32(da.SelectCommand.Parameters[4].Value);
            }
            //返回数据表
            return dt;
        }
        #endregion
        #region 06.执行存储过程 public static DataTable ExecuteProcedure(string procedure, params SqlParameter[] paras)
        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="procedure">存储过程名称</param>
        /// <param name="param">参数数组</param>
        /// <returns>数据表</returns>
        public static DataTable ExecuteProcedure(string procedure, params SqlParameter[] paras)
        {
            //创建连接通道
            SqlConnection conn = new SqlConnection(strConn);
            //创建适配器对象(sql命令,连接通道)
            SqlDataAdapter da = new SqlDataAdapter(procedure, conn);
            //设置适配器的命令类型为存储过程
            da.SelectCommand.CommandType = CommandType.StoredProcedure;
            //为适配器添加参数
            da.SelectCommand.Parameters.AddRange(paras);
            //创建数据表对象
            DataTable dt = new DataTable();
            //填充数据集
            da.Fill(dt);
            //返回数据表
            return dt;
        }
        #endregion
        /***********************分页存储过程SQL代码***********************
        CREATE procedure usp_GetPageList
            @PageIndex int = 1,
            @PageSize int = 10,
            @PageCount int output,
            @RowCount int output
        as
        begin
            select * from (Select ROW_NUMBER() over(order by ID) as num, * from Student) as temp where num between (@pageIndex-1) * @pageSize + 1 and @pageSize + 1
            select @RowCount = COUNT(*) from Student
            set @PageCount = Ceiling(@RowCount/@PageSize)
        end
        *****************************************************************/
    }
}
View Code

这里我经常出现的问题是DataTable与DataSet的问题
第一、DataSet 应用程序集的问题 using system.data;这个东西我老是忘掉  所以在后面的BLL层,UI层这个程序集一定要引用上。
第二、解释下DataSet和DataTable之间的关系:
DataSet可以比作一个内存中的数据库,DataTable是一个内存中的数据表,DataSet里可以存储多个DataTable
一般我们可能需要将DataSet转换成DataTable : DataSet ds=new DataSet(); DataTable dt=ds.Tables[0];

这里我还想说上一点点,就是 SqlDataAdapter
SqlDataAdapter是 DataSet和 SQL Server之间的桥接器,用于检索和保存数据。
其引用程序集  using:System.Data.SqlClient; 

这个里说一点小小的东西,一般我们看到Table 都知道是一个表 而在c#都会出现Table+“s” 这个可以理解成一个集合,如果这个理解有错,希望大家指点指点。

这个搭建好了,突然觉得好像没有数据库,接下里我就上传一个简单的数据库脚本
USE [master]
GO
/****** Object:  Database [StudentManagement]    Script Date: 2014/12/28 15:22:35 ******/
CREATE DATABASE [StudentManagement]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'StudentManagement_data', FILENAME = N'E:\SQL\StudentManagement.mdf' , SIZE = 10240KB , MAXSIZE = 10240KB , FILEGROWTH = 10%)
 LOG ON 
( NAME = N'StudentManagement_log', FILENAME = N'E:\SQL\StudentManagement,ldf' , SIZE = 5120KB , MAXSIZE = 2048GB , FILEGROWTH = 10240KB )
GO
ALTER DATABASE [StudentManagement] SET COMPATIBILITY_LEVEL = 110
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [StudentManagement].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [StudentManagement] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [StudentManagement] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [StudentManagement] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [StudentManagement] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [StudentManagement] SET ARITHABORT OFF 
GO
ALTER DATABASE [StudentManagement] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [StudentManagement] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [StudentManagement] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [StudentManagement] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [StudentManagement] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [StudentManagement] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [StudentManagement] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [StudentManagement] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [StudentManagement] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [StudentManagement] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [StudentManagement] SET  ENABLE_BROKER 
GO
ALTER DATABASE [StudentManagement] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [StudentManagement] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [StudentManagement] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [StudentManagement] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [StudentManagement] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [StudentManagement] SET READ_COMMITTED_SNAPSHOT OFF 
GO
ALTER DATABASE [StudentManagement] SET HONOR_BROKER_PRIORITY OFF 
GO
ALTER DATABASE [StudentManagement] SET RECOVERY FULL 
GO
ALTER DATABASE [StudentManagement] SET  MULTI_USER 
GO
ALTER DATABASE [StudentManagement] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [StudentManagement] SET DB_CHAINING OFF 
GO
ALTER DATABASE [StudentManagement] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
GO
ALTER DATABASE [StudentManagement] SET TARGET_RECOVERY_TIME = 0 SECONDS 
GO
EXEC sys.sp_db_vardecimal_storage_format N'StudentManagement', N'ON'
GO
USE [StudentManagement]
GO
/****** Object:  Table [dbo].[SM_Class]    Script Date: 2014/12/28 15:22:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[SM_Class](
    [SM_id] [int] IDENTITY(1,1) NOT NULL,
    [SM_name] [varchar](20) NULL,
    [SM_Grade] [varchar](20) NULL,
    [SM_Class] [varchar](20) NULL,
    [SM_Gender] [varchar](5) NULL,
    [SM_Age] [int] NULL,
    [SM_OutTime] [datetime] NOT NULL,
    [SM_Istf] [bit] NOT NULL,
 CONSTRAINT [PK__SM_Class__D963B824E04B3DFA] PRIMARY KEY CLUSTERED 
(
    [SM_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
USE [master]
GO
ALTER DATABASE [StudentManagement] SET  READ_WRITE 
GO
View Code

这个数据库的脚本可能需要注意的两点 

第一、你必须手动建一个“StudentManagement”的数据库,建好数据库之后 在新建查询 里面打上 USE StudentManagement;

第二、在你新建表的同时,你需要确定你的路径在哪里

( NAME = N'StudentManagement_data', FILENAME = N'E:\SQL\StudentManagement.mdf' , SIZE = 10240KB , MAXSIZE = 10240KB , FILEGROWTH = 10%)
LOG ON
( NAME = N'StudentManagement_log', FILENAME = N'E:\SQL\StudentManagement,ldf' , SIZE = 5120KB , MAXSIZE = 2048GB , FILEGROWTH = 10240KB )
GO

也就是FILENAME 后面的路径在那个盘下面的那个文件.这个搭建好了之后我相信应该会有数据库了吧 !里面的字段可能不够成熟,希望大家多多指导下。



 

转载于:https://www.cnblogs.com/fleas/p/4190040.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java三层架构是一种常用的软件架构,通常分为表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。 在实现增删查改登录注册功能时,可以按照以下步骤进行: 1. 表现层:在表现层中,通常使用Java Web框架(如Spring MVC)进行实现,用于处理用户请求和响应。其中,登录和注册可以使用Java Servlet或者JSP页面实现,而增删查改可以通过RESTful API实现。 2. 业务逻辑层:在业务逻辑层中,通常编写Java代码实现具体的业务逻辑,例如验证用户输入的用户名和密码是否正确,根据用户输入的条件查询数据库等。 3. 数据访问层:在数据访问层中,通常使用ORM框架(如MyBatis)进行实现,用于与数据库进行交互。其中,可以定义DAO接口和Mapper文件来实现数据的增删查改操作。 具体实现可以参考以下示例代码: 1. 用户登录 表现层(使用Spring MVC框架): ```java @Controller @RequestMapping("/login") public class LoginController { @Autowired private UserService userService; @PostMapping public String login(@RequestParam String username, @RequestParam String password, HttpSession session) { User user = userService.login(username, password); if (user != null) { session.setAttribute("user", user); return "redirect:/home"; } else { return "redirect:/login?error=1"; } } } ``` 业务逻辑层: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User login(String username, String password) { User user = userMapper.findByUsername(username); if (user != null && user.getPassword().equals(password)) { return user; } else { return null; } } } ``` 数据访问层(使用MyBatis框架): ```java public interface UserMapper { User findByUsername(@Param("username") String username); } ``` 2. 用户注册 表现层(使用Spring MVC框架): ```java @Controller @RequestMapping("/register") public class RegisterController { @Autowired private UserService userService; @PostMapping public String register(@RequestParam String username, @RequestParam String password, HttpSession session) { User user = new User(); user.setUsername(username); user.setPassword(password); boolean success = userService.register(user); if (success) { session.setAttribute("user", user); return "redirect:/home"; } else { return "redirect:/register?error=1"; } } } ``` 业务逻辑层: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public boolean register(User user) { User existUser = userMapper.findByUsername(user.getUsername()); if (existUser != null) { return false; } else { userMapper.insert(user); return true; } } } ``` 数据访问层(使用MyBatis框架): ```java public interface UserMapper { User findByUsername(@Param("username") String username); void insert(User user); } ``` 3. 查询用户 表现层(使用Spring MVC框架): ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") @ResponseBody public User getUser(@PathVariable("id") Long id) { return userService.getById(id); } } ``` 业务逻辑层: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getById(Long id) { return userMapper.getById(id); } } ``` 数据访问层(使用MyBatis框架): ```java public interface UserMapper { User getById(@Param("id") Long id); } ``` 4. 更新用户 表现层(使用Spring MVC框架): ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @PutMapping("/{id}") @ResponseBody public boolean updateUser(@PathVariable("id") Long id, @RequestBody User user) { return userService.update(id, user); } } ``` 业务逻辑层: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public boolean update(Long id, User user) { User existUser = userMapper.getById(id); if (existUser == null) { return false; } else { existUser.setUsername(user.getUsername()); existUser.setPassword(user.getPassword()); userMapper.update(existUser); return true; } } } ``` 数据访问层(使用MyBatis框架): ```java public interface UserMapper { User getById(@Param("id") Long id); void update(User user); } ``` 5. 删除用户 表现层(使用Spring MVC框架): ```java @Controller @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @DeleteMapping("/{id}") @ResponseBody public boolean deleteUser(@PathVariable("id") Long id) { return userService.delete(id); } } ``` 业务逻辑层: ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public boolean delete(Long id) { User existUser = userMapper.getById(id); if (existUser == null) { return false; } else { userMapper.delete(id); return true; } } } ``` 数据访问层(使用MyBatis框架): ```java public interface UserMapper { User getById(@Param("id") Long id); void delete(@Param("id") Long id); } ``` 以上示例代码仅为参考,实际实现还需要考虑安全性、异常处理等问题。 ### 回答2: Java三层架构是一种常用的软件开发架构,用于实现将应用程序分为表现层、业务逻辑层和数据访问层三个独立的模块。下面将介绍如何在这个架构下实现(Create)、删除(Delete)、查询(Retrieve)和修改(Update)功能以及登录(Login)和注册(Register)功能。 首先,在表现层(Presentation Layer),我们可以使用Java的Swing或JavaFX等界面库来设计用户界面,实现用户的输入与输出。对于登录和注册功能,可以设计登录界面和注册界面,通过用户输入的用户名和密码进行验证。 其次,在业务逻辑层(Business Logic Layer),我们可以编写Java类来处理具体的业务逻辑。针对增删查改功能,我们可以设计一个数据服务类,封装对数据库的操作。例如,对于增功能,可以编写一个方法,接收用户输入的数据,调用数据访问层的方法将数据插入数据库;对于删除功能,可以编写一个方法,接收用户输入的主键信息,调用数据访问层的方法删除对应的数据;对于查询功能,可以编写一个方法,接收用户输入的查询条件,调用数据访问层的方法从数据库中查询数据;对于修改功能,可以编写一个方法,接收用户输入的修改数据,调用数据访问层的方法更新数据库中的数据。 最后,在数据访问层(Data Access Layer),我们可以使用Java的JDBC或Hibernate等技术与数据库进行交互。可以编写一个持久化类,封装数据库连接、查询、插入、更新和删除等操作的实现。该类可以提供各种与数据库操作相关的方法供业务逻辑层调用。 综上所述,使用Java三层架构可以很好地实现增删查改和登录注册功能。通过合理划分不同模块的职责,并灵活运用相关技术,可以使代码结构清晰,逻辑清楚,提高开发效率和代码的可维护性。成功地构建这些功能有助于开发出健壮、可靠的应用程序。 ### 回答3: Java三层架构是一种常用的软件架构模式,将应用程序分为三个独立、可维护和可重用的层次,分别是表示层(展示层)、业务逻辑层和数据访问层。 在增删查改操作中,我们可以将其分别应用于对数据库的操作实现。例如对于登录注册功能,可以进行如下操作: 1. 数据访问层(DAO):该层负责与数据库的交互,执行增删查改的操作。在登录注册功能中,可以通过函数实现用户信息的增(注册)、删除、查询和修改。对于登录操作,可以提供一个函数,通过用户名和密码查询用户信息是否存在并验证密码是否正确。对于注册操作,可以提供一个函数,将用户信息插入到数据库中。 2. 业务逻辑层(Service):该层负责处理业务逻辑,调用数据访问层进行数据操作。在登录注册功能中,可以在该层进行用户输入的合法性验证,比如判断用户名是否已存在于数据库中。同时,该层也可以处理登录成功后的业务逻辑,比如权限验证、跳转到特定页面等。 3. 表示层(Presentation):该层负责与用户进行交互,接收用户的请求并展示处理结果。在登录注册功能中,可以通过页面设计提供用户输入框和按钮,用户通过填写用户名和密码进行登录或注册操作。同时,该层还需要将用户输入的信息传递给业务逻辑层进行处理,并将处理结果以页面或其他方式反馈给用户。 以上是一种基本的Java三层架构设计思路,通过将不同的功能完成在不同的层级中,使得代码更清晰、易于维护和扩展。在实际开发中,我们可以通过框架如Spring MVC来实现三层架构,简化开发流程,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值