案例: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)测试

数据库中,有数据,就成功了

5133

被折叠的 条评论
为什么被折叠?



