新闻发布系统,SQLHelper重构

简介:
    在清楚把握牛腩新闻发布系统的需求,以及对系统的数据库也做好了相应的设计后,接下来的几天里就是对后台代码的编写。
    在视频中,采用的是经典三层的框架,这对于已经经历过机房重构的我们来说,敲代码还是很容易上手的。
    相信大家都不会忘记机房重构中我们的一个好助手,那就是SQLHelper。
    在机房重构的时候,看了很多博客,大家都用上了,也都觉得好用,我也就直接借鉴而来。在自己一步一步调试的时候,在自己的程序出现Bug的时候,真的发现SQLHelper的好处多多。但自己也没有去认真研究过这样一个类究竟是怎么写出来的。
     而现在学习的牛腩视频中,老师给我们清楚的讲解了SQLHelper是怎样一步一步进行完善的。这个过程,感觉真是受益匪浅。
    首先清楚对于数据库的操作,抽象后讲,也就是五步:连接——打开——执行——关闭——返回。
    在用面向对象C#语言编程中,构造函数就是用来进行初始化的工具。所以,连接数据库的代码为:

 public SQLHelper()
        {
            string connStr = "server=hzt-PC;database=newssystem;uid=sa;PWD=123456;";
        }

    下面是对连接状态做判断,如果为关闭,则将其打开:
 private SqlConnection GetConn()
        {
            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            return conn;
        }
    在数据库做完前两项工作后,便可以开始执行其他对于用户想执行的任何增删改查的操作。就拿一个执行无参数的查询的操作来说,代码如下:
public DataTable ExecuteQuery(string sql)
        {
            DataTable dt = new DataTable();
            //连接
            string connStr = "server=hzt-PC;database=newssystem;uid=sa;PWD=123456";
            SqlConnection conn = new SqlConnection(connStr);
            //打开
            conn.Open();
            //执行
            SqlCommand cmd = new SqlCommand(sql, conn);
            SqlDataReader sdr = cmd.ExecuteReader();
            dt.Load(sdr);
            //关闭
            sdr.Close();
            conn.Close();
            //返回
            return dt;
        }
       从上面的代码可以看到,每执行一个具体的操作,都还需要把连接-打开-关闭这三步的代码加上,我们便可对其进行封装,下面便开始对SQLHelper类进行重构。
     第一,从连接说起,在D层中写的代码是具体指明连接哪个数据库,连接哪个服务器,但如果我们想要更换一个数据库,那就必须跑到D层下修改之前编写好的代码,这是不符合开闭原则的。
     所以解决这一问题,我们加上配置文件,使连接的那一长串代码用一个字符串变量表示,如果更换数据库,只需要到配置文件中添加相应的代码就行。
     配置文件中代码:
<connectionStrings>
        <add name="connStr" connectionString="server=; database=newssystem;uid=sa;pwd=123456"/>
    </connectionStrings>
    数据库连接代码:
      public SQLHelper ()
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
            conn = new SqlConnection(connStr);
        }
    第二,仍旧是对数据库状态进行判断,这里没做什么改动。
    第三,对数据库进行各类操作,仍旧以一个执行无参数的查询操作为例,代码如下:
 public DataTable ExecuteQuery(string cmdText, CommandType ct)
        {
            DataTable dt = new DataTable();
            //执行
            cmd = new SqlCommand(cmdText, GetConn());
            cmd.CommandType = ct;
            //关闭
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            //关闭
            return dt;
        }  
    从上面的代码来看,这就比第一次的SQLHelper简单了许多,其它类型的操作也像这样做,一个SQLHelper也就写好了。
    学习心得:
    这一次,对于SQLHelper类的重构的学习,使得自己对这个助手类又亲近了不少。在自己思考总结这个类是如何得来的这一个过程中,对之前学习的数据库的一些基本操作也回顾了一遍,感觉简单了不少。这一次的代码是照着视频中的源码写出来的,或许,下一次,自己根据总结的这五步,一步一步去写,也可以自己写出来一个完整的SQLHelper了。


目录
相关文章
|
SQL Java 测试技术
再也不需要手写 SQL 造数据了
DBeaver 是一个功能非常完善的数据库客户端,它有 开源免费版本:https://github.com/dbeaver/dbeaver, 企业版:https://dbeaver.com/
再也不需要手写 SQL 造数据了
|
4月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
144 0
|
4月前
|
数据库 Java 数据库连接
玩转Play Framework的秘密武器:Ebean ORM带你解锁高效数据库操作新姿势,让你的代码从此飞起来!
【8月更文挑战第31天】Play Framework 以其简洁的 API 和高效开发体验著称,Ebean ORM 则是其推荐的对象关系映射(ORM)工具之一。Ebean 可将 Java 对象轻松映射到数据库表,简化数据库交互。本文将指导你在 Play Framework 中使用 Ebean ORM 进行数据库操作,涵盖项目创建、依赖引入、数据库配置、模型定义及 CRUD 操作,并通过示例代码展示实现过程。通过这些步骤,你将学会如何利用 Ebean 的丰富功能,如事务管理、查询构建等,提升 Web 应用的数据库交互能力。
76 0
|
数据库
Basedao工具类:数据库操作利器,让你事半功倍!挥别繁琐,轻松驾驭数据世界!
Basedao工具类:数据库操作利器,让你事半功倍!挥别繁琐,轻松驾驭数据世界!
78 0
|
JSON JavaScript 前端开发
程序员接活利器,dataTable组件带你快速开发,摆脱CRUD
程序员接活利器,dataTable组件带你快速开发,摆脱CRUD
285 0
程序员接活利器,dataTable组件带你快速开发,摆脱CRUD
|
程序员
祖传shi山代码重构实战(01)-Extract Class提炼类
某个类做了应该由两个类做的事。 建立一个新类,将相关的字段和函数从旧类移到新类。
150 0
|
设计模式 存储 数据库
【机房重构】——Sqlhelper
【机房重构】——Sqlhelper
108 0
FluentMybatis 项目工程化、常规操作(增删改查)(一) | FluentMybatis实践(2)
FluentMybatis 项目工程化、常规操作(增删改查)(一) | FluentMybatis实践
FluentMybatis 项目工程化、常规操作(增删改查)(一) | FluentMybatis实践(2)
|
数据库
FluentMybatis 项目工程化、常规操作(增删改查)(二) | FluentMybatis实践(2)
FluentMybatis 项目工程化、常规操作(增删改查)(二) | FluentMybatis实践
FluentMybatis 项目工程化、常规操作(增删改查)(二) | FluentMybatis实践(2)
FluentMybatis 项目工程化、常规操作(增删改查)(二) | FluentMybatis实践
FluentMybatis 项目工程化、常规操作(增删改查)(二) | FluentMybatis实践
FluentMybatis 项目工程化、常规操作(增删改查)(二) | FluentMybatis实践