多语言展示
当前在线:218今日阅读:26今日分享:39

MVC案例代码详解--基本配置(1)

MVC案例代码详解--基本配置(1)这里的案例是个基本MVC模式,包含了基本的数据库连接池,编写了基本的DAO,JdbcUtils操作类,具体的操作Customer的接口和实现类。后续的Servlet,请关注后续的经验分享
第一步:创建数据库
1

1.新建数据库表如下

第二步:搭建web工程
1

1.新建动态web工程

2

2.输入工程名和选择Tomcat服务器

3

3.完成后的工程目录基本工程搭建完毕

第三步:使用c3p0数据库连接池
1

1.拷入使用的jar包,这里显示的是所有用到的jar包

2

2.新建c3p0-config.xml配置文件

3

3.配置如下,可以修改的有, 用户名,密码,数据库名称,其他默认即可

4

4.编写JdbcUtils.java(重点,以后其他工程可以复用的代码),代码如下

5

5.新建JdbcTest单元测试类,测试C3P0数据库连接池是否配置正常

6

6.至此,CP03数据库连接池配置完毕(重点,以后其他工程使用到C3P0连接池的话也可以这样配置)

第四步:编写数据库对应的model

新建Customer.java 其属性对应数据库的字段

第五步:编写基本DAO操作类
1

1.说明这里的DAO没有用到事务,所以比较简单新建类DAO.java 新建接口 CustomersDAO.java

2

2.DAO.java 封装了基本的增删改查操作方法,以供子类继承使用当前DAO直接在方法中获取数据库连接(没有事务)整个DAO采用DBUtils解决方案这个只是一基本的工具类,具体的操作数据库由它的子类来实现例如如果要操作Customer数据库表,则需要新建一个CustomersDAOJdbcImpl.java 来继承这个父类。(重点理解,代码亦可以复用于其他没有事务的操作中,这里贴出源码,方便拷贝)

3

3.DAO.java源码如下:package com.sjzjava.mvcapp.dao;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.sql.Connection;import java.util.List;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;import com.sjzjava.mvcapp.db.JdbcUtils;/** * 封装了基本的增删改查操作方法,以供子类继承使用 * 当前DAO直接在方法中获取数据库连接(没有事务) * 整个DAO采用DBUtils解决方案 * @author sjzjava * * @param :当前DAO 处理的实体类的类型是什么 */public class Dao {        //DBUtils 中的方法    private QueryRunner queryRunner = new QueryRunner();    private Class clazz;        public Dao(){        Type superClass = getClass().getGenericSuperclass();        if(superClass instanceof ParameterizedType){            ParameterizedType parameterizedType = (ParameterizedType)superClass;            Type[] typeArgs = parameterizedType.getActualTypeArguments();            if(typeArgs!=null&& typeArgs.length>0){                if(typeArgs[0] instanceof Class){                    clazz = (Class)typeArgs[0];                }            }        }    }    /**     * 该方法封装了 insert update delete 操作     * @param sql:SQL语句     * @param args:填充SQL语句的参数(占位符)     */    public void update(String sql,Object ... args){        Connection conn = null;        try {            conn = JdbcUtils.getConnection();            queryRunner.update(conn, sql, args);        } catch (Exception e) {            e.printStackTrace();        }finally{            JdbcUtils.releaseConnection(conn);        }    }        /**     * 返回对应的T的一个实体类的对象     * @param clazz     * @param sql     * @param args     * @return     */        public  T get(String sql,Object ... args){            Connection conn = null;            try {                conn = JdbcUtils.getConnection();                return (T) queryRunner.query(conn, sql, new BeanHandler(clazz), args);            } catch (Exception e) {                e.printStackTrace();            }finally{                JdbcUtils.releaseConnection(conn);            }            return null;        }    /**     * 返回T所对应的List     * @param sql     * @param args     * @return     */        public List getForList(String sql,Object ... args){            Connection conn = null;            try {                conn = JdbcUtils.getConnection();                return queryRunner.query(conn, sql, new BeanListHandler(clazz), args);            } catch (Exception e) {                e.printStackTrace();            }finally{                JdbcUtils.releaseConnection(conn);            }            return null;        }    /**     * 返回某一个字段的值     * @param sql     * @param args     * @return     */    public E getForValue(String sql,Object ... args){        Connection conn = null;        try {            conn = JdbcUtils.getConnection();            return (E) queryRunner.query(conn, sql, new ScalarHandler(), args);        } catch (Exception e) {            e.printStackTrace();        }finally{            JdbcUtils.releaseConnection(conn);        }        return null;    }}

4

4.CustomersDAO是一个接口,仅给出了操作Customer表的基本方法

5

5.新建CustomersDAOJdbcImpl.java 继承DAO.java 可以使用DAO的所有方法实现CustomersDAO,具体给出操作Customer的实现方法

6

6.CustomersDAOJdbcImpl.java源码如下:package com.sjzjava.mvcapp.dao.impl;import java.util.List;import com.sjzjava.mvcapp.dao.CustomersDAO;import com.sjzjava.mvcapp.dao.Dao;import com.sjzjava.mvcapp.domain.Customer;public class CustomersDAOJdbcImpl extends Dao implements CustomersDAO {    @Override    public List getAll() {        String sql = 'SELECT id,name,address,phone FROM customers';        return getForList(sql);    }    @Override    public void save(Customer customer) {        String sql = 'INSERT INTO customers(name,address,phone) VALUES(?,?,?)';        update(sql, customer.getName(),customer.getAddress(),customer.getPhone());        }    @Override    public Customer get(Integer id) {        String sql = 'SELECT id,name,address,phone FROM customers WHERE id = ?';        return get(sql, id);    }    @Override    public void delete(Integer id) {        String sql = 'DELETE FROM customers WHERE id = ?';        update(sql, id);            }    @Override    public long getCountWidthName(String name) {        String sql = 'SELECT COUNT(id) FROM customers WHERE name = ?';        return getForValue(sql, name);    }}

7

7.新建CustomersDAOJdbcImplTest 单元测试类

8

测试方法如下:

总结:

1.C3P0数据库连接池可以复用2.DAO.java可以复用于没有事务的情况下(着重理解DBUtils的使用,反射理解即可)3.理解CustomersDAOJdbcImpl 的继承和实现。

推荐信息