【DRP】-Dao层常用功能代码:增删改查

本系列博客内容为:做DRP系统中Dao层常用功能。

该项目采用MVC架构

  1. C(Controller)控制器,主要职责;1、取得表单参数;2、调用业务逻辑;3、转向页面
  2. M(Model)模型,主要职责:1、业务逻辑;2、保存数据的状态
  3. V(View)视图,主要职责:显示

本文主要是针对于Dao层的常见使用方法:增删改查sql语句及常用操作。

  1 package com.bjpowernode.drp.basedata.dao;
  2
  3 import java.sql.Connection;
  4 import java.sql.PreparedStatement;
  5 import java.sql.ResultSet;
  6 import java.sql.SQLException;
  7 import java.util.ArrayList;
  8 import java.util.List;
  9
 10 import com.bjpowernode.drp.basedata.domain.Item;
 11 import com.bjpowernode.drp.util.ApplicationException;
 12 import com.bjpowernode.drp.util.DbUtil;
 13 import com.bjpowernode.drp.util.PageModel;
 14 import com.bjpowernode.drp.util.datadict.domain.ItemCategory;
 15 import com.bjpowernode.drp.util.datadict.domain.ItemUnit;
 16
 17 public class ItemDao4OracleImpl implements ItemDao {
 18     //增加物料信息
 19     public void addItem(Connection conn, Item item) {
 20         String sql = "insert into t_items (item_no, item_name, spec, pattern, item_category_id, item_unit_id) ";
 21             sql+=" values (?, ?, ?, ?, ?, ?)";
 22         PreparedStatement pstmt = null;
 23         try {
 24             //Dao的设计粒度一般是细粒度的,如果没有特殊需求,Dao和Manager粒度可以一样,不同考虑太多
 25             //Dao的设计是比较单纯的,不应该放入过多的业务逻辑(业务规则)
 26             //如果放置了业务逻辑,有些Manager不采用此业务逻辑,这样这个Dao方法就没有复用率了
 27             //对于我们的应用来说Dao最底层的,所以应该越通用越好
 28 //            if (findItemById(conn, item.getItemNo()) != null) {
 29 //                throw new ApplicationException("物料代码已经存在,代码=" + item.getItemNo()  + "");
 30 //            }
 31             pstmt = conn.prepareStatement(sql);
 32             pstmt.setString(1, item.getItemNo());
 33             pstmt.setString(2, item.getItemName());
 34             pstmt.setString(3, item.getSpec());
 35             pstmt.setString(4, item.getPattern());
 36             pstmt.setString(5, item.getItemCategory().getId());
 37             pstmt.setString(6, item.getItemUnit().getId());
 38             pstmt.executeUpdate();
 39         }catch(SQLException e) {
 40             e.printStackTrace();
 41             //System.out.println("errorCode=" + e.getErrorCode());
 42             //System.out.println("description=" + e.getMessage());
 43 //            if (e.getErrorCode() == 1) {
 44 //                throw new ApplicationException("物料代码已经存在,代码【" + item.getItemNo()  + "】");
 45 //            }
 46             throw new ApplicationException("添加物料失败!");
 47         }finally {
 48             DbUtil.close(pstmt);
 49         }
 50     }
 51     //删除物料信息数组
 52     public void delItem(Connection conn, String[] itemNos) {
 53         StringBuffer sbString = new StringBuffer();
 54         for (int i=0; i<itemNos.length; i++) {
 55             sbString.append("?");
 56             if (i < (itemNos.length - 1)) {
 57                 sbString.append(",");
 58             }
 59         }
 60         String sql = "delete from t_items where item_no in(" + sbString.toString()  + ")";
 61         PreparedStatement pstmt = null;
 62         try {
 63             pstmt = conn.prepareStatement(sql);
 64             for (int i=0; i<itemNos.length; i++) {
 65                 pstmt.setString(i+1, itemNos[i]);
 66             }
 67             pstmt.executeUpdate();
 68         }catch(SQLException e) {
 69             e.printStackTrace();
 70             throw new ApplicationException("删除物料失败!");
 71         }finally {
 72             DbUtil.close(pstmt);
 73         }
 74     }
 75     //通过Id查询物料信息
 76     public Item findItemById(Connection conn, String itemNo) {
 77         StringBuffer sbSql = new StringBuffer();
 78         //第一中方法
 79         sbSql.append("select a.item_no, a.item_name, a.spec, a.pattern, a.item_category_id, ")
 80              .append("b.name as item_category_name, a.item_unit_id, c.name as item_unit_name ")
 81              .append("from t_items a, t_data_dict b, t_data_dict c ")
 82              .append("where a.item_category_id=b.id and a.item_unit_id=c.id and a.item_no=?");
 83
 84 //        //第二中方法
 85 //        sbSql.append("select a.item_no, a.item_name, a.spec, a.pattern, a.category as category_id, ")
 86 //             .append("(select b.name from t_data_dict b where a.category=b.id) as category_name, ")
 87 //             .append("a.unit as unit_id, ")
 88 //             .append("(select c.name from t_data_dict c where a.unit=c.id) as unit_name ")
 89 //             .append("from t_items a where a.item_no=?");
 90
 91         //通常采用日志组件记录,如log4j, 级别:info,debug,error...
 92
 93         PreparedStatement pstmt = null;
 94         ResultSet rs = null;
 95         Item item = null;
 96         try {
 97             pstmt = conn.prepareStatement(sbSql.toString());
 98             pstmt.setString(1, itemNo);
 99             rs = pstmt.executeQuery();
100             if (rs.next()) {
101                 item = new Item();
102                 item.setItemNo(rs.getString("item_no"));
103                 item.setItemName(rs.getString("item_name"));
104                 item.setSpec(rs.getString("spec"));
105                 item.setPattern(rs.getString("pattern"));
106                 //构造ItemCategory
107                 ItemCategory ic = new ItemCategory();
108                 ic.setId(rs.getString("item_category_id"));
109                 ic.setName(rs.getString("item_category_name"));
110                 item.setItemCategory(ic);
111
112
113                 //构造ItemUnit
114                 ItemUnit iu = new ItemUnit();
115                 iu.setId(rs.getString("item_unit_id"));
116                 iu.setName(rs.getString("item_unit_name"));
117                 item.setItemUnit(iu);
118             }
119         }catch(SQLException e) {
120             e.printStackTrace();
121             //记录到日志文件 error
122             throw new ApplicationException("根据物料代码查询出错,物料代码[" + itemNo + "]");
123         }finally {
124             DbUtil.close(rs);
125             DbUtil.close(pstmt);
126         }
127         return item;
128     }
129     //根据pageNO、pageSize、condation显示很多物料信息列表
130     public PageModel findItemList(Connection conn, int pageNo, int pageSize, String condation) {
131         StringBuffer sbSql = new StringBuffer();
132
133         //第一中方法
134 //        sbSql.append("select a.item_no, a.item_name, a.spec, a.pattern, a.item_category_id, ")
135 //             .append("b.name as item_category_name, a.item_unit_id, c.name as item_unit_name ")
136 //             .append("from t_items a, t_data_dict b, t_data_dict c ")
137 //             .append("where a.item_category_id=b.id and a.item_unit_id=c.id and a.item_no=?");
138
139 //        //第二中方法
140 //        sbSql.append("select a.item_no, a.item_name, a.spec, a.pattern, a.category as category_id, ")
141 //             .append("(select b.name from t_data_dict b where a.category=b.id) as category_name, ")
142 //             .append("a.unit as unit_id, ")
143 //             .append("(select c.name from t_data_dict c where a.unit=c.id) as unit_name ")
144 //             .append("from t_items a where a.item_no=?");
145
146         sbSql.append("select * ")
147             .append("from (")
148                 .append("select i.*, rownum rn from (")
149                 .append("select a.item_no, a.item_name, a.spec, a.pattern, a.item_category_id, ")
150                 .append("b.name as item_category_name, a.item_unit_id, c.name as item_unit_name ")
151                 .append("from t_items a, t_data_dict b, t_data_dict c ")
152                 .append("where a.item_category_id=b.id and a.item_unit_id=c.id  ");
153                 if (condation != null && !"".equals(condation)) {
154                     sbSql.append(" and (a.item_no like ‘" + condation + "%‘ or a.item_name like ‘" + condation + "%‘) ");
155                 }
156                 sbSql.append(" order by a.item_no")
157                 .append(") i where rownum<=? ")
158                 .append(") ")
159                 .append("where rn >? ");
160         System.out.println("sql=" + sbSql.toString());
161
162         //通常采用日志组件记录,如log4j, 级别:info,debug,error...
163         PreparedStatement pstmt = null;
164         ResultSet rs = null;
165         PageModel pageModel = null;
166         try {
167             pstmt = conn.prepareStatement(sbSql.toString());
168             pstmt.setInt(1, pageNo * pageSize);
169             pstmt.setInt(2, (pageNo - 1) * pageSize);
170             rs = pstmt.executeQuery();
171             List itemList = new ArrayList();
172             while (rs.next()) {
173                 Item item = new Item();
174                 item.setItemNo(rs.getString("item_no"));
175                 item.setItemName(rs.getString("item_name"));
176                 item.setSpec(rs.getString("spec"));
177                 item.setPattern(rs.getString("pattern"));
178                 //构造ItemCategory
179                 ItemCategory ic = new ItemCategory();
180                 ic.setId(rs.getString("item_category_id"));
181                 ic.setName(rs.getString("item_category_name"));
182                 item.setItemCategory(ic);
183
184                 //构造ItemUnit
185                 ItemUnit iu = new ItemUnit();
186                 iu.setId(rs.getString("item_unit_id"));
187                 iu.setName(rs.getString("item_unit_name"));
188                 item.setItemUnit(iu);
189
190                 itemList.add(item);
191             }
192             pageModel = new PageModel();
193             pageModel.setPageNo(pageNo);
194             pageModel.setPageSize(pageSize);
195             pageModel.setList(itemList);
196             //根据条件取得记录数
197             int totalRecords = getTotalRecords(conn, condation);
198             pageModel.setTotalRecords(totalRecords);
199         }catch(SQLException e) {
200             e.printStackTrace();
201             //记录到日志文件 error
202             throw new ApplicationException("分页查询失败");
203         }finally {
204             DbUtil.close(rs);
205             DbUtil.close(pstmt);
206         }
207         return pageModel;
208     }
209
210     /**
211      * 根据条件取得记录数
212      * @param conn
213      * @param queryStr
214      * @return
215      */
216     private int getTotalRecords(Connection conn, String condation)
217     throws SQLException {
218         String sql = "select count(*) from t_items ";
219         if (condation != null && !"".equals(condation)) {
220             sql+="where item_no like ‘" + condation + "%‘ or item_name like ‘" + condation + "%‘ ";
221         }
222         PreparedStatement pstmt = null;
223         ResultSet rs = null;
224         int temp = 0;
225         try {
226             pstmt = conn.prepareStatement(sql);
227             rs = pstmt.executeQuery();
228             rs.next();
229             temp = rs.getInt(1);
230         }finally {
231             DbUtil.close(rs);
232             DbUtil.close(pstmt);
233         }
234         return temp;
235     }
236     //修改物料信息
237     public void modifyItem(Connection conn, Item item) {
238         String sql = "update t_items set item_name=?, spec=?, pattern=?, item_category_id=?, item_unit_id=? ";
239         sql+=" where item_no=?";
240         PreparedStatement pstmt = null;
241         try {
242             pstmt = conn.prepareStatement(sql);
243             pstmt.setString(1, item.getItemName());
244             pstmt.setString(2, item.getSpec());
245             pstmt.setString(3, item.getPattern());
246             pstmt.setString(4, item.getItemCategory().getId());
247             pstmt.setString(5, item.getItemUnit().getId());
248             pstmt.setString(6, item.getItemNo());
249             pstmt.executeUpdate();
250         }catch(SQLException e) {
251             e.printStackTrace();
252             throw new ApplicationException("修改物料失败!");
253         }finally {
254             DbUtil.close(pstmt);
255         }
256     }
257
258
259 }

【DRP】-Dao层常用功能代码:增删改查,布布扣,bubuko.com

时间: 2024-11-06 17:25:39

【DRP】-Dao层常用功能代码:增删改查的相关文章

MYSQL的常用命令和增删改查语句和数据类型

连接命令:<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知识库" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a> -h[主机地址] -u[用户名] -p[用户密码] 创建<a href="http://lib.csdn.net/base/my

DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据访问者)模式和 Active Domain Object(领域对象)模式.Data Accessor 模式实现了数据访问和业务逻辑的分离:Active Domain Object 模式实现了业务数据的对象化封装. 需要注意的是,DAO设计模式是Java EE中的设计模式,而非Ja

JS源生代码“增删改查”之增

51呢最近在做一个管理数据的,第一次接触到用JS的源代码去实现一些功能,才知道网页里的许多功能都是依赖于“增删改查”完成的,下面的几张图片就是对于增的演示: 下面是有关HTML的代码:这个主要是弹窗部分的HTML代码 <div id="addDialog"> <div id="div11"> <form action="" id="from"> <table class="b

MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4059514.html 联系方式:[email protected] [正文] 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据

MYSQL的常用命令和增删改查语句

连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [库名] 当前选择的库状态:SELECT DATABASE(); 创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) [字段参数], ......); 显示数据表字段:describe 表名; 当前库数据表结构:show tables; 更改表格 ALTER TA

JavaWeb SQL常用语言(增删改查)

1.SQL常用插入语INSERT(增) 1.1插入字符类型数据  需要使用单引号'将字符串引起来,如果要插入的值中有单引号',则需要使用两个单引号''进行转义,如下图给student表中插入name值: 1.2插入日期型的数据  需要将日期按照年月日的形式组织好,然后使用单引号引起来.1.3给表中字段赋值  创建一个student表,并给id字段和name字段赋值:1.4一次插入多个值  给student表中一次增加两个值: 2.SQL常用查询语SELECT(查) 2.1查询项目表中的所有字段(

sqlite常用的命令-增删改查

一.查看版本信息: #sqlite3 -version 二.sqlite3常用命令 1.当前目录下建立或打开test.db数据库文件,并进入sqlite命令终端,以sqlite>前缀标识: 2.输出帮助信息: sqlite>.help 3.查看数据库文件信息命令(注意命令前带字符'.'): sqlite>.database 4.退出sqlite终端命令: sqlite>.quit 或 sqlite>.exit 列出当前显示格式的配置:sqlite>.show 6.显示数

dom4j解析(项目常用)的增删改查

1 <?xml version="1.0" encoding="UTF-8"?> 2 <书架> 3 <书> 4 <书名 name="vvvb">何茂赟自传</书名> 5 <作者>何茂赟</作者> 6 <售价>500.00</售价> 7 <售价>1234元</售价><售价>1234元</售价>&

sql常用命令之增删改查

1. 显示数据库 show databases; show databases; 2. 显示当前数据库 select current_database(); 3. 创建数据库 create database db_name; 4. 选择某个数据库 use db_name; 5. 显示当前数据库下的表 show tables; 6. 创建表 create table create table if not exists my_test( id INT UNSIGNED AUTO_INCREMENT