第80节:Java中的MVC设计模式

前言

了解java中的mvc模式.复习以及回顾!

事务,设置自动连接提交关闭.
setAutoCommit(false);
conn.commit();
conn.rollBack

隔离级别分别有:

读未提交有脏读
读已提交有不可重复读
可重复读有幻读
可串行化可以解决脏读,幻读,不可重复读

数据库连接池用于创建和管理连接对象.

DBCP和C3P0,分别了解代码设置和配置文件设置

DBUtils可以简化数据的增删改查.

QueryRunner runner = new QueryRunner();

runner.update();

runner.query();

DBUtils通用的增删改

public void testInsert(){
 // 查询
 Connection conn = null;
 Statement st = null;
 try{
  // 获取连接对象
 conn = JDBCUtil.getConn();
 // 根据连接对象,得到state ment
 st = conn.createStatement();
 // 执行添加
 String sql = "insert into t_stu values(null, 'dashu', 23)";
 // 影响行数
 int result = st.executeUpdate(sql);
 if(result > 0){
  System.out.println("添加成功");
 }else{
  System.out.println("添加失败");
 }
}catch(Exception e){
 e.printStackTrace();
}finally{
 JDBCUtil.release(conn, st);
}

通用的增删改方法

package com.dashucoding.commoncrud;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.junit.Test;

import com.dashucoding.util.JDBCUtil;
import com.dashucoding.util.JDBCUtil02;

public class CommonCRUDUtil {

    @Test
    public void testUpdate() {
//      update("insert into account values(null, ?, ?)" , "dashu", 10);

//      update("delete from account where id = ?", 1);

        update("update account set money = ? where id = ?", 1999, 2);
    }

    // 通用的增删改功能
    public void update(String sql, Object ...args) {
        Connection conn = null;
        PreparedStatement ps = null;

        try {
            conn = JDBCUtil02.getConn();
            ps = conn.prepareStatement(sql);
            for(int i = 0; i<args.length; i++) {
                ps.setObject(i+1, args[i]);
            }

            ps.executeUpdate();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            JDBCUtil.release(conn, ps);
        }
    }
}

数据库的元数据

java.sql
接口 DatabaseMetaData
所有超级接口: Wrapper

public interface DatabaseMetaData extends Wrapper
数据库的整体综合信息

方法

getCatalogs()
可以获取在数据库中使用的类别名称

getCatalogSeparator()
获取此数据库用作类别和表名之间的分隔符的String

getCatalogTerm()
获取数据库供应商用于"catalog"的首选手语

getClientInfoProperties()
获取驱动程序支持的客户端信息属性的列表

getConnection()
获取此元数据对象所产生的连接

getDatabaseMajorVersion()
获取底层数据库的主版本号

getDatabaseProductName()
获取此数据库产品的名称

getDatabaseProductVersion()
获取此数据库产品的版本号

getDefaultTransactionIsolation()
获取此数据库的默认事务隔离级别

getDriverMajorVersion()
获取此JDBC驱动程序的主版本号

getDriverMinorVersion()
获取此JDBC驱动程序的次版本号

getDriverName()
获取此JDBC驱动程序的名称

getDriverVersion()
获取此JDBC驱动程序的String形式的版本号

参数的元数据

java.sql
接口 ParameterMetaData
public interface ParameterMetaData extends Wrapper
获取PreparedStatement对象中每个参数标记和属性信息的对象.

方法的摘要

getParameterClassName(int param)
获取Java类的完全限定名称

getParameterCount()
获取PreparedStatement对象中的参数数量

getParameterMode(int param)
获取指定参数的SQL类型

getParameterTypeName(int param)
获取指定参数的特定于数据库的类型名称

getPrecision(int param)
获取指定参数的指定两列大小

getScale(int param)
获取指定参数的小数点右边的位数

isNullable(int param)
获取是否允许在指定参数中使用null值

isSigned(int param)
获取指定参数的值是否可以是带符号的数字

结果集元数据

java.sql
接口 ResultSetMetaData
public interface ResultSetMetaData extends Wrapper

用来描述数据的数据,叫做元数据

数据库元数据,参数元数据,结果集元数据

package com.dashucoding.commoncrud;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import org.junit.Test;

import com.dashucoding.util.JDBCUtil;
import com.dashucoding.util.JDBCUtil02;

public class CommonCRUDUtil {

    @Test
    public void testUpdate() {
//      update("insert into account values(null, ?, ?)" , "dashu", 10);

//      update("delete from account where id = ?", 1);

        update("update account set money = ? where id = ?", 1999, 2);
    }

    // 通用的增删改功能
    public void update(String sql, Object ...args) {
        Connection conn = null;
        PreparedStatement ps = null;

        try {
            conn = JDBCUtil02.getConn();
            ps = conn.prepareStatement(sql);
            // 元数据
            // 获取的有几个问好
            ParameterMetaData metaData = ps.getParameterMetaData();
            int count = metaData.getParameterCount();

            for(int i = 0; i<count; i++) {
                ps.setObject(i+1, args[i]);
            }

            ps.executeUpdate();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            JDBCUtil.release(conn, ps);
        }
    }
}

TestDBUtils.java

// 删除
queryRunner.update("delete from account where id = ?", 4);
// 更新
queryRunner.update("update account set money=? where id=?", 10000, 5);

// 执行查询,查询到的数据还是在那个result里面然后调用下面的handle方法,由用户手动封装
Account account = queryRunner.query("select * from account where id =?", new ResultSetHandler<Account>(){
@Override
 public Account handle(ResultSet rs) throws SQLException{
 Account account = new Account();
 while(rs.next()){
  String name = rs.getString("name");
  int money = rs.getInt("money");
  account.setName(name);
  account.setMoney(money);
 }
  return account;
 }
}, 6);

快速查询方法

@Test
public void testQuery(){
 query("select * from account where id = ?", 接口的实现类对象, 3);
}
    class A implements ResultSetHandler {

        @Override
        public void handle(ResultSet rs) {
            // TODO Auto-generated method stub

        }

    }

通用的查询方法

package com.dashucoding.commoncrud;

import java.sql.Connection;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.junit.Test;

import com.dashucoding.domain.Account;
import com.dashucoding.util.JDBCUtil;
import com.dashucoding.util.JDBCUtil02;

public class CommonCRUDUtil {
    class A implements ResultSetHandler<Account> {

        @Override
        public Account handle(ResultSet rs) {
            // TODO Auto-generated method stub
            try {
                Account account = new Account();
                if(rs.next()) {
                    String name = rs.getString("name");
                    int money = rs.getInt("money");

                    account.setName(name);
                    account.setMoney(money);

                }
                return account;
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

        /*@Override
        public Object handle(ResultSet rs) {
            // TODO Auto-generated method stub
            return null;
        }*/

        /*@Override
        public void handle(ResultSet rs) {
            // TODO Auto-generated method stub
            try {
                while(rs.next()) {
                    String name = rs.getString("name");
                    int money = rs.getInt("money");
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }*/

    }

    @Test
    public void testQuery() {
        /*query("select * from account where id=?", new ResultSetHandler() {

            @Override
            public void handle(ResultSet rs) {
                // TODO Auto-generated method stub

            }

        },3);*/

        /*Account account = query("select * from account where id = ?", new A(), 2);

        System.out.println(account.toString());*/

        query("select * from account where id = ?", new ResultSetHandler<Account>() {

            @Override
            public Account handle(ResultSet rs) {
                // TODO Auto-generated method stub

                return null;
            }}, 2);
    }

    @Test
    public void testUpdate() {
//      update("insert into account values(null, ?, ?)" , "dashu", 10);

//      update("delete from account where id = ?", 1);

//      update("update account set money = ? where id = ?", 1999, 2);

    }

    public <T> T query(String sql, ResultSetHandler<T> handler, Object... args) {
        Connection conn = null;
        PreparedStatement ps = null;

        try {
            conn = JDBCUtil02.getConn();
            ps = conn.prepareStatement(sql);
            // 元数据
            // 获取的有几个问好
            ParameterMetaData metaData = ps.getParameterMetaData();
            int count = metaData.getParameterCount();

            for (int i = 0; i < count; i++) {
                ps.setObject(i + 1, args[i]);
            }

            // 执行查询工作,然后得到结果集
            ResultSet rs = ps.executeQuery();
            // 把结果集丢给调用者, 让它去封装数据,返回封装数据
            T t = (T) handler.handle(rs);
            return t;

            /*while(rs.next()) {
                rs.getInt("id");
                rs.getString("name");

            }*/

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtil.release(conn, ps);
        }
        return null;
    }

    // 通用的增删改功能
    /*public void update(String sql, Object... args) {
        Connection conn = null;
        PreparedStatement ps = null;

        try {
            conn = JDBCUtil02.getConn();
            ps = conn.prepareStatement(sql);
            // 元数据
            // 获取的有几个问好
            ParameterMetaData metaData = ps.getParameterMetaData();
            int count = metaData.getParameterCount();

            for (int i = 0; i < count; i++) {
                ps.setObject(i + 1, args[i]);
            }

            ps.executeUpdate();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            JDBCUtil.release(conn, ps);
        }
    }*/
}
package com.dashucoding.domain;

public class Account {
    private String name;
    private int money;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    @Override
    public String toString() {
        return "Account [name=" + name + ", money=" + money + "]";
    }

}
package com.dashucoding.commoncrud;

import java.sql.ResultSet;

public interface ResultSetHandler<T> {
    // 数据封装的规则,规范
    T handle(ResultSet rs);
}

JSP开发模式

mvc的设计模式

javaBean数据的封装+jsp
可以在jsp中直接写java代码

<%
 封装数据
 执行业务
 准备数据
%>

特点维护比较难,jsp的页面代码会臃肿
servlet + javabean + jsp

mvc模式:

m:model
模型层
封装数据javabean

v:view
视图层
jsp专注显示

c:controller
控制层
servlet接收页面的请求,找模型层去处理

三层架构

客户端,web层,业务逻辑层,数据访问层

servlet/jsp web层
javabean 业务逻辑层
dao 数据访问层

web层 对应 controller view

业务逻辑层 对应 model

数据访问层 对应 model

mvc模式: controller view model

controller: 接收请求,调用模型层出来数据,反馈给view

view: 用于显示

model: 数据的封装,数据的处理

学生管理系统中的增删查改,分页,模糊查询

学生管理系统

欢迎使用学生管理系统, 按姓名查询, 按性别查询, 添加
有编号,姓名 ,性别,电话,生日,爱好,简介,操作.

创建数据库

dao环境搭建

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>

<h3><a href="StudentListServlet">显示所有学生列表</a></h3><br>

</body>
</html>
package com.dashucoding.dao;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.domain.Student;

/*
 * 这是针对学生表的数据访问
 *
 * */
public interface StudentDao {

    /*
     * 查询所有学生
     * list<Student>
     * */
    List<Student> findAll() throws SQLException;
}
package com.dashucoding.dao.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.dashucoding.dao.StudentDao;
import com.dashucoding.domain.Student;
import com.dashucoding.util.JDBCUtil02;

/*
 * 这是studentdao的实现,针对前面定义的规范,做出具体的实现
 * */
public class StudentDaoImpl implements StudentDao {
    /*
     * 查询所有学生
     * */
    @Override
    public List<Student> findAll() throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        String sql = "select * from stu";
        List<Student> list = runner.query(sql, new BeanListHandler<Student>(Student.class));
        return list;
    }

}
package com.dashucoding.domain;

import java.util.Date;

/*
 * 这是学生封装的对象bean
 * 根据表写
 * */
public class Student {
    private int sid;
    private String sname;
    private String gender;
    private String phone;
    private String hobby;
    private String info;
    private Date birthday;
    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

}
package com.dashucoding.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class StudentListServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
package com.dashucoding.util;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtil02 {

    static ComboPooledDataSource dataSource = null;

    static {
        dataSource = new ComboPooledDataSource();
    }

    public static DataSource getDataSource() {
        return dataSource;
    }
    /**
     * 获取连接对象
     * @return
     * @throws SQLException
     */
    public static Connection getConn() throws SQLException{

        return dataSource.getConnection();
    }

    /**
     * 释放资源
     * @param conn
     * @param st
     * @param rs
     */
    public static void release(Connection conn , Statement st , ResultSet rs){
        closeRs(rs);
        closeSt(st);
        closeConn(conn);
    }
    public static void release(Connection conn , Statement st){
        closeSt(st);
        closeConn(conn);
    }

    private static void closeRs(ResultSet rs){
        try {
            if(rs != null){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            rs = null;
        }
    }

    private static void closeSt(Statement st){
        try {
            if(st != null){
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            st = null;
        }
    }

    private static void closeConn(Connection conn){
        try {
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

service层

dao只做一件事,数据操作层
service是业务层

查询数据

package com.dashucoding.dao;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.domain.Student;

/*
 * 这是针对学生表的数据访问
 *
 * */
public interface StudentDao {

    /*
     * 查询所有学生
     * list<Student>
     * */
    List<Student> findAll() throws SQLException;
}
package com.dashucoding.dao.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.dashucoding.dao.StudentDao;
import com.dashucoding.domain.Student;
import com.dashucoding.util.JDBCUtil02;

/*
 *这是StudentDao的实现,针对前面定义的规范,做出具体的实现
 * */
public class StudentDaoImpl implements StudentDao {
    /*
     * 查询所有学生
     * */
    @Override
    public List<Student> findAll() throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        return runner.query("select * from stu", new BeanListHandler<Student>(Student.class));
    }

}
package com.dashucoding.domain;

import java.util.Date;

/*
 * 这是学生封装的对象bean
 *
 * */
public class Student {

    private int sid;
    private String sname;
    private String gender;
    private String phone;
    private String hobby;
    private String info;
    private Date birthday;

    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(int sid, String sname, String gender, String phone, String hobby, String info, Date birthday) {
        super();
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.phone = phone;
        this.hobby = hobby;
        this.info = info;
        this.birthday = birthday;
    }

    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", phone=" + phone + ", hobby="
                + hobby + ", info=" + info + ", birthday=" + birthday + "]";
    }

}
package com.dashucoding.service;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.domain.Student;

/*
 * 这是学生的业务处理规范
 * */
public interface StudentService {

    /*
     * 查询所有学生
     * list<Student>
     * */
    List<Student> findAll() throws SQLException;
}
package com.dashucoding.service.impl;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.dao.StudentDao;
import com.dashucoding.dao.impl.StudentDaoImpl;
import com.dashucoding.domain.Student;
import com.dashucoding.service.StudentService;
/*
 * 这是学生业务实现
 * */
public class StudentServiceImpl implements StudentService{

    @Override
    public List<Student> findAll() throws SQLException {
        StudentDao dao = new StudentDaoImpl();
        return dao.findAll();
    }

}
package com.dashucoding.servlet;

import java.io.IOException;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dashucoding.dao.StudentDao;
import com.dashucoding.dao.impl.StudentDaoImpl;
import com.dashucoding.domain.Student;
import com.dashucoding.service.StudentService;
import com.dashucoding.service.impl.StudentServiceImpl;

public class StudentListServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            // 查询所有的学生
            StudentService service = new StudentServiceImpl();
            List<Student> list = service.findAll();
            // 把数据存储到作用域中
            request.setAttribute("list", list);

            // 跳转页面
            request.getRequestDispatcher("list.jsp").forward(request,response);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}
package com.dashucoding.util;

import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JDBCUtil02 {

    static ComboPooledDataSource dataSource = null;

    static {
        dataSource = new ComboPooledDataSource();
    }

    public static DataSource getDataSource() {
        return dataSource;
    }
    /**
     * 获取连接对象
     * @return
     * @throws SQLException
     */
    public static Connection getConn() throws SQLException{

        return dataSource.getConnection();
    }

    /**
     * 释放资源
     * @param conn
     * @param st
     * @param rs
     */
    public static void release(Connection conn , Statement st , ResultSet rs){
        closeRs(rs);
        closeSt(st);
        closeConn(conn);
    }
    public static void release(Connection conn , Statement st){
        closeSt(st);
        closeConn(conn);
    }

    private static void closeRs(ResultSet rs){
        try {
            if(rs != null){
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            rs = null;
        }
    }

    private static void closeSt(Statement st){
        try {
            if(st != null){
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            st = null;
        }
    }

    private static void closeConn(Connection conn){
        try {
            if(conn != null){
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            conn = null;
        }
    }
}

小结业务逻辑

先写一个jsp页面,有个链接<a href="StudentListServlet"></a>写个Servlet,接收请求,去调用Service,由service去调用dao,写dao,然后做dao实现,再写Service,做Service的实现,在servlet存储数据,做出页面响应,在list.jsp上显示数据.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加学生页面</title>
</head>
<body>
    <form method="post" action="AddServlet">
        <table border="1" width="600">
            <tr>
                <td>姓名</td>
                <td><input type="text" name="sname"></td>
            </tr>
            <tr>
                <td>性别</td>
                <td><input type="radio" name="gender" value="男">男 <input
                    type="radio" name="gender" value="女">女</td>
            </tr>
            <tr>
                <td>电话</td>
                <td><input type="text" name="phone"></td>
            </tr>
            <tr>
                <td>生日</td>
                <td><input type="text" name="birthday"></td>
            </tr>
            <tr>
                <td>爱好</td>
                <td><input type="checkbox" name="hobby" value="游泳">游泳 <input
                    type="checkbox" name="hobby" value="篮球">篮球 <input
                    type="checkbox" name="hobby" value="足球">足球 <input
                    type="checkbox" name="hobby" value="看书">看书 <input
                    type="checkbox" name="hobby" value="写字">写字</td>
            </tr>
            <tr>
                <td>简介</td>
                <td><textarea name="info" rows="3" cols="20"></textarea></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="添加"></td>
            </tr>
        </table>
    </form>
</body>
</html>
package com.dashucoding.dao;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.domain.Student;

/*
 * 这是针对学生表的数据访问
 *
 * */
public interface StudentDao {

    /*
     * 查询所有学生
     * list<Student>
     * */
    List<Student> findAll() throws SQLException;

    void insert(Student student) throws SQLException ;
}
package com.dashucoding.dao.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.dashucoding.dao.StudentDao;
import com.dashucoding.domain.Student;
import com.dashucoding.util.JDBCUtil02;

/*
 *这是StudentDao的实现,针对前面定义的规范,做出具体的实现
 * */
public class StudentDaoImpl implements StudentDao {
    /*
     * 查询所有学生
     */
    @Override
    public List<Student> findAll() throws SQLException {
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        return runner.query("select * from stu", new BeanListHandler<Student>(Student.class));
    }

    @Override
    public void insert(Student student) throws SQLException {
        // TODO Auto-generated method stub
        QueryRunner runner = new QueryRunner(JDBCUtil02.getDataSource());
        runner.update("insert into stu values(null, ?,?,?,?,?,?)",
                student.getSname(),
                student.getGender(),
                student.getPhone(),
                student.getBirthday(),
                student.getHobby(),
                student.getInfo()
                );
    }

}
package com.dashucoding.domain;

import java.util.Date;

/*
 * 这是学生封装的对象bean
 *
 * */
public class Student {

    private int sid;
    private String sname;
    private String gender;
    private String phone;
    private String hobby;
    private String info;
    private Date birthday;

    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Student(int sid, String sname, String gender, String phone, String hobby, String info, Date birthday) {
        super();
        this.sid = sid;
        this.sname = sname;
        this.gender = gender;
        this.phone = phone;
        this.hobby = hobby;
        this.info = info;
        this.birthday = birthday;
    }

    public Student(String sname, String gender, String phone, String hobby, String info, Date birthday) {
        super();
        this.sname = sname;
        this.gender = gender;
        this.phone = phone;
        this.hobby = hobby;
        this.info = info;
        this.birthday = birthday;
    }

    public int getSid() {
        return sid;
    }
    public void setSid(int sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getHobby() {
        return hobby;
    }
    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student [sid=" + sid + ", sname=" + sname + ", gender=" + gender + ", phone=" + phone + ", hobby="
                + hobby + ", info=" + info + ", birthday=" + birthday + "]";
    }

}
package com.dashucoding.service;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.domain.Student;

/*
 * 这是学生的业务处理规范
 * */
public interface StudentService {

    /*
     * 查询所有学生
     * list<Student>
     * */
    List<Student> findAll() throws SQLException;

    void insert(Student student) throws SQLException ;
}
package com.dashucoding.service.impl;

import java.sql.SQLException;
import java.util.List;

import com.dashucoding.dao.StudentDao;
import com.dashucoding.dao.impl.StudentDaoImpl;
import com.dashucoding.domain.Student;
import com.dashucoding.service.StudentService;
/*
 * 这是学生业务实现
 * */
public class StudentServiceImpl implements StudentService{

    @Override
    public List<Student> findAll() throws SQLException {
        StudentDao dao = new StudentDaoImpl();
        return dao.findAll();
    }

    @Override
    public void insert(Student student) throws SQLException {
        // TODO Auto-generated method stub
        StudentDao dao = new StudentDaoImpl();
        dao.insert(student);
    }

}

package com.dashucoding.servlet;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dashucoding.domain.Student;
import com.dashucoding.service.StudentService;
import com.dashucoding.service.impl.StudentServiceImpl;

/**
 * 用于处理学生的添加请求
 */
public class AddServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");

        try {

            // 1. 获取客户端提交上来的数据
            String sname = request.getParameter("sname");
            String gender = request.getParameter("gender");
            String phone = request.getParameter("phone");
            String birthday = request.getParameter("birthday");
            String info = request.getParameter("info");
            // String hobby = request.getParameter("hobby");//hobby : 游泳,写字, 足球。
            String[] h = request.getParameterValues("hobby");

            String hobby = Arrays.toString(h);
            hobby = hobby.substring(1, hobby.length() - 1);

            // 2. 添加到数据库
            // string -- date
            Date date = new SimpleDateFormat("yyyy-MM-dd").parse(birthday);

            Student student = new Student(sname, gender, phone, hobby, info, date);
            StudentService service = new StudentServiceImpl();
            service.insert(student);

            // 3. 跳转到列表页
            request.getRequestDispatcher("StudentListServlet").forward(request, response);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }

}

要的jar包,都在这.

结言

好了,欢迎在留言区留言,与大家分享你的经验和心得。

感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

达叔小生:往后余生,唯独有你
You and me, we are family !
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: 达叔小生
https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

原文地址:https://www.cnblogs.com/dashucoding/p/10346994.html

时间: 2024-10-27 05:58:02

第80节:Java中的MVC设计模式的相关文章

Android开发中的MVC设计模式

Android开发中的MVC设计模式的理解 1. Android系统中分层的理解: (1).在Android的软件开发工作中,应用程序的开发人员主要是应用Android Application Framework层封装好的Api进行快速开发. (2).在Android框架的四个层次中,下层为上层服务,上层需要下层的支持,上层需要调用下层的服务. (3).这种分层的方式带来极大的稳定性.灵活性和可扩展性,使得不同层的开发人员可以按照规范专心特定层的开发. (4). Android的官方建议应用程序

Java中13种设计模式汇总

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周

[ 转载 ] Java中常用的设计模式

Java中常用的设计模式 1.单例模式 单例模式有以下特点: 1.单例类只能有一个实例. 2.单例类必须自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例. 总之,选择单例模式就是为了避免不一致状态,避免政出多头. 推荐链接:http://blog.csdn.net/jason0539/article/details/23297037 2.工厂模式 工厂模式的两种情况: 1.在编码时不能预见需要创建哪种类的

iOS开发之理解iOS中的MVC设计模式

模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程序中.在iOS开发中MVC的机制被使用的淋漓尽致,充分理解iOS的MVC模式,有助于我们程序的组织合理性. 模型对象模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算.例如,模型对象可能是表示游戏中的角色或地址簿中的联系人.用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达

【iOS学习笔记】iOS中的MVC设计模式

模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程序中.在iOS开发中MVC的机制被使用的淋漓尽致,充分理解iOS的MVC模式,有助于我们程序的组织合理性. 模型对象模型对象封装了应用程序的数据,并定义操控和处理该数据的逻辑和运算.例如,模型对象可能是表示游戏中的角色或地址簿中的联系人.用户在视图层中所进行的创建或修改数据的操作,通过控制器对象传达

Java中常见的设计模式

我在这里稍微总结一下Java中常见的一些设计模式. 1,单例设计模式 单例设计是Java中最常见的模式之一,,它就是要保证程序里边只有一个对象实例.就好比班上都叫他为班长,是因为得保证班上只有一个班长. 单例设计模式的程序设计思想反应的是Java面向对象思想的封装特性.就是为了保证只有一个对象实例,我们私有化它的构造函数,对外只提供一些相关的 公共方法来获得对象实例. 单例设计模式的实现主要分为饿汉式和懒汉式 饿汉式是先对类的对象实例化,随着类的加载对象也加载进来缺点是会造成性能的损耗好处是实现

Java中23种设计模式(附代码样例)

一.设计模式分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式.结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式.行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式.其实还有两类:并发型模式和线程池模式 二.设计模式的六大原则1.开闭原则(Open Close Principle)开闭原则就是说对

java中的策略设计模式

本文主要讲java中的策略模式:一个可以根据不同的传入参数而具有不同行为的方法,就叫策略模式.概念可能有点不好理解,具体看下面代码: import java.util.Arrays; /** * 策略模式 一个可以根据不同的传入参数而具有不同行为的方法,就叫策略模式 * @author dsj 2015-8-3 下午1:15:41 */ public class Celv { static String s ="a策略 B模式"; public static void main(Str

第61节:Java中的DOM和Javascript技术

Java中的DOM和Javascript技术 DOM是一门技术,是文档对象模型.所需的文档只有标记型文档,如我们所学的html文档(文档中的所有标签都封装成为对象了) DOM: 为Document Object Model, 文档对象模型, 是用来将标记文档以及文档中的标签等所有内容都封装成对象. 把标签文档中所有的标签封装成对象, 文档也封装成对象,DOM技术(标记型文档封装成对象) DOM技术存在浏览器中,内置了DOM技术解析器,变对象是需要进行解析的,描述进行封装.在内存当中进行解析,为D