因为篇幅过长的原因,这个是Java Spring Boot连接数据库的准备事项的后续,具体请点击左侧链接。
实体类(Entity)
Message.java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
//实体类标志
@Entity
//message是我的表名,name里面写你需要使用的表名
@Table(name="message")
public class Message {
//@Id一般写在主键的前面
//@GeneratedValue代表自增,GenerationType.IDENTITY只能在主键为Integer型时使用
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String number; //手机号
private String name; //姓名
private String classes; //班级
private String sex; //性别
private String province; //省
private String city; //市
private String town; //地
private String minute; //详细地址
private String hobby; //爱好
private String intro; //简介
//setter getter 此处省略
数据访问层(DAO)
MessageDAO.java
(注意:我在DAO模式里面写的一些方法,继承的接口里面也有,之所以写出来是为了方便查改)
import java.util.List;
//import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import com.example.demo.entity.Message;
public interface MessageDAO extends PagingAndSortingRepository<Message, Integer>,JpaSpecificationExecutor<Message> {
//如果使用表连接,需要继承—>(JpaRepository<Entity, ID>),否则ajax无法使用
//查询
@Query("from Message c order by c.id asc")
List<Message> findAll();
//查询单个id
public Message findByid(@Param("id")Integer id);
//唯一性
public List<Message> findByNumber(String number);
}
服务层(Service)
MessageService.java
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Service;
import com.example.demo.dao.MessageDAO;
import com.example.demo.entity.Message;
@Service
public class MessageService {
@Autowired
private MessageDAO messageDAO;
//查询全部
public List<Message> findAll(){
return messageDAO.findAll();
}
//添加
public void save(Message message) {
messageDAO.save(message);
}
//查询单个id
public Message findByid(@Param("id")Integer id) {
return messageDAO.findByid(id);
}
//删除
public void deleteById(int id) {
messageDAO.deleteById(id);
}
//唯一性
public List<Message> findByNumber(String messageNumber){
return messageDAO.findByNumber(messageNumber);
}
}
控制器(Controller)
MessageController.java
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.demo.entity.Message;
import com.example.demo.service.MessageService;
@Controller
@RequestMapping("message")
public class MessageController {
@Autowired
private MessageService messageService;
//测试
@RequestMapping(value="hello")
@ResponseBody
public String hello() {
return "Hello World";
}
//查询
@RequestMapping(value="index")
public String index(Model model) {
List<Message> data=messageService.findAll();
//向模板映射值
model.addAttribute("data",data);
return "pages/demo/message/index";
}
//添加
//表单
@RequestMapping("add")
public String add() {
return "pages/demo/message/add";
}
//提交
@RequestMapping(value="save")
public String save(HttpServletRequest request) {
String number=request.getParameter("number");
String name=request.getParameter("name");
String classes=request.getParameter("classes");
String sex=request.getParameter("sex");
String province=request.getParameter("province");
String city=request.getParameter("city");
String town=request.getParameter("town");
String minute=request.getParameter("minute");
//复选框字符串型
String[] hobby=request.getParameterValues("hobby");
String str="";
Integer len=hobby.length;
for (int i = 0; i < len; i++) {
str+=hobby[i]+" ";
}
String intro=request.getParameter("intro");
//二次验证,确保安全
Integer count=messageService.findByNumber(number).size();
if(count>0) {
return "手机号已存在";
}
if(number==null || number.equals("")) {
return "手机号不能为空";
}
Message message=new Message();
message.setNumber(number);
message.setName(name);
message.setClasses(classes);
message.setSex(sex);
message.setProvince(province);
message.setCity(city);
message.setTown(town);
message.setMinute(minute);
message.setHobby(str);
message.setIntro(intro);
messageService.save(message);
return "redirect:/message/index";
}
//修改
//查询单个id
@RequestMapping(value="findById/{id}")
public String findById(Model model,@PathVariable("id")Integer id) {
Message message=messageService.findByid(id);
model.addAttribute("message",message);
return "pages/demo/message/update";
}
//修改
@RequestMapping(value="update")
public String update(HttpServletRequest request) {
Integer id=Integer.parseInt(request.getParameter("id"));
String number=request.getParameter("number");
String name=request.getParameter("name");
String classes=request.getParameter("classes");
String sex=request.getParameter("sex");
String province=request.getParameter("province");
String city=request.getParameter("city");
String town=request.getParameter("town");
String minute=request.getParameter("minute");
//复选框字符串型
String[] hobby=request.getParameterValues("hobby");
String str="";
Integer len=hobby.length;
for (int i = 0; i < len; i++) {
str+=hobby[i]+" ";
}
String intro=request.getParameter("intro");
if(number==null || number.equals("")) {
return "手机号不能为空";
}
Message message=new Message();
message.setId(id);
message.setNumber(number);
message.setName(name);
message.setClasses(classes);
message.setSex(sex);
message.setProvince(province);
message.setCity(city);
message.setTown(town);
message.setMinute(minute);
message.setHobby(str);
message.setIntro(intro);
messageService.save(message);
return "redirect:/message/index";
}
//删除
@RequestMapping(value="deleteById/{id}")
public String deleteById(@PathVariable("id")Integer id) {
messageService.deleteById(id);
return "redirect:/message/index";
}
//地址————三级联动
@RequestMapping(value="area.js")
public String area() {
return "/js/area.js";
}
//地址————映射
@RequestMapping(value="select.js")
public String select() {
return "/js/select.js";
}
}
Html代码
查询与删除
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
*{margin: 0 auto;}
.box{width:1000px;margin: 0 auto;}
table{width:100%;background:pink;}
table,td{border:1px solid black;}
.button{padding-left:455px;}
li{list-style: none;margin-left: 10px;}
</style>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<div class="box">
<form method="post" action="/message/delete" th:object="${message}">
<table>
<td>手机号</td>
<td>姓名</td>
<td>班级</td>
<td>性别</td>
<td>地址</td>
<td>爱好</td>
<td>简介</td>
<td>操作</td>
</tr>
<tr th:each="message: ${data}">
<td th:text="${message.id}"></td>
<td th:text="${message.number}"></td>
<td th:text="${message.name}"></td>
<td th:text="${message.classes}"></td>
<td th:text="${message.sex}"></td>
<td th:text="${message.province}+${message.city}+${message.town}+${message.minute}"></td>
<td th:text="${message.hobby}"></td>
<td th:text="${message.intro}"></td>
<td><a th:href="@{'/message/findById/'+${message.id}}">修改</a>/<a th:href="@{'/message/deleteById/'+${message.id}}">删除</a></td>
</tr>
</table>
<a href="add" class="button"><input type="button" value="添加"></a><br>
</form>
</div>
</body>
</html>
下图是效果图
添加
add.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
*{margin: 0 auto;padding: 0;}
form{width: 300px;border: 1px solid black;}
textarea{height: 100px;width: 100px;resize: none;}
#submit{margin-left: 140px;}
#minute{border: 0px;border-bottom: 1px solid black;}
#intro{width:100px;height: 100px;}
</style>
<script src="/js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function check(){
var number=document.getElementById("number");
if(number.value == null || number.value == "" || number.value.length == 0){
alert("手机号不能为空");
number.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<form method="post" action="/message/save" >
姓名<input type="text" name="name" /><br>
手机号<input type="text" id="number" name="number" /><br>
班级<select name="classes">
<option>--请选择--</option>
<option value="JAVA">JAVA</option>
<option value="PHP">PHP</option>
<option value="前端">前端</option>
<option value="美工">美工</option>
</select><br>
性别<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女<br>
地址<div class="outer">
<select name="province" id="province">
<option value="请选择">请选择</option>
</select>
<select name="city" id="city">
<option value="请选择">请选择</option>
</select>
<select name="town" id="town">
<option value="请选择">请选择</option>
</select>
</div>
<script src="/js/area.js"></script>
<script src="/js/select.js"></script>
<input type="text" name="minute" id="minute" /><br>
爱好<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="羽毛球">羽毛球
<input type="checkbox" name="hobby" value="乒乓球">乒乓球<br>
个人简介<input type="text" name="intro" id="intro" /><br>
<input type="submit" name="submit" id="submit" onclick="return check()" value="提交">
</form>
</body>
</html>
下图是效果图(地址是用了一个插件,可以自己从网站上找一个)
修改
update.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
*{margin: 0 auto;padding: 0;}
form{width: 300px;border: 1px solid black;}
textarea{height: 100px;width: 100px;resize: none;}
#submit{margin-left: 120px;}
#minute{border: 0px;border-bottom: 1px solid black;}
#intro{width:100px;height: 100px;}
</style>
<script src="/js/jquery-3.4.1.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
function check(){
var id=document.getElementById("id");
var name=document.getElementById("name");
if(name.value == null || name.value == "" || name.value.length == 0){
alert("姓名不能为空");
name.focus();
return false;
}
return true;
}
</script>
</head>
<body>
<form method="post" action="/message/update" th:each="message:${message}">
姓名<input type="text" name="name" th:value="${message.name}" /><br>
手机号<input type="text" name="number" id="number" th:value="${message.number}" /><br>
班级<select name="classes">
<option value="请选择">请选择</option>
<option value="JAVA" th:selected="${message.classes eq 'JAVA'}">JAVA</option>
<option value="PHP" th:selected="${message.classes eq 'PHP'}">PHP</option>
<option value="前端" th:selected="${message.classes eq '前端'}">前端</option>
<option value="美工" th:selected="${message.classes eq '美工'}">美工</option>
</select><br>
性别<input type="radio" name="sex" value="男" checked>男
<input type="radio" name="sex" value="女" th:checked="${message.sex eq '女'}">女<br>
地址<div class="outer">
<select name="province" id="province">
<option value="请选择">请选择</option>
</select>
<select name="city" id="city">
<option value="请选择">请选择</option>
</select>
<select name="town" id="town">
<option value="请选择">请选择</option>
</select>
</div>
<script src="/js/area.js"></script>
<script src="/js/select.js"></script>
<input type="text" name="minute" id="minute" th:value="${message.minute}" /><br>
爱好<input type="checkbox" name="hobby" value="篮球" th:checked="${#strings.contains(message.hobby ,'篮球')}">篮球
<input type="checkbox" name="hobby" value="足球" th:checked="${#strings.contains(message.hobby ,'足球')}">足球
<input type="checkbox" name="hobby" value="羽毛球" th:checked="${#strings.contains(message.hobby ,'羽毛球')}">羽毛球
<input type="checkbox" name="hobby" value="乒乓球" th:checked="${#strings.contains(message.hobby ,'乒乓球')}">乒乓球<br>
个人简介<input type="text" name="intro" id="intro" th:value="${message.intro}" /><br>
<input type="hidden" name="id" th:value="${message.id}" />
<input name="submit" id="submit" type="submit" onclick="return check()" value="确认修改">
</form>
</body>
</html>
下图是效果图(这个地址的获取有点问题)
这就是普通的增删改查,他主要用到了thymeleaf 模板,谢谢观看。