当前位置: 首页 > news >正文

网站建设或网站优化排名门户网站手机版

网站建设或网站优化排名,门户网站手机版,建设企业网站成本多少钱,wordpress怎么写描述七#xff1a;DAO及相关实现类 1. DAO介绍 DAO#xff1a;全称Data Access Object,是数据访问对象.在java服务器开发的三层架构中分成控制层(Controller),表示层(Service),数据访问层(Dao),数据访问层专门负责跟数据库进行数据交互.#xff0c;包括了对数据的CRUD#xff…七DAO及相关实现类 1. DAO介绍 DAO全称Data Access Object,是数据访问对象.在java服务器开发的三层架构中分成控制层(Controller),表示层(Service),数据访问层(Dao),数据访问层专门负责跟数据库进行数据交互.包括了对数据的CRUDCreate、Retrival、Update、Delete而不包含任何业务相关的信息。有时也称作BaseDAO DAO设计的总体规划需要设计的表和相应的实现类之间一一对应。 DAO层的设计首先是设计DAO的接口然后在定义此接口的实现类然后就可在模块中调用此接口来进行数据业务的处理而不用关心此接口的具体实现类是哪个类显得结构非常清晰DAO层的数据源配置以及有关数据库连接的参数都在配置文件中进行配置。 作用为了实现功能的模块化更有利于代码的维护和升级。在实际生产中也是使用DAO的样式进行编写。 2. BaseDAO 把用到的通用操作写在此类中用作父类供子类调用 例把之前编写的增删查改的具体方法代码放入其中还可以添加一些其他方法 import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List;import com.jdbc1.util.JDBC_Utils;/**** * author Cat God 007 封装了数据表的基本通用操作**/ public abstract class BaseDAO {// 通用的增删改操作---version2.0public int update(Connection conn, String sql, Object... args) {PreparedStatement ps null;try {ps conn.prepareStatement(sql);for (int i 0; i args.length; i) {ps.setObject(i 1, args[i]);// 小心参数声明错误从1开始}return ps.executeUpdate();} catch (Exception e) {e.printStackTrace();} finally {JDBC_Utils.closeResource(null, ps);}return 0;}// 通用的查询操作返回一条数据----version2.0(考虑上数据库事务)public T T getInstance(Connection conn, ClassT clazz, String sql, Object... args) {PreparedStatement ps null;ResultSet rs null;try {ps conn.prepareStatement(sql);for (int i 0; i args.length; i) {ps.setObject(i 1, args[i]);}rs ps.executeQuery();// 获取结果集的元数据ResultSetMetaData rsmd rs.getMetaData();// 通过ResultSetMetaData获取结果集中的列数int columnCount rsmd.getColumnCount();if (rs.next()) {T t clazz.newInstance();for (int i 0; i columnCount; i) {// 获取列值结果集Object columnvalue rs.getObject(i 1);// 获取每个列的列名结果集元数据 // String columnName rsmd.getColumnName(i 1);// 获取每个列的别名无别名就获取表的列名结果集元数据String columnLabel rsmd.getColumnLabel(i 1);// 给cust指定columnName属性赋值为columnvalue通过反射Field field clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columnvalue);}return t;}} catch (Exception e) {e.printStackTrace();} finally {JDBC_Utils.closeResource(null, ps, rs);}return null;}// 通用的查询操作返回多条数据----version2.0(考虑上数据库事务)public T ListT getForList(Connection conn, ClassT clazz, String sql, Object... args) {PreparedStatement ps null;ResultSet rs null;try {ps conn.prepareStatement(sql);for (int i 0; i args.length; i) {ps.setObject(i 1, args[i]);}rs ps.executeQuery();// 获取结果集的元数据ResultSetMetaData rsmd rs.getMetaData();// 通过ResultSetMetaData获取结果集中的列数int columnCount rsmd.getColumnCount();// 创建集合对象ArrayListT list new ArrayListT();while (rs.next()) {T t clazz.newInstance();// 给t对象指定的属性赋值for (int i 0; i columnCount; i) {// 获取列值结果集Object columnvalue rs.getObject(i 1);// 获取每个列的列名结果集元数据 // String columnName rsmd.getColumnName(i 1);// 获取每个列的别名无别名就获取表的列名结果集元数据String columnLabel rsmd.getColumnLabel(i 1);// 给cust指定columnName属性赋值为columnvalue通过反射Field field clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columnvalue);}list.add(t);}return list;} catch (Exception e) {e.printStackTrace();} finally {JDBC_Utils.closeResource(null, ps, rs);}return null;}//新增用于查询特殊值的通用方法,如查询表中的总人数等public E E getValue(Connection conn,String sql,Object ...args){PreparedStatement ps null;ResultSet rs null;try {ps conn.prepareStatement(sql);for(int i 0;i args.length;i) {ps.setObject(i 1, args[i]);}rs ps.executeQuery();if(rs.next()) {return (E) rs.getObject(1);}} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(null, ps, rs);} return null;}}3.XxxDAO 定义针对某一表或数据库的功能接口 例 在此之前需要创建Customer类有的话就直接调用就行不需要再创建 package com.jdbc2.bean;import java.sql.Date;/*** * author Cat God 007* ORM编程思想object relational mapping对象关系映射* 一个数据表对应一个Java类* 表中的一条记录对应Java类的一个对象* 表中的一个字段对应Java类的一个属性*/ public class Customer {private int id; private String name;private String email;private Date birth;public Customer() {super();}public Customer(int id, String name, String email, Date birth) {super();this.id id;this.name name;this.email email;this.birth birth;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getEmail() {return email;}public void setEmail(String email) {this.email email;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth birth;}Overridepublic String toString() {return Customer [id id , name name , email email , birth birth ];}}定义针对Customer表的功能接口 import java.sql.Connection; import java.sql.Date; import java.util.List;import com.jdbc2.bean.Customer;//此接口用于规范针对customers表的常用操作 public interface CustomerDAO {/*** 将cust对象添加到数据库中*/void insert(Connection conn,Customer cust);/***针对指定的id,删除表中的一条记录*/void deleteById(Connection conn,int id);/** 针对内存中的cust对象去修改数据表中指定的记录*/void update(Connection conn,Customer cust);/** 针对指定的id查询对应的Customer对象(一条记录)*/Customer getCustomerById(Connection conn,int id);/** 查询表中的所有记录构成的集合*/ListCustomer getAll(Connection conn);/** 返回数据表中的数据条目数*/Long getCount(Connection conn);/** 返回数据表中最大的生日即最小的人的生日*/Date getMaxBirth(Connection conn);}4.XxxDAOImpl 继承BaseDAO实现XxxDAO接口 例 CustomerDAOImpl继承BaseDAO实现CustomerDAO接口 import java.sql.Connection; import java.sql.Date; import java.util.List;import com.jdbc2.bean.Customer;public class CustomerDAOImpl extends BaseDAO implements CustomerDAO{Overridepublic void insert(Connection conn, Customer cust) {String sql insert into customers(name,email,birth)values(?,?,?);update(conn,sql,cust.getName(),cust.getEmail(),cust.getBirth());}Overridepublic void deleteById(Connection conn, int id) {String sql delete from customers where id ?;update(conn,sql,id);}Overridepublic void update(Connection conn, Customer cust) {String sql update customers set name ?,email ?,birth ? where id ?;update(conn,sql,cust.getName(),cust.getEmail(),cust.getBirth(),cust.getId());}Overridepublic Customer getCustomerById(Connection conn, int id) {String sql select id ,name,email,birth from customers where id ?;Customer customer getInstance(conn,Customer.class,sql,id);return customer;}Overridepublic ListCustomer getAll(Connection conn) {String sql select id,name,email,birth from customers;ListCustomer list getForList(conn,Customer.class,sql);return list;}Overridepublic Long getCount(Connection conn) {String sql select count(*) from customers;return getValue(conn,sql);}Overridepublic Date getMaxBirth(Connection conn) {String sql select max(birth) from customers;return getValue(conn,sql);}}5. XxxDAOImplTest测试 对具体的XxxDAOImpl实现类i进行测试 例 import static org.junit.Assert.*;import java.sql.Connection; import java.sql.Date; import java.util.List;import org.junit.Test;import com.jdbc1.util.JDBC_Utils; import com.jdbc2.bean.Customer; import com.jdbc4.dao.CustomerDAOImpl;public class CustomerDAOImplTest {private CustomerDAOImpl dao new CustomerDAOImpl();Testpublic void testInsert() {Connection conn null;try {conn JDBC_Utils.getConnection();Customer cust new Customer(1,猫神,catgod007186.com,new Date(6323453234L));dao.insert(conn, cust);System.out.println(插入成功);} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}}Testpublic void testDeleteById() {Connection conn null;try {conn JDBC_Utils.getConnection();dao.deleteById(conn, 16);System.out.println(删除成功);} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}}Testpublic void testUpdateConnectionCustomer() {Connection conn null;try {conn JDBC_Utils.getConnection();Customer cust new Customer(18,马云,mayun123.com,new Date(567865437L));dao.update(conn, cust); System.out.println(修改成功);} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}}Testpublic void testGetCustomerById() {Connection conn null;try {conn JDBC_Utils.getConnection(); Customer customer dao.getCustomerById(conn,10);System.out.println(customer);} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}}Testpublic void testGetAll() {Connection conn null;try {conn JDBC_Utils.getConnection();ListCustomer list dao.getAll(conn);list.forEach(System.out::println);//注意遍历对象的方法} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}}Testpublic void testGetCount() {Connection conn null;try {conn JDBC_Utils.getConnection();Long count dao.getCount(conn);System.out.println(表中的数据共有 count 条);} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}}Testpublic void testGetMaxBirth() {Connection conn null;try {conn JDBC_Utils.getConnection();Date maxBirth dao.getMaxBirth(conn);System.out.println(数据表中最年轻的人的生日是 maxBirth);} catch (Exception e) {e.printStackTrace();}finally {JDBC_Utils.closeResource(conn, null);}} }6. 创建测试文件测试多个方法可略过 在要创建的包下右键点击想要测试的java类点击new-------Other搜索 Junit test case如果不行就需要导入Junit 包 到处DAO就结束了如果需要编写针对Order表的DAO层就需要编写OrderDAO,OrderDAOImpl即可 其中可能会出现不少的小问题请多多包含 感谢大家的支持关注评论点赞 参考资料尚硅谷_宋红康_JDBC核心技术 DAO层Service层Controller层、View层
http://www.sczhlp.com/news/153985/

相关文章:

  • 学校网站建设协议模板宝塔linux wordpress
  • 有网站源码 怎么做网站男人女人做性关系网站
  • 现在最流行的网站推广方式有哪些wordpress 网站加载过慢
  • 网站建设费会计账务处理网络广告营销特性
  • 半月报网站建设商务代表工作总结做网站需要字体授权
  • 专业网站建设网页推广管理咨询合同
  • 完整教程:Word和WPS文字中的自动编号和文字间距过大怎么办?
  • 有效的小企业网站建设网址安全中心检测
  • 怎样做代刷网站做兼职网上哪个网站
  • wordpress如何添加广告代码外链吧发布seo
  • 网站建设图标wordpress阅读全文插件
  • 集团网站模板韩国服务器ip地址
  • 建设一个网站哪家好没有备案的网站怎么挂广告
  • 自己做网站外包二手交易网站建设的功能定位
  • php网站建设的基本流程图丹东站
  • indesign做网站郑州营销网站建设
  • 网站页面怎么做识别二维码怎样建设营销型网站
  • 用ps做网站还是wd360上网安全导航
  • 微信营销微网站建设js跳转网站
  • 东莞微网站建设费用网站响应速度优化
  • 开平网站设计苏州建设有限公司
  • 个人网站模板网络营销是什么职业
  • 深圳网站建设公司模板成都网站建设方案推广
  • c2c网站建设实例大连建站方案
  • 湖南建设厅网站二建注销新闻头条新闻
  • 江苏省建设注册中心网站红酒网站定位
  • 济南网站建设招聘用前端做的比较酷的网站
  • wordpress可以做网站吗公司做网站的申请
  • 工信部网站怎么查网址网站建设html代码
  • 江门网站建设咨询wordpress 商品模板