黑马程序员_学习日记54_626三层项目(三层案例)
来源:互联网 发布:淘宝权重查询 编辑:程序博客网 时间:2024/06/10 12:34
1、写三层的基本步骤:(以登录练习为例)
1.1根据功能分析Sql语句
由于要求要判断用户名是否存在,并且登录成功后要记录当前用户的真实姓名、主键Id,所以这时考虑sql语句不能是:select count(*)...,应该是下面这条:
select * from T_Seats where CC_LoginId=@uid
1.2根据sql语句编写数据访问层
1.3编写业务逻辑层BLL(业务逻辑层中的方法的参数与返回值由表现层(调用者)来决定)
1.4编写表现层,在表现层调用业务逻辑层
2、TSeatsBll、TSeatDal 为什么不写成静态的?
这些业务逻辑层类、数据访问层类没有写成静态的,是为了以后实现多态
3、三层实现增删改查
3.1结构
DAL:SqlHelper.cs+PersonDal.cs
+
BLL:PersonBll.cs
+
UI:Form1.cs+App.config
+
Model:Person.cs
3.2具体问题
3.2.1Load时读取整张表应该用List<Person>作为返回值,而不是DataTable;List<Person>用DataReader读取;Person变量应该声明在循环内。具体实现为
public List<Person> LoadTable()
{
string sql = "select uName,age,height,gender from TblPerson";
List<Person> listPerson = new List<Person>();
using (SqlDataReader reader = SqlHelper.ExecuteReader(constr,CommandType.Text,sql))
{
if (reader.HasRows)
{
while (reader.Read())
{
//应该在循环内部声明Person变量,才能实例化多个对象,不然加载到List上为多个相同的Person
Person person = new Person();
person.UName = reader.GetString(0);
person.Age = reader.GetInt32(1);
person.Height = reader.IsDBNull(2) ? null : (int?)reader.GetInt32(2);
person.Gender = reader.IsDBNull(3) ? null : (object)reader.GetBoolean(3);
listPerson.Add(person);
}
}
}
return listPerson;
}
3.2.2Insert方法需要返回自动编号用output inserted.autoId。用ExecuteScalar返回
3.2.3Person类的Gender属性用object类型,方便实现在UI层由bool类型向string类型的转换
4、三层实现登录、修改密码
4.1结构
DAL:SqlHelper.cs+SeatsDal.cs
+
BLL:CommonHelper.cs(封装MD5算法)+SeatsBll.cs
+
UI:App.config+GlobalHelper.cs(保存需要在窗口间传递的静态字段)+LoginForm.cs+RegisterForm.cs
+
Model:SeatModel.cs(存放座席信息)
- 黑马程序员_学习日记54_626三层项目(三层案例)
- 黑马程序员_学习日记56_629三层项目(邮件收发、三层总结、HTML)
- 黑马程序员_学习日记53_625三层项目(FTP相关操作、递归TreeView、三层结构)
- 黑马程序员_学习日记52_622三层项目(MD5、NPOI)
- 黑马程序员_学习日记70_721ASP.NET(Web三层增删查改CRUD)
- 黑马程序员_学习日记55_628三层项目(用类封装用于拼接的where条件语句、写代码生成器)
- 黑马程序员学习日记-----搭建三层的步骤
- 【黑马程序员】三层架构(学习笔记)
- 黑马程序员_学习日记77_803MVC简介(三层深入、lambda查询、延迟加载机制多次查询数据库的问题、MVC简介、HtmlHelper)
- 黑马程序员_浅谈三层架构
- 黑马程序员-三层架构
- 黑马程序员_三层架构之用户登陆(BS架构)
- 黑马程序员---理解三层架构
- 黑马程序员-三层架构介绍
- 黑马程序员_学习日记64_711jQuery3(动画、插件)
- 黑马程序员_学习日记2(java基础 一)
- 黑马程序员-----面向对象_内部类(学习日记)
- 黑马程序员_学习日记3_WinForm
- Java编程中“为了性能”尽量要做到的一些地方
- Shape详解 (GradientDrawable)(转载)
- Ubuntu的sudo与su命令使用与开启root帐户
- 掌控大局
- .网站用户行为分析:揭秘用户为什么放弃你的网站
- 黑马程序员_学习日记54_626三层项目(三层案例)
- 黑马程序员-内部类
- 一些牛人榜样,多看看他们写的东西(后续整理牛人的blog等)
- 给android图像设置圆角样式(Android Shapes – Example)(quoted)
- mysql1
- 因特尔8051的两大亮点
- Android:限制EditText中只可以输入字母和数字
- 使用apache StringUtils.split替代String.split
- BASH编程中会遇到的24个陷阱