Javaweb增删改查之【查】

news2025/1/18 11:53:09

Javaweb增删改查之【查】

    • 1.前端页面
    • 2.java链接数据库——集成mybatis
      • 2.1 建立层
      • 2.2 实体层entity
      • 2.3 mapper(dao层)
      • 2.4 mybatis配置文件
      • 2.5工具层util
    • 3.后台功能
      • 3.1servlet

前几天跟着b站up主学javaweb登录,突然还是觉得这几年学了c++是真的挺好的,看java不仅不抵触,而且觉得也不难嘛。这次的增删改查的查是我自己慢慢弄出来的,我真棒

一些细节,比如jar包放哪里,怎么建包,可以看之前的博客
本篇思路参考:[1]
完整代码:https://github.com/wangwyForNewTime/javaWeb-FindFromMySQL
数据库与上篇用的一个不赘述了
在这里插入图片描述

1.前端页面

首先和前面登录不同的是,查需要读取数据库所有数据并且呈现出来,所以需要用到JSLT库
知识点可以参考这个,但是上面给的版本很低。然后我弄了半天一直服务器报500,后来查了查,从这个博主这里知道,tomcat10以上的用2.0.0版本以上,所以从这个博主这里下到了2.0.0
然后把jar包放进lib里面
在这里插入图片描述

<%--
  Created by IntelliJ IDEA.
  User: 大喵喵
  Date: 2023/2/28
  Time: 17:55
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
  <meta charset="UTF-8">
  <title>管理员</title>
  <link rel="stylesheet" href="css/bootstrap.min.css">
  <link rel="stylesheet" href="css/index.css">
</head>
  <body>
  <div class="mainbac">
    <h1>Maybe Something System </h1>
    <div class="lii">欢迎你,管理员</div>
    <div class="duzii">


      <form class="form-inline"  action="index">
        <div class="form-group has-success has-feedback">
          <label class="control-label">ID:</label>
          <input  class="form-control" style="margin-left: 20px;" name="test">
          <button type="submit" class="btn btn-default">&nbsp;&nbsp;&nbsp;&nbsp;</button>
         <button type="button" class="btn btn-link">返回首页</button>
        </div>
      </form>

      <table class="table table-striped" style="margin-top: 50px;">
        <thead>
        <tr >
          <th>ID</th>
          <th>密码</th>
          <th>身份</th>
          <th>操作</th>
        </tr>
        </thead>

        <tbody>
        <tr>
          <td>Wen</td>
          <td>123456</td>
          <td>管理员</td>
          <td><a href="#">设置</a> | <a href="#">删除</a></td>
        </tr>

        <c:forEach var="e" items="${list}">
          <tr>

            <td>${e.username}</td>
            <td>${e.password}</td>
            <td>管理员</td>
            <td><a href="#">设置</a> | <a href="#">删除</a></td>

          </tr>
        </c:forEach>


<%--        <tr>--%>
<%--          <td>Te</td>--%>
<%--          <td>12</td>--%>
<%--          <td>普通用户</td>--%>
<%--          <td><a href="#">设置</a> | <a href="#">删除</a></td>--%>
<%--        </tr>--%>
        </tbody>

      </table>

    </div>
  </div>
  </body>
</html>

2.java链接数据库——集成mybatis

想要测试链接上了数据库,所有操作可以直接看上一篇内容的3
这里的作用就是让java代码能够操作数据库。

2.1 建立层

分层思想没什么神奇的,就是你要实现的功能,你要愿意全写一个java文件里也行,但是你把不同的类分开到独立文件里面,看起来清晰明了,这就是分层思想

这是最后建立各种文件的目录
在这里插入图片描述

2.2 实体层entity

就是建立user类

package entity;

public class User {
    private  Integer userId;
    private  String username;
    private  String password;

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.3 mapper(dao层)

就是给java能操作MySQL牵线搭桥,创建的接口
这次要获取所有的数据,所以需要的命令是select * from pa(数据库名)
UserMapper.java

package mapper;

import entity.User;

import java.util.List;

public interface UserMapper {
    public User queryUserByName(String username);

    public List<User> findAll();
}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 引入dtd -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- namespace就是接口的包名加类名 -->
<mapper namespace="mapper.UserMapper">
    <select id="queryUserByName" resultType="entity.User" parameterType="String">
        <!-- 写SQL语句 -->
        select * from pa where username = #{username}
    </select>
    <select id="findAll" resultType="entity.User" parameterType="String">
        <!-- 写SQL语句 -->
        select * from pa
    </select>

</mapper>

2.4 mybatis配置文件

没有这个就别想链接数据库
在这里插入图片描述
mysql.properties,注意test1为数据库名字,按需更换,密码是MySQL的密码:

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=UTF-8
username = root
password = 1234

mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <properties resource="mysql.properties"/>
    <!-- 默认使用的环境 ID(比如:default="development")
    也就是说我们可以配置多套<environment>环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--                JDBC 驱动-->
                <property name="driver" value="${driver}"/>
                <!--                url数据库的 JDBC URL地址。-->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.xxxx.mapper"/>
    </mappers>

</configuration>


2.5工具层util

存放工具性函数的层,这里需要一个创建会话的函数
在这里插入图片描述

/**
 *
 */
package com.xxxx.util;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


public class GetSqlSession {
   public static SqlSession createSqlSession(){
       SqlSessionFactory sqlSessionFactory = null;
       InputStream input = null;
       SqlSession session = null;

       try{
           //获取mybatis的环境配置文件
           String resource ="mybatis-config.xml";
           //以流的方式获取resourse
           input = Resources.getResourceAsStream(resource);
           //创建会话工厂
           sqlSessionFactory=new SqlSessionFactoryBuilder().build(input);
           //通过工厂得到SqlSession
           session=sqlSessionFactory.openSession();
           return session;
       } catch (IOException e) {
           e.printStackTrace();
           return null;
       }
   }

   public static void main(String[] args){
       System.out.println(createSqlSession());
   }


}



可以写个函数测试一些是否能联上数据库,具体看上一篇博客3.7

3.后台功能

3.1servlet

jsp想向后台传东西,后台想给jsp传数值,都需要servlet。如果实现的功能复杂,可以把实现功能的代码放到service层里面。但是这里代码简单,我就没分开,直接写在servlet层了

package servlet;
import entity.User;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import service.Userservice;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import util.GetSqlSession;

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

@WebServlet("/index")//这个/很重要
public class Userservlet extends HttpServlet {
   // private Userservice userService =new Userservice();

    @Override
    protected  void  service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        String uTestValue =request.getParameter("test");
        System.out.println(uTestValue);

        SqlSession session = GetSqlSession.createSqlSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        List<User> list=userMapper.findAll();
        System.out.println(list);
        request.setAttribute("list", list);
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/378574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

对象扩展、函数的扩展、Symbol、Iterator 迭代器、Set结构、Map 数据结构——ES6+

目录 一、对象扩展 二、函数的扩展 三、Symbol 四、Iterator 迭代器 五、Set结构 六、Map 数据结构 一、对象扩展 1. 对象简写 对于对象属性&#xff0c;属性名与属性值对应的变量相同时&#xff0c;可简写为属性名 对于对象方法&#xff0c;将 &#xff1a;function…

优化基于axios接口管理的骚操作

优化基于axios接口管理的骚操作&#xff01; 本文针对中大型的后台项目的接口模块优化&#xff0c;在不影响项目正常运行的前提下&#xff0c;增量更新。 强化功能 1.接口文件写法简化&#xff08;接口模块半自动化生成&#xff09; 2.任务调度、Loading调度&#xff08;接口层…

Javaweb复习之HTTPTomcatServelet

1.Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站。 JavaWeb就是用Java技术来解决相关web互联网领域的技术栈 1.2 JavaWeb技术栈 B/S 架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器 架构模…

仓库管理系统包括哪些方面?

想要弄清楚仓库管理系统包括哪些方面&#xff0c;得先了解仓库管理体系包含哪些方面。 一般来说&#xff0c;仓库管理体系包含以下四大方面&#xff1a; 数据精确度体系&#xff1a;如何通过制定相关政策及操作规范&#xff0c;提升库内数据的准确度。管理体系&#xff1a;构…

React的生命周期详细讲解

什么是生命周期&#xff1f; 所谓的React生命周期&#xff0c;就是指组件从被创建出来&#xff0c;到被使用&#xff0c;最后被销毁的这么一个过程。而在这个过程中&#xff0c;React提供了我们会自动执行的不同的钩子函数&#xff0c;我们称之为生命周期函数。**组件的生命周期…

【论文阅读】-姿态识别

记录论文阅读&#xff0c;希望能了解我方向的邻域前沿吧 粗读 第一篇 ATTEND TO WHO YOU ARE: SUPERVISING SELF-ATTENTION FOR KEYPOINT DETECTION AND INSTANCE-AWARE ASSOCIATION 翻译&#xff1a;https://editor.csdn.net/md?not_checkout1&spm1001.2014.3001.5352…

设计模式系列 - 代理模式及动态代理详解

定义 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 结构 抽象角色&#xff1a;通过接口或抽象类声明真实角色实现的业务方法。 代…

系列七、索引

一、索引概述 1.1、概述 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就可以…

NCRE计算机等级考试Python真题(七)

第七套试题1、在面向对象方法中&#xff0c;一个对象请求另一对象为其服务的方式是通过发送___________。A.命令B.口令C消息D.调用语句正确答案&#xff1a; C2、下面不属于软件需求分析阶段主要工作的是___________。A.需求评审B.需求获取C.需求变更申请D.需求分析正确答案&am…

MySQL 索引失效场景

1&#xff0c;前言 索引主要是为了提高表的查询速率&#xff0c;但在某些情况下&#xff0c;索引也会失效的情况。 2&#xff0c;失效场景 2.1 最左前缀法则 查询从索引最左列开始&#xff0c;如果跳过索引中的age列&#xff0c;那么age后面字段的索引都将失效&#xff0c;…

接电话蓝牙耳机什么牌子好?语音质量好的蓝牙耳机

越来越多的人都离不开蓝牙耳机了&#xff0c;因为它用起来是真的太方便了&#xff0c;相信后续智能手机也会更多地取消3.5耳机孔&#xff0c;届时蓝牙耳机将会更加普遍&#xff0c;甚至是人手一部&#xff0c;下面分享几款语音质量好的蓝牙耳机。 第一款&#xff1a;南卡小音舱…

云端IDE系列教程7:解决 WeTTY 在 Ubuntu 非 root 用户不能运行的问题

原文作者&#xff1a;行云创新技术总监 邓冰寒 概述 上一期在使用官方容器镜像快速成功地在 TitanIDE 运行起来了 WeTTY&#xff0c;但是不适合开发人员使用&#xff0c;而我自己编译构建出来的容器镜像无法直接运行指定的应用&#xff08;/bin/bash 或 /bin/zsh&#xff09;&…

HBase基础知识

1、HBase特点 1&#xff09;海量存储 Hbase适合存储PB级别的海量数据&#xff0c;在PB级别的数据以及采用廉价PC存储的情况下&#xff0c;能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性&#xff0c;才为海量数据的存储提供了便利。…

收下这份十万商家称赞的开店攻略,带你发家致富!

理想与现实之间的距离&#xff0c;大概就是开店吧&#xff01;总觉得自己投点钱&#xff0c;一两年回本&#xff0c;后面每月轻松赚几万、几十万&#xff1b;结果却发现房租太贵、人工太贵、自己什么都不懂&#xff0c;然后随波逐流的没有特色。其实&#xff0c;细心的朋友会发…

经常打电话的人用什么蓝牙耳机好?通话功能比较好的蓝牙耳机

无线耳机市场发生了翻天覆地的变化&#xff0c;开始越来越频繁地出现不一样的功能。现在&#xff0c;选择不于 Apple&#xff0c;还包括一大堆可用的耳机&#xff0c;下面就来看看以下通话功能好的蓝牙耳机。 第一款&#xff1a;南卡小音舱蓝牙耳机 售价&#xff1a;299元 推…

【数电基础】——逻辑代数运算

目录 1.概念 1.基本逻辑概念 2.基本逻辑电路&#xff08;与或非&#xff09; 逻辑与运算 与门电路&#xff1a; 逻辑或运算 或门电路&#xff1a; ​逻辑非运算&#xff08;逻辑反&#xff09; 非门电路​编辑 3.复合逻辑电路&#xff08;运算&#xff09; 与非逻辑…

初探推荐系统-01

文章目录一、什么是推荐系统是什么为什么长尾理论怎么做二、相似度算法杰卡德相似系数余弦相似度三、基于内容的推荐算法如何获取到用户喜欢的物品如何确定物品的特征四、推荐算法实验方法评测指标推荐效果实验方法1、离线实验2、用户调查3、在线实验评测指标1、预测准确度评分…

【组织架构】中国国家铁路集团有限公司

1 公司简介 中国国家铁路集团有限公司&#xff08;简称“中国铁路”&#xff09;是经国务院批准、依据《中华人民共和国公司法》设立、由中央管理的国有独资公司。经国务院批准&#xff0c;公司为国家授权投资机构和国家控股公司。公司注册资本为17395亿元&#xff0c;由财政部…

CAD拉伸后标注尺寸不变?快来看看是不是这个原因!

CAD拉CAD拉伸后标注尺寸不变&#xff1f;快来看看是不是这个原因&#xff01;CAD拉命令作为常用的图形编辑命令之一&#xff0c;有些设计师在使用过程中发现&#xff0c;CAD拉伸后标注尺寸没有变化&#xff0c;这是什么情况&#xff1f;本节课程小编就以浩辰CAD软件为例来给大家…

心系区域发展,高德用一体化出行服务平台“聚”力区域未来

交通&#xff0c;是城市的血脉。通过对人、资源、产业的连接&#xff0c;交通建设往往是城市和区域经济发展的前提。不过&#xff0c;在度过了“要想富&#xff0c;先修路”的初级建设阶段后&#xff0c;交通产业内部也出现了挑战&#xff0c;诸如城市秩序、发展成本、用户使用…