spring web 简单项目数据库查询 纯注解版替代web.xml

news2024/11/16 23:59:42

关键词句:第一个spring 简单项目 纯注解 包括替代web.xml 文件

                第一个spring mvc web 简单项目 纯注解

                用纯注解写spring web 简单项目 纯注解写web 项目

                spring 写数据库 查询 注解方式           

                spring 数据接链接池 用的阿里的

                spring jdbc jdbcTemplate类使用查询与插入     

                把数据库内容发送到网页上面

项目:jdk17版本

最终效果图:

首先,上文件:

 项目结构:

1.Main.java

package com.baiyu.web.Appconfig;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Configuration//配置类
@ComponentScan("com.baiyu.web")//指定扫描位置
@EnableWebMvc
// AbstractAnnotationConfigDispatcherServletInitializer 用于 DispatcherServlet 初始化
public class Main extends AbstractAnnotationConfigDispatcherServletInitializer implements WebMvcConfigurer {


    /**
     加载 Spring 配置类中的信息,
     初始化 Spring 容器
     用来加载配置文件或配置类中所声明的bean。
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {//配置root上下文,如Jpa数据源等等的配置
        return new Class[]{Main.class};//配置类
    }

    /**
     加载 Spring MVC 配置类中的信息,
     初始化 Spring MVC 容器
     用来加载ContextLoaderListener要加载的bean。
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {//配置dispatcher servlet,如果在root config指定了该转发规则就可以忽略
        return new Class[]{Main.class};//mvc 配置类
    }

    /**
     *用来定义请求URL
     * */
    //配置 DispatcherServlet 的映射路径 //指定开始被 servlet 处理的url,配置从 / 开始
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};//初始路径
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();//mvc启动
    }
}

2.QueryController.java

package com.baiyu.web.controller;

import com.baiyu.web.entity.User;
import com.baiyu.web.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

//@Controller //@Controller 注解在类上,标识其为一个可接收 HTTP 请求的控制器
//@RequestMapping(value = "/users")//@RequestMapping 注解是不必需的
//@ResponseBody
@RestController
public class QueryController {

    @Autowired
    UserService userService;
    @RequestMapping(value = "/users",method = RequestMethod.GET)
    public String getuser1(){
//        System.out.println("成功拉111");
        User user=userService.queryUser(1);
        return user.toString();
    }
}

3.UserDao.java

package com.baiyu.web.dao;

import com.baiyu.web.entity.User;

public interface UserDao {
    public void add(User user);//插入数据库信息

    public User queryUser(Integer id);//根据id 查询全部用户

}

4.UserdaoImpl.java

package com.baiyu.web.dao.impl;

import com.baiyu.web.dao.UserDao;
import com.baiyu.web.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;

@Component
public class UserDaoImpl implements UserDao{
    @Autowired
    public JdbcTemplate jdbcTemplate;

    @Override
    public void add(User user) {//插入数据库信息
        String sql="insert into student values(?,?)";//sql 插入语句
        String[] args={
                null,//id
                user.getName()//姓名
        };//sql 替代? 的参数
        int update=jdbcTemplate.update(sql,args);//执行插入sql 语句
        System.out.println(update);
    }


    @Override
    public User queryUser(Integer id) {
        String sql="select * from student where id=?";
        return jdbcTemplate.queryForObject(sql,new Object[]{id},(rs,rowNum)->{
            User users=new User();
            users.setId(rs.getInt("id"));
            users.setName(rs.getString("name"));
            return users;
        });
    }



    @Bean//自动调用 创建一个对象 同理 和下面的方法
    public JdbcTemplate createJdbcTemplate(@Autowired DataSource ds) {//autowired 注解 意思是自动赋值,值在容器里面来
        JdbcTemplate jdbctempleat=new JdbcTemplate();
        jdbctempleat.setDataSource(ds);
        return jdbctempleat;
    }

    @Bean//创建连接池 对象 有bean注解 自动调用本方法 然后把返回的对象 放到spring 容器里面
    public DataSource createDataSource(){
        DruidDataSource ds=new DruidDataSource();// 数据库连接池 阿里 mysql
        ds.setUrl("jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC");
        ds.setUsername("root");
        ds.setPassword("root");
        //ds.setDriverClassName("driver=com.mysql.jdbc.Driver");
        ds.setValidationQuery("SELECT 1");//用来检测连接是否有效
        ds.setTimeBetweenEvictionRunsMillis(6000);
        ds.setMaxActive(5);
        ds.setInitialSize(3);
        return ds;
    }


}

5.User.java

package com.baiyu.web.entity;

import org.springframework.stereotype.Component;

@Component//自动new 一个对象
public class User {
    private long id;
    private String name;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString(){
        return "id:"+id+"  name:"+name;
    }
}

6.userService.java

package com.baiyu.web.service;

import com.baiyu.web.dao.UserDao;
import com.baiyu.web.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public void addUser(User user){
        userDao.add(user);//userdaoimpl 数据库插入语句
    }


    public User queryUser(Integer id){
        return userDao.queryUser(id);
    }

}

8.pom.xml 相关依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>testdemo</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>testdemo Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.20</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.20</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.10</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.3.20</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.27</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>testdemo</finalName>
  </build>
</project>

再次:建立我们的数据库

sql 代码:

student.sql文件,里面的sql代码

你也可以复制在sql 里面运行

1.建立一个数据库 名字叫test 因为我java代码写了test 数据库,你建立test数据库 ,你得自己修改java代码 连接数据库那段连接的字符串 

2.下面文件是创建表 然后插入一条信息的意思

/*
 Navicat Premium Data Transfer

 Source Server         : localhost
 Source Server Type    : MySQL
 Source Server Version : 80028 (8.0.28)
 Source Host           : localhost:3306
 Source Schema         : test

 Target Server Type    : MySQL
 Target Server Version : 80028 (8.0.28)
 File Encoding         : 65001

 Date: 23/11/2022 12:57:23
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int NOT NULL,
  `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, 'ww');


SET FOREIGN_KEY_CHECKS = 1;

好了,这下直接运行,我不知道你们会不会报错,我能给的都全部给了,本版本:jdk17版本 注意 !!!

再次不想翻上面 上效果图:

参考知识网页:

1.Spring MVC AbstractAnnotationConfigDispatcherServletInitializer - emanlee - 博客园

2.Spring的Java配置方式,告别XML配置-51CTO.COM

3.springmvc-没有web.xml和springmvc.xml你还可以运行起来springmvc吗_wondertang的博客-CSDN博客_springmvc 不用web.xml

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

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

相关文章

python--星际大战(基础版)

实现功能&#xff1a; 运用python的pygame模块实现上方出现一群体的敌机&#xff0c;每个敌机会随机不定时发射子弹&#xff0c;下方是玩家飞机&#xff0c;通过控制方向和发射子弹来摧毁所以敌机&#xff0c;在游戏开始前会有一个计时器&#xff08;3秒&#xff09;计时结束&…

3、Pinpoint-Agent端注册服务到Server端

0、此节简介 此章节大部分操作是在另一台服务器上&#xff0c;vm7。 Agent端配置 项目发布 注册到Pinpoint服务端 接口调用&#xff0c;服务端查看详情 1、Agent端配置 Agent推荐使用和Pinpoint服务端同样的版本。 1.1、下载Pinpoint-Java-Agent包 Github下载链接&#xff1a;h…

第七章 规范化:Eslint + Prettier + Husky

第七章 规范化&#xff1a;Eslint Prettier Husky 为了项目能够长期健康的发展。代码的规范性建设非常重要。只有纪律严明的队伍才能不断打胜仗。 规范制定容易&#xff0c;执行的难度很大。 项目规范可以分为&#xff1a; 编码规范&#xff1b;项目结构规范&#xff1b;…

hyper-v虚拟机ubuntu ssh配置

环境描述&#xff1a; 本地机&#xff1a;win10系统 linux机&#xff1a;hyper-v 虚拟机中的ubuntu 1、ssh 安装和启用 //安装ssh sudo apt-get install ssh//启用ssh service ssh start//查看ssh状态 service ssh status 2、网络工具安装和ip查看 //安装网络工具 sudo ap…

[附源码]SSM计算机毕业设计基于篮球云网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

$.ajax异步请求总结

$.ajax()简单介绍 AJAX 是一种与服务器交换数据的技术&#xff0c;可以在不重新载入整个页面的情况下更新网页的一部分 $.ajax()是万能的&#xff0c;是最基础&#xff0c;最全面的那个&#xff1b;剩余的方法都是针对某种特定场景下的$.ajax()的简化形式 $.ajax()、$.post()…

Java环境变量学习

0. 找到你的安装路径 C:\Program Files\Java 这种语言的开发工具&#xff0c;重要的东西建议就安装在C盘 0.1 里面有什么&#xff1f; 其实就是很多java命令而已 用来编译的&#xff0c;运行的 JDK开发用的JRE运行用的 就像python中给你开发工具的同时&#xff0c;再给你一个…

[附源码]java毕业设计学习资源共享与在线学习系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Jetpack Compose中的state核心思想

Compose 中的状态 应用的“状态”是指可以随时间变化的任何值。这是一个非常宽泛的定义&#xff0c;从 Room 数据库到类的变量&#xff0c;全部涵盖在内。 所有 Android 应用都会向用户显示状态。下面是 Android 应用中的一些状态示例&#xff1a; 聊天应用中最新收到的消息…

Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别

目录 一、世界坐标系与本地坐标系 二、srcGameObject.transform.TransformPoint(Vector3 vec) 三、srcGameObject.transform.TransformVector(Vector3 vec) 四、srcGameObject.transform.TransformDirection(Vector3 vec) 五:示例 一、世界坐标系与本地坐标系 世界坐标很…

[LabVIEW]圖像內的物件計算_Count objects

NI雖然是以賣硬件為主的公司&#xff0c;但其在軟件(LabVIEW)的著墨也相當深厚&#xff0c;尤其是各類應用模組的更新速度和對應功能。 每每不經意地碰觸到新版本的LabVIEW&#xff0c;都會不由自主地翻閱和嘗試新增模組。 本文藉由兩個模組串接簡易製作一支圖像計數程式&…

七、模型评估指标

当训练好模型之后&#xff0c;检测模型训练效果如何&#xff0c;评价指标有哪些&#xff1f;通过查阅相关资料&#xff0c;我将以这五个指标来对所训练的模型进行评估&#xff0c;下图是评价指标运行结果图。 一、混淆矩阵&#xff08;Confusion Matrix&#xff09; 解释&…

【网安神器篇】——Whatweb指纹识别工具

作者名&#xff1a;Demo不是emo 主页面链接&#xff1a;主页传送门创作初心&#xff1a;舞台再大&#xff0c;你不上台&#xff0c;永远是观众&#xff0c;没人会关心你努不努力&#xff0c;摔的痛不痛&#xff0c;他们只会看你最后站在什么位置&#xff0c;然后羡慕或鄙夷座右…

CV—cs231n二刷

文章目录cv应用优化训练牛顿法HOGYOLO风格迁移GAN语义分割实例分割LSTMDL框架GPU相关cs231n.stanford.edu cv应用 图像分类、目标检测、人脸识别、语义分割、风格迁移、GAN生成、VQA多模态、点云分割、姿态估计、游戏学习等 优化训练 避免后期训练还在大幅震荡&…

[carla] GNSS传感器与Carla坐标系 转换方法

文章目录方法1:通过python API直接获取转换后坐标1.1 GNSS传感器消息-内容介绍1.2 在线获取方法1.3 完整代码方法2-通过离线读取转换关系的方式转换2.1 转换类代码和使用方法2.2 转换矩阵保存和读取2.3 运行结果2.5 注意事项附件 所有地图的转换矩阵参考链接:方法1:通过python …

工作中学到的一些小点

1.结构体对齐 记得之前面试的时候被问过这个问题【汗】 这个结构体占多大 struct sExample {char c;int n; };占8字节&#xff0c;问有没有办法让它占5个字节&#xff1f; 有 #pragma pack(push) //保存对齐状态 #pragma pack(1) //设定为1字节对齐struct sExample {char c;…

qt串口配置(端口号列表选择/自动保存/初始化模板)复制粘贴直接用

一、前言 废话不多说&#xff0c;写这个作为串口模板&#xff0c;后续会继续补充其他模板&#xff0c;有相识功能直接复制模板里东西到程序中&#xff0c;直接使用&#xff0c;无需大的调整&#xff0c;为自己模板记录&#xff0c;也提供给需要的朋友们。 二、环境 qt5.7 win…

R15.3-15.3-15.3-15.3A_哈威泵_样本及应用

R15.3-15.3-15.3-15.3A_哈威泵_样本及应用R11.8-11.8-11.8-11.8-BABSL_水泥行业用主用于钢厂&#xff0c;油田&#xff0c;水利&#xff0c;飞机&#xff0c;压铸机等重型液压设备。 对油泵R11.8-11.8-11.8-11.8-BABSL_水泥行业用的维护保养应注意以下方面&#xff1a; 1.会腐…

项目需求及架构设计

第2章 项目需求及架构设计 2.1 项目需求分析 用户行为数据采集平台搭建 用户行为数据会以文件的形式存储在服务器&#xff0c;这个阶段需要考虑&#xff1a;采集用户行为数据使用的工具,需要提供详细的设计需求 如&#xff1a;flume&#xff0c;flume采用的 source、channel、…

HDFS的Shell操作

该文章主要为完成实训任务及总结&#xff0c;详细实现过程及结果见【参考文章】 参考文章&#xff1a;https://howard2005.blog.csdn.net/article/details/127170478 文章目录一、 三种Shell命令方式二、FileSystem Shell文档三、常用Shell命令四、实例练习1、创建目录2、查看目…