探索JavaWeb与MySQL数据库的绝美交集:构建强大的Web应用程序

目录

前言

jdbc工具类

三层架构 

今日重磅

JsonUtil工具类

前端web页面搭建


前言

昨天给大家分享了IDEA与Mysql5.7的安装与使用方法,以及jdbc的简单连接方法,这样简单的连接依旧无法实现更高端的效果,今天给大家分享进阶的学习,昨天分享的jdbc工具类还可优化,减小内存,优化后的方法可直接调用

jdbc工具类

//查询多行多列
    public static <T> List<T> list(String sql, Class<T> c,Object ... params) {
        List<T> tList = new ArrayList<>();
        try {
            //1.注册驱动-反射去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf-8", "root", "123456");
            System.out.println(con);
            //3.定义sql
            //4.需要创建statement
            PreparedStatement preState = con.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preState.setObject(i+1,params[i]);
            }
            // 执行查询语句,返回结果集
            ResultSet rs = preState.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md = rs.getMetaData();
            //获取结果集的总列数
            int columnCount = md.getColumnCount();
            //6.解析rs
            while (rs.next()) {
                T t = c.newInstance();
                //1.取出某一行的每个数据,封装到对象t的属性中
                for (int i = 1; i <=columnCount; i++) {
                    //通过列序号,获取每一列值
                    Object value = rs.getObject(i);
                    if (value != null) {
                        //通过列序号获取每一列名
                        String columnName = md.getColumnName(i);
                        Field f = c.getDeclaredField(columnName);
                        //赋予私有属性赋值权限
                        f.setAccessible(true);
                        //使用反射,把value给到对象t的属性中
                        f.set(t, value);
                    }
                }
                //存入集合
                tList.add(t);
            }
            //7.关闭资源
            preState.close();
            con.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return tList;
    }

    //查询一行
    public static <T> T selectRow(String sql, Class<T> c,Object ... params) {
        try {
            // 注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            // 获取连接对象
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf-8", "root", "123456");

            // 创建Statement
            PreparedStatement preState = con.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preState.setObject(i+1,params[i]);
            }
            // 执行查询语句,返回结果集
            ResultSet rs = preState.executeQuery();
            // 获取结果集元数据
            ResultSetMetaData md = rs.getMetaData();
            // 获取结果集的总列数
            int columnCount = md.getColumnCount();
            // 解析结果集
            T t=null;
            if (rs.next()) {
                t = c.newInstance();
                // 将每一列的数据封装到对象result的属性中
                for (int i = 1; i <= columnCount; i++) {
                    // 获取每一列的值
                    Object value = rs.getObject(i);
                    if (value != null) {
                        // 获取每一列的列名
                        String columnName = md.getColumnName(i);
                        Field f = c.getDeclaredField(columnName);
                        // 赋予私有属性赋值权限
                        f.setAccessible(true);
                        // 使用反射,将value赋值给对象result的属性
                        f.set(t, value);
                    }
                }
                return t;
            }
            // 关闭资源
            preState.close();
            con.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    //查询一列
    public static <T> List<T> selectColumn(String sql,Class<T> c,Object ... params) {
        List<T> tList = new ArrayList<>();
        try {
            //1.注册驱动-反射去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf-8", "root", "123456");
            // 创建Statement
            PreparedStatement preState = con.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preState.setObject(i+1,params[i]);
            }
            // 执行查询语句,返回结果集
            ResultSet rs = preState.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md = rs.getMetaData();
            //获取结果集的总列数
            int columnCount = md.getColumnCount();
            //6.解析rs
            while (rs.next()) {
                //通过列序号,获取每一列值
                T t = (T) rs.getObject(1);
                //存入集合
                tList.add(t);
            }
            //7.关闭资源
            preState.close();
            con.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return tList;
    }

    //查询单个
    public static <T> T selectOne(String sql,Class<T> c,Object ... params) {
        try {
            //1.注册驱动-反射去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf-8", "root", "123456");
            System.out.println(con);
            //3.定义sql
            PreparedStatement preState = con.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preState.setObject(i+1,params[i]);
            }
            // 执行查询语句,返回结果集
            ResultSet rs = preState.executeQuery();
            //结果集rs得到结果集元数据
            ResultSetMetaData md = rs.getMetaData();
            //获取结果集的总列数
            int columnCount = md.getColumnCount();
            //6.解析rs
            //1.取出某一行的每个数据,封装到对象t的属性中
            //通过列序号,获取每一列值
            T t=null;
            if (rs.next()){
                t = (T)rs.getObject(1);
            }
            //7.关闭资源
            preState.close();
            con.close();
            return t;
        }catch(Exception e){
            e.printStackTrace();
        }
        return null;
    }

    //增删改
    public static int update(String sql,Object ... params) {
        try {
            //1.注册驱动-反射去加载jar包中的com.mysql.jdbc.Driver这个类中的DriverManager.registerDriver(new Driver());
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取连接对象
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/summer-camp2023?characterEncoding=utf-8", "root", "123456");
            System.out.println(con);
            //3.定义sql
            //4.需要创建statement

            PreparedStatement preState = con.prepareStatement(sql);
            for (int i = 0; i < params.length; i++) {
                preState.setObject(i+1,params[i]);
            }
            // 执行查询语句,返回结果集
           int i = preState.executeUpdate();
            //7.关闭资源
            preState.close();
            con.close();
            return i;
        }catch(Exception e){
            e.printStackTrace();
        }
        return 0;
    }

我们构建一个好的web应用,需要有层次结构,这样层次分明,检查错误时也更方便

三层架构 

三层架构分为:数据(dao)层、 业务(service)层、控制(controller)层

代码顺序:

1.数据库表

2.实体层

3.dao层、daoimpl

4.service层、serviceimpl

5.controller层

 web的搭建首先建好数据库与实体类,然后先从dao层开始调用jdbc工具类的方法,然后层层调用。要想数据库的数据显示在web页面上,首先需要前端html页面,在前端上可以写表单,提交给servlet,然后通过doget或dopost方法进行数据处理,而今天给大家分享可不一样。

今日重磅

JsonUtil工具类

有了这个工具类就无须表单和servlet了,在java代码上即可处理,受到中文字符集影响,需改成utf-8,以保证不出现乱码

package com.hp.utils;

import com.alibaba.fastjson.JSON;

import javax.servlet.http.HttpServletResponse;

public class JsonUtil {
    public static  void transJson(Object obj, HttpServletResponse resp){
        try{//数据化转化成json,再响应给浏览器
            String josn_string = JSON.toJSONString(obj);
            resp.setContentType("application/json;charset=utf-8");
            resp.getWriter().write(josn_string);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
import com.hp.pojo.Dept;
import com.hp.service.IDeptService;
import com.hp.service.impl.DeptServiceImpl;
import com.hp.utils.JsonUtil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebServlet("/deptC")
public class DeptC extends HttpServlet {
    private IDeptService deptService =new DeptServiceImpl();
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("测试");
        List<Dept> list = deptService.list();
        System.out.println(list);
        //数据化转化成json,再响应给浏览器
        JsonUtil.transJson(list,resp);
    }
}

再由上面这段controller层调用service层并实例化,即可完成将数据转换响应给浏览器。

前端web页面搭建

做好了前面这些就可以开始图形化的设计了,制作自己喜欢的网页样式

我的页面中用到了JavaScript+vue 来搭建,大家可根据所思所想,去实践。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值