关键词句:第一个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