1.原理图
2.Model层的设计
2.1 数据库工具类JdbcUtils.java
主要作用:获取Connection,以及关闭Connection
代码骨架如下:
public class JdbcUtils { /** * 因为使用C3P0数据库连接池,不用关闭Statement与ResultSet,但是Connection需要关闭 * 关闭Connection * @param connection */ public static void releaseConnection( Connection connection ) { } /** * 获取数据源的一个Connection对象 * @return Connection * @throws SQLException */ public static Connection getConnection() throws SQLException { return null; } } 2.2数据访问对象DAO.java 主要作用,封装了利用JdbcUtils.java进行数据库的增删改查 骨架如下: package com.njupt.javaweb.dao; import java.util.List; /** * * 项目名称:javaWebMVCProject * 类名称:DAO * 类描述: 封装了基本的数据库增删改查(CRUD)的方法 * 当前DAO无事务处理,直接在方法内过去连接 */ public class DAO<T> { //因为用到反射需要T的class类 @SuppressWarnings("unused") private Class<T> clazz; private QueryRunner queryRunner = new QueryRunner(); /** * 获取数据库查询后的某一个字段的值,单行单列。例如获取Name字段的值,或者Count(*)记录的条数 * @param sql 用于执行的sql语句 * @param args 填充SQL语句的占位符 * @return 单行单列的值 */ public <E> E getForValue( String sql , Object ... args ) { return null; } /** * 获取由一组T的对象构成的List * @param sql 用于执行的sql语句 * @param args 填充SQL语句的占位符 * @return T的对象构成的List */ public List<T> getForList( String sql , Object ... args ){ return null; } /** * 获取T的实体类对象,该对象与数据库的记录相一致 * 因为用到反射需要T的class类 * @param sql 用于执行的sql语句 * @param args 填充SQL语句的占位符 * @return T的实体类对象 */ public T get( String sql , Object ... args ) { return null; } /** * 该方法封装了,INSERT,DELETE,UPDATE相关的数据库操作 * @param sql 用于执行的sql语句 * @param args 填充SQL语句的占位符 */ public void update( String sql , Object ... args ) { }
2.3数据库实体类Customer.java
public class Customer { //属性名与数据库字段一一对应 private int id; private String name; private String address; private String phone; //getter 与setter 方法 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 getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } //带参构造器 public Customer(int id, String name, String address, String phone) { super(); this.id = id; this.name = name; this.address = address; this.phone = phone; } //无参构造器 public Customer() {} //重写toString方法 @Override public String toString() { return "Customer [id=" + id + ", name=" + name + ", address=" + address + ", phone=" + phone + "]"; }
2.4业务接口CustomerDAO.java
主要作用:定义了实现业务功能相关的方法,用于给业务类实现该接口
public class CustomerDAOJdbcImp extends DAO<Customer> implements CustomerDAO{ @Override public List<Customer> getAll() { // TODO Auto-generated method stub return null; } @Override public void save(Customer customer) { // TODO Auto-generated method stub } @Override public Customer get(int id) { // TODO Auto-generated method stub return null; } @Override public void delete(int id) { // TODO Auto-generated method stub } @Override public long getCountSameWithName(String name) { // TODO Auto-generated method stub return 0; } } 2.5业务类CustomerDAOJdbcImp .java 继承DAO方法,实现业务接口的方法,以便提供给Servlet调用 package com.njupt.javaweb.bussimp; import java.util.List; import com.njupt.javaweb.business.Customer; import com.njupt.javaweb.dao.CustomerDAO; import com.njupt.javaweb.dao.DAO; public class CustomerDAOJdbcImp extends DAO<Customer> implements CustomerDAO{ @Override public List<Customer> getAll() { // TODO Auto-generated method stub return null; } @Override public void save(Customer customer) { // TODO Auto-generated method stub } @Override public Customer get(int id) { // TODO Auto-generated method stub return null; } @Override public void delete(int id) { // TODO Auto-generated method stub } @Override public long getCountSameWithName(String name) { // TODO Auto-generated method stub return 0; }