JSP、Servlet实战:团队开发新闻系统(三)架构简介

JSP、Servlet实战:团队开发新闻系统(三)架构简介

这里写图片描述
这里写图片描述
jsp、servlet原生就是MVC设计思想。
Controller层是Servlet来充当,JSP充当View的角色,Model是Bean。

程序流程

jsp或者html页面请求servlet,为了代码结构清晰、提高开发效率,提取出service层,service如果需要与数据库打交道可以调用dao层。

  • servlet用于请求转发、响应,
  • service实现业务逻辑,
  • dao用于操作数据库

Dao

如果没有统一的编码规范以及减少代码重复率,还可以抽离BaseDao,每个对应的dao继承BaseDao

BaseDao.java

package cn.edu.bzu.group12.orangenews.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


/**
 * @author pangPython
 *  基础的数据库操作
 */

public abstract class BaseDao {

    private Connection conn = null;
    private Statement stat = null;


    public BaseDao(){
        try {
            this.setConn(getConnection());
            this.setStat(conn.createStatement());
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    //获取数据库连接
    private Connection getConnection() throws ClassNotFoundException, SQLException{
        final String url = "jdbc:mysql://192.168.50.103:3306/group12";
        final String user = "group12";
        final String password = "group12";
        Class.forName("com.mysql.jdbc.Driver");
        return DriverManager.getConnection(url,user,password);
    } 

    public Connection getConn() {
        return conn;
    }

    public void setConn(Connection conn) {
        this.conn = conn;
    }

    //查询 
    public ResultSet Query(String sql) throws SQLException{
        return this.stat.executeQuery(sql);
    }
    //增 insert into table values()
    public boolean Insert(String sql){

        return false;
    }
    //删 delete 
    public boolean Delete(String sql){
        return false;
    }

    //根据id删对象
    public int DeleteById(int id){
        //delete from table where id = b;

        return 0;
    }

    //改 update table set ''='';
    public boolean Update(String sql){
        return false;
    }

    public Statement getStat() {
        return stat;
    }

    public void setStat(Statement stat) {
        this.stat = stat;
    }
    //抽象方法 resultset 转换成 bean 对象类型
    abstract Object RS2Obj(ResultSet rs,Object obj) throws SQLException;

}

UserDao.java

package cn.edu.bzu.group12.orangenews.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.log4j.Logger;

import cn.edu.bzu.group12.orangenews.bean.User;


/**
 * @author pangPython
 *  用户数据库操作
 */
public class UserDao extends BaseDao{
    Logger log = Logger.getLogger(UserDao.class) ;
    User user = new User();
    //插入User到数据库
    public int add(User user) {
        //insert into user values('pwd','user_name',1,'tel','email');
        String sql = "insert into user(pwd,user_name,user_sex,tel,email) values('"+user.getPwd()
                        +"','"+user.getUser_name()
                        +"',"+user.getUser_sex()
                        +",'"+user.getTel()
                        +"','"+user.getEmail()
                        +"')"; 
        try {

            return this.getStat().executeUpdate(sql);

        } catch (SQLException e) {

            e.printStackTrace();
        }
        return 0;
    }

    public User get(int user_id) throws SQLException{
        String sql = "select * from user where user_id = "+user_id;
        ResultSet rs = this.getStat().executeQuery(sql);

        user.setUser_id(user_id);
        while (rs.next()) {
            user = (User) RS2Obj(rs, new User());
        }
        return user;
    }

    public User getUserByNameAndPwd(String user_name,String user_pwd) throws SQLException{
        String sql = "select * from user where user_name = '"+user_name+"' and pwd = '"+user_pwd+"'";
        ResultSet rs = this.getStat().executeQuery(sql);
        while (rs.next()) {
            user = (User) RS2Obj(rs, new User());
        }
        return user;
    }

    //继承自BaseDao抽象方法
    //把数据库查询的ResultSet转换成User对象
    @Override
    Object RS2Obj(ResultSet rs, Object obj) throws SQLException {
        User user_obj = (User)obj;
        user_obj.setUser_id(rs.getInt("user_id"));
        user_obj.setUser_name(rs.getString("user_name"));
        user_obj.setPwd(rs.getString("pwd"));
        user_obj.setEmail(rs.getString("email"));
        user_obj.setUser_sex(rs.getInt("user_sex"));
        user_obj.setTel(rs.getString("tel"));
        return user_obj;
    }

        //  SELECT LAST_INSERT_ID();
        public int getLastInsertId(String table_name) throws SQLException{

            String sql = "SELECT MAX(user_id) AS user_id FROM USER";

            ResultSet rs = this.getStat().executeQuery(sql);
            while (rs.next()) {
                log.debug("返回了数据库中的结果!");
                return rs.getInt("user_id");

            }
            log.debug("返回了0!");
            return 0;

        }

        //更新用户密码
        public boolean UpdatePwd(int user_id, String new_pwd) throws SQLException {
            String sql = "update user set pwd = '"+new_pwd+"' where user_id = "+user_id;
            if(this.getStat().executeUpdate(sql)>0){
                return true;
            }
            return false;
        }

        //更新用户信息
        public boolean Update(User user) throws SQLException {
            String sql = "update user set user_name = '"+user.getUser_name()+"' , user_sex = "+user.getUser_sex()+" , email = '"+user.getEmail()+"' , tel = '"+user.getTel()+"' where user_id = "+user.getUser_id();
            log.debug("打印sql信息:"+sql);
            if(this.getStat().executeUpdate(sql)>0){
                return true;
            }
            return false;
        }



}

Bean

bean是作为数据库表的映射,封装的实体类。设计时最好属性名与数据库表的字段名对应,user表就有一个对应的User.java
这里写图片描述
这里写图片描述

Service

service层主要写项目的业务逻辑,并且最好不出现数据库操作
实例化一个dao,在service中调用dao中的基础方法
这里写图片描述

Servlet

servlet中主要是重写service方法或者可以重写doGet、doPost方法。
实例化一个Service,处理来自用户的请求,接收参数,然后调用Service的方法,实现转发,或者重定向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值