最终样式:
增:
删:
改:
项目结构:
- springboot1.5.9以下兼容jdk1.7
- springboot2.x.x版本兼容jdk1.8
- springboot3.0及以上版本兼容jdk17
- springboot2.1之后的版本已经兼容JDK11
pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.13</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bai</groupId> <artifactId>crudspringboot</artifactId> <version>0.0.1-SNAPSHOT</version> <name>crudspringboot</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <version>2.3.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- tomcat 依赖包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--<scope>provided</scope>--> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--<scope>provided</scope>--> </dependency> <!-- servlet 依赖包 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <!--<scope>provided</scope>--> </dependency> <!-- JSTL (JSP standard Tag Library) JSP 标准标签库 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties:
# 监听端口 server.port=8080 # Spring datasource配置 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/book?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 # 视图层的配置 spring.mvc.view.prefix=WEB-INF/views/ spring.mvc.view.suffix=.jsp #DispatcherServlet 的配置# 启动时 加载 spring.jersey.servlet.load-on-startup=1 # MyBatis的配置# Mapper文件的位置 * 所有 mybatis.mapper-locations=classpath:mapper/*.xml # Model 层的配置 包 mybatis.type-aliases-package=com.bai.crudspringboot.model
user.jap:
<%@ page isELIgnored="false" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <!-- 简体中文 --> <html lang="zh-cmn-Hans"> <head> <title>用户列表</title> </head> <body> <table border="1"> <tr> <td>ID</td> <td>Name</td> <td>Age</td> <td>删除</td> <td>修改</td> </tr> <c:forEach var="user" items="${users}"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.age}</td> <td><a href='javascript:userDel("${user.id}")'> 删除 </a></td> <td><a href="updateview?id=${user.id}"> 修改 </a></td> </tr> </c:forEach> </table> <br /> <br /> <a href="addview"> 新增用户 addview </a> <br /> <br /> <a href="addview2"> 新增用户2 addview2</a> </body> <script src="/asset/js/jquery-3.5.1.min.js"></script> <script type="text/javascript"> // JS 定义一个名为userDel的js方法,可传入参数id function userDel(id){ $.ajax({ // 请求方式 POST GET 与控制器的设置一致 type : "POST", // 访问控制器的url url : "delete", //往控制器传入的参数,JSON居多,String data : { "id" : id }, // 接收后台的数据类型 text json 和 控制器的 return 一致 dataType : "text", //请求成功时 success : function(message) { if (message == "ok"){ alert("删除成功"); location.href = "alluser"; } else { alert("删除失败"); } }, //请求失败时 error : function(message) { alert("删除失败"); } }); } </script> </html>
addview.jsp
<%@ page isELIgnored="false" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <!-- 简体中文 --> <html lang="zh-cmn-Hans"> <head> <title>新增用户</title> </head> <body> 新增用户 <form id="userInfo" method="post"> name: <input type="text" name="name" id="name"><br> age: <input type="text" name="age" id="age"><br> <input type="button" id="commit" value="提交"> </form> </body> <script src="/asset/js/jquery-3.5.1.min.js"></script> <script> $(function () { // # 之后的变量和 id="commit" 值一致 才可以绑定 $("#commit").click(function () { //id="name" 找到的 var name = $("#name").val(); var age = $("#age").val(); //debugger 调试使用 $.ajax({ type : "POST", url : "add", data : { "name" : name, "age" : age }, // 接收后台的数据类型 dataType : "text", // 请求成功 success : function(message) { if (message == "ok"){ alert("新增成功"); // 调用显示所有用户的控制器 location.href = "alluser"; } else { alert(message); } }, //请求失败 error : function(message) { alert("新增失败"); } }); }) }) </script> </html>
updateview.jsp
<%@ page isELIgnored="false" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> <!-- 简体中文 --> <html lang="zh-cmn-Hans"> <head> <title>修改用户</title> </head> <body> 修改用户 <form id="userInfo" method="post"> id: <input type="text" name="id" id="id" value="${user.id}" disabled="disabled"><br> name: <input type="text" name="name" id="name" value="${user.name}"><br> age: <input type="text" name="age" id="age" value="${user.age}"><br> <input type="button" id="commit" value="更新用户"> </form> </body> <script src="/asset/js/jquery-3.5.1.min.js"></script> <script> $(function () { $("#commit").click(function () { var id = $("#id").val(); var name = $("#name").val(); var age = $("#age").val(); $.ajax({ type : "POST", url : "update", data : { "id" : id, "name" : name, "age" : age }, // 接收后台的数据类型 dataType : "text", // 返回成功 success : function(message) { if (message == "ok"){ alert("修改成功"); // 调用显示所有用户的控制器 location.href = "alluser"; } else { alert(message); } }, //失败 error : function(message) { alert("修改请求失败"); } }); }) }) </script> </html>
User.java:
package com.bai.crudspringboot.model; // 和数据库的表设计、字段对应的 public class User { private String id; private String name; private int age; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
UserDao.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace 包名+接口名 --> <mapper namespace="com.bai.crudspringboot.dao.UserDao"> <resultMap id="UserMap" type="com.bai.crud_springboot.model.User"> <id column="id" javaType="String" property="id"/> <result column="name" javaType="String" property="name"/> <result column="age" jdbcType="INTEGER" property="age" /> </resultMap> <!-- id = 接口文件的 方法名 resultType 返回值类型 要与使用的对象一致 --> <select id="select" resultType="com.bai.crudspringboot.model.User"> SELECT * FROM user order by age </select> <!-- 增加用户 parameterType 传入的参数类型 因为MyBatis做了优化,以接口为准 #占位符 MySQL客户端的SQL语句 insert into `user` (`id`, `name`, `age`) values ('fa4f46','张三','23'); 需要改为 insert into `user` (`id`, `name`, `age`) values (#{id},#{name},#{age}); 'fa4f46' 改为 #{id} 特定的值 改为 #{id} 规范 #{类的变量名称} --> <insert id="addUser" parameterType="com.bai.crudspringboot.model.User" > insert into `user` (`id`, `name`, `age`) values (#{id},#{name},#{age}); </insert> <!-- 删除用户 --> <delete id="delUser" parameterType="com.bai.crudspringboot.model.User" > delete from user where id = #{id} </delete> <select id="selectById" resultType="com.bai.crudspringboot.model.User"> SELECT * FROM user where id = #{id} </select> <!-- 更新用户 --> <update id="updateUser" parameterType="com.bai.crudspringboot.model.User" > update user set id= #{id},name= #{name},age= #{age} where id = #{id} </update> </mapper>
UserDao.java:
package com.bai.crudspringboot.dao; import com.bai.crudspringboot.model.User; import java.util.List; public interface UserDao { // 方法名和 UserDao.xml select标签的select对应 List<User> select(); void addUser(User user); void delUser(String id); User selectById(String id); void updateUser(User user); }
UserService.java:
package com.bai.crudspringboot.service; import com.bai.crudspringboot.model.User; import java.util.List; // 用户服务层的接口 public interface UserService { List<User> get(); void insert(User user); void remove(String id); User getById(String id); void updateInfo(User user); }
UserServiceImpl.java:
package com.bai.crudspringboot.service.Impl; import com.bai.crudspringboot.dao.UserDao; import com.bai.crudspringboot.model.User; import com.bai.crudspringboot.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /* UserService 接口的实现 @Service 以当前类为模板创建一个对象放入Spring容器中 id:默认小驼峰 此时id 是 userServiceImpl */ @Service public class UserServiceImpl implements UserService { /* @Autowired 把 Dao层的 对象,从Spring中拿出来,注入到当前Bean中 */ @Autowired private UserDao userDao; @Override public List<User> get() { // 因为业务简单 复杂之后代码很多 List<User> users = userDao.select(); return users; } @Override public void insert(User user) { userDao.addUser(user); } @Override public void remove(String id) { userDao.delUser(id); } @Override public User getById(String id) { return userDao.selectById(id); } @Override public void updateInfo(User user) { userDao.updateUser(user); } }
UserController.java:
如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
package com.bai.crudspringboot.controller; import com.bai.crudspringboot.model.User; import com.bai.crudspringboot.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; 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.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.UUID; /* 以类UserController为模板 创建一个userController对象 存放到Spring容器中 */ @Controller public class UserController { /* @Autowired:在Spring容器中,找一个Bean,注入到当前Bean中 Bean:指定的id 小驼峰 备注:可单独使用 配对注解 @Qualifier 要求 userServiceImpl Bean注入到当前Bean中 备注:和@Autowired配合使用,服务层有多态时常用 */ @Autowired @Qualifier("userServiceImpl") private UserService userService; /* 显示用户列表 @RequestMapping 设置请求的参数 value 控制器名 method 请求方式 */ @RequestMapping(value = "/alluser", method = RequestMethod.GET) public ModelAndView alluser() { List<User> usersResult = userService.get(); ModelAndView mav = new ModelAndView(); // 视图的名字 .jsp不带 mav.setViewName("user"); //携带的数据,让试图去展示 mav.addObject("users", usersResult); return mav; } /* 第一种写法 跳入到新增用户的 jsp */ @RequestMapping(value = "/addview", method = RequestMethod.GET) public ModelAndView addview() { ModelAndView mav = new ModelAndView(); mav.setViewName("addview"); return mav; } /* 第二种写法 跳入到新增用户的 jsp 请求方式默认是 GET */ @RequestMapping(value = "addview2") public String addView2() { return "addview"; } /* 接收用户提交过来的用户信息 @ResponseBody = 应答 消息体 不在让此方法去视图解析题 而是 在请求过来的http的消息体中写入返回的值,给客户端(jsp页面、第三方、软件客户端等) 控制器 add 方法 add 必须一致吗?不是 一致是因为,方便、快捷、整洁 */ @ResponseBody @RequestMapping(value = "add", method = RequestMethod.POST) public String add(HttpServletRequest request, User user) { if (user.getAge() <0 || user.getAge() >200){ return "年龄不正确"; } // 生成一个 id String id = UUID.randomUUID().toString(); user.setId(id); //调用服务层方法增加一个用户 userService.insert(user); return "ok"; } /* 删除用户 只在方法上有此注解 @RequestMapping(value = "delete" 访问方式 域名:端口/delete 类和方法上有此注解 类 @RequestMapping(value = "/user" 方法 @RequestMapping(value = "/delete" 访问方式 域名:端口/user/delete */ @ResponseBody @RequestMapping(value = "delete", method = RequestMethod.POST) public String delete(HttpServletRequest request, String id) { /* 调用服务层方法 删除一个用户 此方法并不非常严谨,待改进 */ userService.remove(id); return "ok"; } //显示一个用户 @RequestMapping(value = "/updateview", method = RequestMethod.GET) public ModelAndView updateview(String id) { User userResult = userService.getById(id); ModelAndView mav = new ModelAndView(); mav.setViewName("updateview"); mav.addObject("user", userResult); return mav; } // 更新用户 @ResponseBody @RequestMapping(value = "update", method = RequestMethod.POST) public String update(HttpServletRequest request, User user) { //调用服务层方法 更新一个用户 userService.updateInfo(user); return "ok"; } }
CrudSpringBootApplication.java:
package com.bai.crudspringboot; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; //去扫描Dao层接口 @MapperScan("com.bai.crudspringboot.dao") @SpringBootApplication public class CrudspringbootApplication { public static void main(String[] args) { SpringApplication.run(CrudspringbootApplication.class, args); } }
访问网址:http://localhost:8080/alluser
标签:SpringBoot,改查,id,教学资料,user,org,import,public,name From: https://www.cnblogs.com/lysboke/p/17524822.html