SpringMVC基础---案例:web提交学生信息数据到数据库

案例:web提交学生信息数据到数据库

1、需求:

web网页,提交学生信息,存入到数据库
在这里插入图片描述

2、创建student学生信息表、sex性别表、hobby爱好表、edu学历表

2.1)student学生信息表

在这里插入图片描述

2.2)sex性别表

在这里插入图片描述
在这里插入图片描述

2.3)hobby爱好表

在这里插入图片描述
在这里插入图片描述

2.4)edu学历表

在这里插入图片描述
在这里插入图片描述

3、前端代码.html

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>学生信息管理系统</title>

		<style>
			input[type="text"]{
				width: 300px;
				height: 20px;
			}
			/* 修饰保存按钮 */
			input[type="button"]{
				width: 150px;						/*宽度*/
				height: 30px;						/*高度*/
				color: #FFFFFF;					/*字体颜色*/
				background-color: #FF0000; /*背景颜色*/
				
			}
			/* 修饰取消按钮 */
			input[type="reset"]{
				width: 150px;						/*宽度*/
				height: 30px;						/*高度*/
				color: #FFFFFF;					/*字体颜色*/
				background-color: #0000FF; /*背景颜色*/
			}
		</style>

		<script src="../jquery-1.8.3.min.js"></script>
		<script>
			function fun(){
				$.ajax({ //发起Ajax请求数据
					type: "get", //POST隐藏请求自带的数据,get显示请求自带的数据
					url: "http://localhost:8888/stu/add", //要使用的请求路径
					//contentType: "application/json;charset=utf-8",
					data:$("#f1").serialize(),
					
					success: function(data) { //成功时的方案
						console.log(data.intime); //查看js对象
					},
					error: function(data) {
						alert("提交失败" + JSON.stringify(data));
					}
				})
			}	
		</script>

	</head>
	<body>	
		<form id="f1">
			<table>
				<tr>
					<td align="center">
						<h3>学生信息管理系统MIS</h3>
					</td>
				</tr>

				<tr>
					<td>姓名:</td>
				</tr>

				<tr>
					<td>
						<input type="text" name="name" placeholder="请输入姓名..." />
					</td>
				</tr>

				<tr>
					<td>年龄:</td>
				</tr>

				<tr>
					<td>
						<input type="text" name="age" placeholder="请输入年龄..." />
					</td>
				</tr>

				<tr>
					<td>
						性别:(单选框)
						<input type="radio" name="sex" checked="checked" value="0" /><input type="radio" name="sex" value="1" /></td>
				</tr>

				<tr>
					<td>
						爱好:(多选框)
						<input type="checkbox" name="hobby" checked="checked" value="0" />乒乓球
						<input type="checkbox" name="hobby" value="1" />爬山
						<input type="checkbox" name="hobby" value="2" />唱歌
					</td>
				</tr>

				<tr>
					<td>
						学历:(下拉框)
						<select name="edu">
							<option value="1">本科</option>
							<option value="2">专科</option>
							<option value="3">研究生</option>
						</select>
					</td>
				</tr>

				<tr>
					<td>
						入学日期:
						<input type="date" name="intime" />
					</td>
				</tr>

				<tr>
					<td>
						<input type="button" value="保存" onclick="fun();" />
						<input type="reset" value="取消" />
					</td>
				</tr>
			</table>
		</form>
	</body>
</html>

4、创建后端代码

4.1)项目结构

在这里插入图片描述

4.2)创建启动类,RunApp.java
package cn.tedu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;

//启动类
@SpringBootApplication //会进行资源的自动扫描
@Controller
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class);
    }
}
4.3)创建启动类,创建Student类,充当了模型层M,Student.java
package cn.tedu.pojo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Arrays;
import java.util.Date;
//充当MVC模式里的M层model:封装数据
@Data //lombok自动提供get set toString hashCode equals
@NoArgsConstructor //无参构造
@AllArgsConstructor//全参构造
//@Accessors(chain = true) //链式编程
public class Student {
    private String name;
    private Integer age;
    private Integer sex;
    private String[] hobby; //保存了页面提供的多个爱好
    private Integer edu;
    /*
        时区问题,插入以下两个注解,注意格式
    */
    @DateTimeFormat(pattern = "yyyy-MM-dd")//接受前端传入的格式
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") //输出的格式,转换GMT+8时区
    private Date intime;
    //网页上的日期是string,注解用来转换格式,不然400错误
    //页面报400 IllegalArgumentException: String->Date
//
//    @Override
//    public String toString() {
//        return "Student{" +
//                "name='" + name + '\'' +
//                ", age=" + age +
//                ", sex=" + sex +
//                ", hobby=" + Arrays.toString(hobby) +
//                ", edu=" + edu +
//                ", intime=" + intime +
//                '}';
//    }
//
//    public String getName() {
//        return name;
//    }
//
//    public void setName(String name) {
//        this.name = name;
//    }
//
//    public Integer getAge() {
//        return age;
//    }
//
//    public void setAge(Integer age) {
//        this.age = age;
//    }
//
//    public Integer getSex() {
//        return sex;
//    }
//
//    public void setSex(Integer sex) {
//        this.sex = sex;
//    }
//
//    public String[] getHobby() {
//        return hobby;
//    }
//
//    public void setHobby(String[] hobby) {
//        this.hobby = hobby;
//    }
//
//    public Integer getEdu() {
//        return edu;
//    }
//
//    public void setEdu(Integer edu) {
//        this.edu = edu;
//    }
//
//
//
////    @DateTimeFormat(pattern="yyyy-MM-dd")
//    public Date getIntime() {
//        return intime;
//    }
////    @DateTimeFormat(pattern="yyyy-MM-dd")
//    public void setIntime(Date intime) {
//        this.intime = intime;
//    }
}
4.4)创建StudentController类,充当了控制层C,StudentController.java
package cn.tedu.controller;
import ch.qos.logback.core.db.dialect.HSQLDBDialect;
import cn.tedu.pojo.Student;
import com.sun.org.apache.xpath.internal.objects.XObject;
import org.springframework.scripting.bsh.BshScriptUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Arrays;

@RestController
@RequestMapping("/stu/")
@CrossOrigin//解决跨域问题
public class Controller {

    Connection conn;
    @RequestMapping("add")
    public Student add(Student s) throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");

        //2、利用jdbc入库,入库的数据从c获取
        String url = "jdbc:mysql:///cgb2105?characterEncoding=utf8" ;
        conn = DriverManager.getConnection(url, "root", "root");

        //3、获取传输器
        String sql = "insert into student values(?,?,?,?,?,?,?)";
        //?占位符,个数和表里的字段个数匹配,顺序和字序一致
        PreparedStatement ps = conn.prepareStatement(sql);

        //4、执行sql
        ps.setString(1,null);//把请求携带来的参数,拿到,给第1个?设置值
        ps.setString(2,s.getName());//把请求携带来的参数,拿到,给第2个?设置值
        ps.setInt(3, s.getAge());//把请求携带来的参数,拿到,给第3个?设置值
        ps.setString(4, selectss(s.getSex(), "sex"));//把请求携带来的参数,拿到,给第4个?设置值
        ps.setString(5, selectss(s.getHobby(),"hobby"));//把请求携带来的参数,拿到,给第5个?设置值
        ps.setString(6,selectss(s.getEdu(),"edu"));//把请求携带来的参数,拿到,给第5个?设置值
        SimpleDateFormat data = new SimpleDateFormat("yyyy-MM-dd");
        String s1 = data.format(s.getIntime());
        ps.setString(7, s1);//把请求携带来的参数,拿到,给第5个?设置值
        ps.executeUpdate();
        return s;
    }
/*
    //5、查询sql---重复代码
    private String  select(Integer int1,String name) throws Exception {
        String str1 ="";

        //获取查询传输器
        String sql1 = "select "+name +"name from "+ name + " where " +name + "id="+int1;
        System.out.println(sql1);
        PreparedStatement ps = conn.prepareStatement(sql1);
        ResultSet rs = ps.executeQuery();
        rs.next();
        String s = rs.getString(1);
        str1 = s;
        ps.close();
        rs.close();
        System.out.println(str1);
        return str1;
    }
    private String  selects(String[] str,String name) throws Exception {

        PreparedStatement ps1 =null;
        ResultSet rs1 = null;
        String str2="";
        //获取查询传输器
        for (int i=0;i<str.length;i++){
            String a = str[i];
            String sql2 = "select "+name +"name from "+ name + " where " +name + "id="+a;
            ps1 = conn.prepareStatement(sql2);
            rs1 = ps1.executeQuery();
            rs1.next();
            str2 += rs1.getString(1);

        }
        ps1.close();
        rs1.close();
        return str2;
    }
    
 */

    //5、查询sql存值
    private String  selectss(Object o,String name) throws Exception {
        String sql = null;
        String s = "";
        PreparedStatement ps =null;
        ResultSet rs  = null;
        if (o instanceof String[]){ //判断object对象是string[]类型
            String[] str = (String[])o; //是,向下造型,object向下转string[]类型
            for (int i=0;i<str.length;i++){
                String a = str[i];
                sql = "select "+name +"name from "+ name + " where " +name + "id="+a;
                ps = conn.prepareStatement(sql);
                rs = ps.executeQuery();
                rs.next();
                s += rs.getString(1)+",";
            }
        }else{
        Integer in1 = (Integer) o; //不是,向下造型,object向下转Integer类型
        sql = "select "+name +"name from "+ name + " where " +name + "id="+in1;
        ps = conn.prepareStatement(sql);
        rs = ps.executeQuery();
        rs.next();
        s= rs.getString(1);
        }
       
        //释放资源
        ps.close(); 
        rs.close();
        
        //返回值
        return s;
    }
}

4.5)测试

在这里插入图片描述
数据库中,有数据,就成功了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AimerDaniil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值