定制设计IDEA实现前端页面登录,注册、增、删、改、查操作-完整版

分层思想:   entity层:定制设计存放实体类      vo层:消息模型(定制设计定制设计重复使用的一些属性)   mapper层:接口(写方法的)      mapper.xml:MyBatis定制设计与数据库相关的一些内容   controller(web)层:      定制设计接收前端传回的参数      调用service层,返回结果      转发、响应结果(跳转页面)   service层:      定制设计业务逻辑判断,写方法的.   utils层:      工具类:定制设计写通用的方法、类。   test包:      测试类、测试方法(测试代码)   MyBatis-config.xml:      定制设计定制设计连接数据库的

pom.xml: 定制设计导入相关依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.hsd</groupId>
  6. <artifactId>Servlet_Maven</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>war</packaging>
  9. <name>Servlet_Maven Maven Webapp</name>
  10. <!-- FIXME change it to the project's website -->
  11. <url>http://www.example.com</url>
  12. <properties>
  13. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  14. <maven.compiler.source>1.7</maven.compiler.source>
  15. <maven.compiler.target>1.7</maven.compiler.target>
  16. </properties>
  17. <dependencies>
  18. <dependency>
  19. <groupId>com.fasterxml.jackson</groupId>
  20. <artifactId>jackson-datatype-json-org</artifactId>
  21. <version>1.8.0</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>jstl</groupId>
  25. <artifactId>jstl</artifactId>
  26. <version>1.2</version>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.mybatis</groupId>
  30. <artifactId>mybatis</artifactId>
  31. <version>3.5.5</version>
  32. </dependency>
  33. <dependency>
  34. <groupId>taglibs</groupId>
  35. <artifactId>standard</artifactId>
  36. <version>1.1.2</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>mysql</groupId>
  40. <artifactId>mysql-connector-java</artifactId>
  41. <version>5.1.34</version>
  42. </dependency>
  43. <!-- jsp-->
  44. <dependency>
  45. <groupId>javax.servlet.jsp</groupId>
  46. <artifactId>jsp-api</artifactId>
  47. <version>2.2</version>
  48. </dependency>
  49. <dependency>
  50. <groupId>javax.servlet</groupId>
  51. <artifactId>javax.servlet-api</artifactId>
  52. <version>3.1.0</version>
  53. </dependency>
  54. <dependency>
  55. <!--junit:封装类的jar包-->
  56. <groupId>junit</groupId>
  57. <artifactId>junit</artifactId>
  58. <version>4.11</version>
  59. <scope>test</scope>
  60. </dependency>
  61. </dependencies>
  62. <build>
  63. <!-- 定制设计将配置文件复制到编译目录中-->
  64. <resources>
  65. <resource>
  66. <!-- 定制设计所在的目录-->
  67. <directory>src/main/java</directory>
  68. <includes>
  69. <!-- .xml和.properties定制设计结尾的文件都会扫描到-->
  70. <include>**/*.properties</include>
  71. <include>**/*.xml</include>
  72. </includes>
  73. <filtering>true</filtering>
  74. </resource>
  75. </resources>
  76. <finalName>Servlet_Maven</finalName>
  77. <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
  78. <plugins>
  79. <plugin>
  80. <artifactId>maven-clean-plugin</artifactId>
  81. <version>3.1.0</version>
  82. </plugin>
  83. <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
  84. <plugin>
  85. <artifactId>maven-resources-plugin</artifactId>
  86. <version>3.0.2</version>
  87. </plugin>
  88. <plugin>
  89. <artifactId>maven-compiler-plugin</artifactId>
  90. <version>3.8.0</version>
  91. </plugin>
  92. <plugin>
  93. <artifactId>maven-surefire-plugin</artifactId>
  94. <version>2.22.1</version>
  95. </plugin>
  96. <plugin>
  97. <artifactId>maven-war-plugin</artifactId>
  98. <version>3.2.2</version>
  99. </plugin>
  100. <plugin>
  101. <artifactId>maven-install-plugin</artifactId>
  102. <version>2.5.2</version>
  103. </plugin>
  104. <plugin>
  105. <artifactId>maven-deploy-plugin</artifactId>
  106. <version>2.8.2</version>
  107. </plugin>
  108. </plugins>
  109. </pluginManagement>
  110. </build>
  111. </project>

MyBatis-config.xml: 连接数据库

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <!--properties定制设计标签配置的整个文件都可使用,定制设计在任何位置配置的值都定制设计可以引入进来-->
  7. <!--resource和url都可配置,定制设计但不能同时使用-->
  8. <!--<properties resource="Mysql.properties"/>-->
  9. <!-- <properties url="Mysql.properties"/>-->
  10. <!--定制设计扫描实体类-->
  11. <!-- <typeAliases>
  12. <package name="com.hsd.entity"/>
  13. &lt;!&ndash;<typeAliases alias="User" type="com.hsd.entity.User"/>&ndash;&gt;
  14. </typeAliases>-->
  15. <environments default="development">
  16. <environment id="development">
  17. <transactionManager type="JDBC"/>
  18. <dataSource type="POOLED">
  19. <property name="driver" value="com.mysql.jdbc.Driver"/>
  20. <!--定制设计我的数据库:h2022-->
  21. <property name="url" value="jdbc:mysql:///h2022?useSSL=false&amp;useServerPrepStmts=true"/>
  22. <!--定制设计我的数据库的名称和密码-->
  23. <property name="username" value="root"/>
  24. <property name="password" value="root"/>
  25. </dataSource>
  26. </environment>
  27. </environments>
  28. <!--mapper映射器-->
  29. <mappers>
  30. <!--1.定制设计映射文件一个一个扫描-->
  31. <!--<mapper resource="com.hsd.mapper.UserMapper"/>
  32. <mapper class="com.hsd.mapper.UserMapper"/>-->
  33. <!--2.扫描mapper,自动扫描mapper定制设计中的接口和xml-->
  34. <package name="com.hsd.mapper"/>
  35. </mappers>
  36. </configuration>

utils层: GetSessionUtil类:

  1. package com.hsd.utils;
  2. import org.apache.ibatis.io.Resources;
  3. import org.apache.ibatis.session.SqlSession;
  4. import org.apache.ibatis.session.SqlSessionFactory;
  5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. public class GetSessionUtil {
  9. public static SqlSession SqlSession(){
  10. InputStream inputStream=null;
  11. SqlSessionFactory sqlSessionFactory=null;
  12. SqlSession sqlSession=null;
  13. //获取MyBatis定制设计定制设计的配置文件
  14. try {
  15. String resources="MyBatis-config.xml";
  16. //定制设计通过输入流拿到MyBatis-config.xml的配置文件
  17. inputStream=Resources.getResourceAsStream(resources);
  18. //MyBatis定制设计通过读取配置文件信息,构造出sqlSessionFactory
  19. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  20. //获取sqlSession
  21. sqlSession=sqlSessionFactory.openSession();
  22. return sqlSession;
  23. }catch (IOException e){
  24. e.printStackTrace();
  25. return null;
  26. }
  27. }
  28. //定制设计测试配置环境无问题
  29. public static void main(String[] args) {
  30. System.out.println(SqlSession());
  31. }
  32. }

test包: UserTest类:

  1. package com.hsd.test;
  2. import com.hsd.entity.User;
  3. import com.hsd.mapper.UserMapper;
  4. import com.hsd.utils.GetSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. public class UserTest {
  7. public static void main(String[] args) {
  8. //获取sqlSession
  9. SqlSession sqlSession= GetSessionUtil.SqlSession();
  10. //获取mapper
  11. UserMapper mapper=sqlSession.getMapper(UserMapper.class);
  12. //调用mapper的方法
  13. User user = mapper.selectByUsername("aaa");
  14. //
  15. System.out.println(user);
  16. }
  17. }

登录:   1.定制设计数据库建表user   2.前端页面:user.jsp         登录表单:            (1)form表单,定制设计创建账号和密码的输入框            (2)定制设计将登陆按钮绑定点击事件            (3)定制设计获取用户名和密码的值            (4)定制设计定制设计判断账号是否为空               若为空,就提示“定制设计账号不能为空”(赋值给span标签)并return返回            (5)定制设计判断密码是否为空               若为空,就提示“定制设计密码不能为空”(赋值给span标签)并return返回            (6)定制设计若都不为空,提交表单,定制设计跳转到后端   3.后端代码:     (1)定制设计定制设计接收客户端请求(账号、密码)     (2)调用service定制设计定制设计中的登录方法     (3)定制设计定制设计判断账号是否存在         定制设计定制设计若账号不存在,就提示“定制设计定制设计用户账号不存在”,定制设计定制设计返回到登录页面继续登录。     (4)定制设计定制设计判断密码是否有误         定制设计定制设计若密码有误,就提示“定制设计定制设计用户密码有误”,返回到登录页面继续登录。     (5)定制设计若都没问题就跳转到首页     controller层:(接收请求、响应结果)        1、接收客户端请求(账号、密码)        2、调用service中的登录方法        3、定制设计判断是否登录成功,定制设计成功的话跳转到首页,定制设计失败的话继续登录     service层:(业务逻辑)        1、定制设计创建消息模型对象(状态、提示信息、回显数据)        2、判断账号是否存在          若账号不存在,就提示“用户账号不存在”,定制设计定制设计回显数据到消息模型对象中,定制设计返回消息模型对  象        3、判断密码是否有误          若密码有误,就提示“用户密码有误”,回显数据到消息模型对象中,定制设计返回消息模型对象        4、定制设计若无问题就将用户信息定制设计放到消息模型中     mapper层:        mapper接口:定制设计定义对应的接口        mapper.xml:写对应的sql语句     entity层:        vo层:消息模型(重复使用的一些属性,写在MessageModel类中)     student.jsp:首页 

1.user

  1. CREATE TABLE USER(
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. username VARCHAR(20),
  4. PASSWORD VARCHAR(20)
  5. );
  6. INSERT INTO USER(username,PASSWORD)VALUE
  7. ('admin','123');

 entity层:User类 

  1. package com.hsd.entity;
  2. public class User {
  3. private int id;
  4. private String username;
  5. private String password;
  6. public User() {
  7. }
  8. public User(int id, String username, String password) {
  9. this.id = id;
  10. this.username = username;
  11. this.password = password;
  12. }
  13. public int getId() {
  14. return id;
  15. }
  16. public void setId(int id) {
  17. this.id = id;
  18. }
  19. public String getUsername() {
  20. return username;
  21. }
  22. public void setUsername(String username) {
  23. this.username = username;
  24. }
  25. public String getPassword() {
  26. return password;
  27. }
  28. public void setPassword(String password) {
  29. this.password = password;
  30. }
  31. @Override
  32. public String toString() {
  33. return "User{" +
  34. "id=" + id +
  35. ", username='" + username + '\'' +
  36. ", password='" + password + '\'' +
  37. '}';
  38. }
  39. }

 entity层:Student类

  1. package com.hsd.entity;
  2. //定制设计学生实体类
  3. public class Student {
  4. private int id;//编号
  5. private String name;//姓名
  6. private int age;//年龄
  7. private String sex;//性别
  8. private String hobby;//爱好
  9. private String time;//日期
  10. public Student() {
  11. }
  12. public Student(int id, String name, int age, String sex, String hobby, String time) {
  13. this.id = id;
  14. this.name = name;
  15. this.age = age;
  16. this.sex = sex;
  17. this.hobby = hobby;
  18. this.time = time;
  19. }
  20. public int getId() {
  21. return id;
  22. }
  23. public void setId(int id) {
  24. this.id = id;
  25. }
  26. public String getName() {
  27. return name;
  28. }
  29. public void setName(String name) {
  30. this.name = name;
  31. }
  32. public int getAge() {
  33. return age;
  34. }
  35. public void setAge(int age) {
  36. this.age = age;
  37. }
  38. public String getSex() {
  39. return sex;
  40. }
  41. public void setSex(String sex) {
  42. this.sex = sex;
  43. }
  44. public String getHobby() {
  45. return hobby;
  46. }
  47. public void setHobby(String hobby) {
  48. this.hobby = hobby;
  49. }
  50. public String getTime() {
  51. return time;
  52. }
  53. public void setTime(String time) {
  54. this.time = time;
  55. }
  56. @Override
  57. public String toString() {
  58. return "Student{" +
  59. "id=" + id +
  60. ", name='" + name + '\'' +
  61. ", age=" + age +
  62. ", sex='" + sex + '\'' +
  63. ", hobby='" + hobby + '\'' +
  64. ", time='" + time + '\'' +
  65. '}';
  66. }
  67. }

 2.前端页面:user.jsp

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 30868
  4. Date: 2022/10/27
  5. Time: 16:55
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  9. <html>
  10. <head>
  11. <title>登录</title>
  12. </head>
  13. <body>
  14. <div style="text-align: center">
  15. <h1>登录页面</h1>
  16. <form action="UserServlet" method="get" id="userForm">
  17. 账号:<input type="text" name="username" id="username" value="${messageModel.object.username}"><br>
  18. 密码:<input type="password" name="password" id="password" value="${messageModel.object.password}"><br>
  19. <div style="color: red" id="div">${messageModel.msg}</div><br>
  20. <button type="button" id="but">登录</button>
  21. <button type="button"><a href="register.jsp" style="text-decoration: none">注册</a></button>
  22. </form>
  23. </div>
  24. </body>
  25. <%--加载jquery-3.4.1.js插件--%>
  26. <script src="js/jquery-3.4.1.js"></script>
  27. <script type="text/javascript">
  28. <%--通过id选择器,定制设计给登录按钮绑定一个点击事件--%>
  29. $("#but").click(function () {
  30. //通过id定制设计选择器获取账号和密码
  31. var username=$("#username").val();
  32. var password=$("#password").val();
  33. //定制设计判断用户名和密码是否为空,定制设计若为空返回true,定制设计不为空返回false
  34. function isEmpty(str) {
  35. if(str==null||str.trim()==""){
  36. return true;
  37. }
  38. return false;
  39. }
  40. //判断账号是否为空
  41. if(isEmpty(username)) {
  42. //定制设计若账号为空,定制设计提示并返回:
  43. $("#div").html("账号不能为空!")
  44. return;
  45. }if(isEmpty(password)){
  46. /* //若密码为空,提示并返回:*/
  47. $("#div").html("密码不能为空!")
  48. return;
  49. }
  50. $("#userForm").submit()
  51. });
  52. </script>
  53. </html>

 相关的MessageModel类:entity层:-->vo层-->消息模型:写入重复使用的一些属性。

  1. package com.hsd.entity.vo;
  2. public class MessageModel {
  3. private int code=1;//状态码(1:成功。0:失败。默认为1)
  4. private String msg="成功";//提示信息(成功和失败,默认成功,失败提示错误信息)
  5. private Object object;//回显对象(基本数据类型、引用数据类型、数组、集合)
  6. public MessageModel() {
  7. }
  8. public MessageModel(int code, String msg, Object object) {
  9. this.code = code;
  10. this.msg = msg;
  11. this.object = object;
  12. }
  13. public int getCode() {
  14. return code;
  15. }
  16. public void setCode(int code) {
  17. this.code = code;
  18. }
  19. public String getMsg() {
  20. return msg;
  21. }
  22. public void setMsg(String msg) {
  23. this.msg = msg;
  24. }
  25. public Object getObject() {
  26. return object;
  27. }
  28. public void setObject(Object object) {
  29. this.object = object;
  30. }
  31. }

 3.后端代码::UserServlet类

  1. package com.hsd.controller;
  2. import com.hsd.entity.vo.MessageModel;
  3. import com.hsd.service.UserService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. /*controller层:(接收请求、响应结果)
  11. 1、接收客户端请求(账号、密码)
  12. 2、调用service中的登录方法
  13. 3、判断是否登录成功,成功的话跳转到首页,失败的话继续登录*/
  14. @WebServlet("/UserServlet")
  15. public class UserServlet extends HttpServlet {
  16. @Override
  17. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  18. //获取UserService对象
  19. UserService userService=new UserService();
  20. // 1、接收客户端请求(账号、密码)
  21. String username=req.getParameter("username");
  22. String password=req.getParameter("password");
  23. //2、调用service中的登录方法
  24. MessageModel messageModel=userService.selectByUsername(username,password);
  25. //3、判断是否登录成功,成功的话跳转到首页,失败的话继续登录
  26. if(messageModel.getCode()==1){
  27. //成功,将消息模型存到req中,并重定向到首页
  28. //转发(req)
  29. req.getSession().setAttribute("messageModel",messageModel);
  30. //重定向(resp)
  31. //路径不加‘/’
  32. resp.sendRedirect("StudentServlet");
  33. }else{
  34. //失败,将消息模型存到req中,并转发到登录页面
  35. req.setAttribute("messageModel",messageModel);
  36. //路径加‘/’
  37. req.getRequestDispatcher("/user.jsp").forward(req,resp);
  38. }
  39. }
  40. }

service层:UserService类

  1. package com.hsd.service;
  2. import com.hsd.entity.User;
  3. import com.hsd.entity.vo.MessageModel;
  4. import com.hsd.mapper.UserMapper;
  5. import com.hsd.utils.GetSessionUtil;
  6. import org.apache.ibatis.session.SqlSession;
  7. /*1、创建消息模型对象(状态、提示信息、回显数据)
  8. 2、判断账号是否存在
  9. 若账号不存在,就提示“用户账号不存在”,回显数据到消息模型对象中,返回消息模型对象
  10. 3、判断密码是否有误
  11. 若密码有误,就提示“用户密码有误”,回显数据到消息模型对象中,返回消息模型对象
  12. 4、若无问题就将用户信息放到消息模型中*/
  13. public class UserService {
  14. public MessageModel selectByUsername(String username, String password) {
  15. //1、创建消息模型对象(状态、提示信息、回显数据)
  16. MessageModel messageModel=new MessageModel();
  17. //回显数据,当账号和密码输入错误时,不会自动清空账号和密码,仍保留。
  18. User u=new User();
  19. u.setUsername(username);
  20. u.setPassword(password);
  21. //将回显的数据放在回显对象中
  22. messageModel.setObject(u);
  23. //获取sqlSession对象
  24. SqlSession sqlSession= GetSessionUtil.SqlSession();
  25. //调用UserMapper的登录方法
  26. UserMapper mapper=sqlSession.getMapper(UserMapper.class);
  27. User user=mapper.selectByUsername(username);
  28. //2、判断账号是否存在
  29. if(user==null){
  30. //若账号不存在,就提示“用户账号不存在”,回显数据到消息模型对象中,返回消息模型对象
  31. messageModel.setCode(0);//修改状态为0
  32. messageModel.setMsg("该账号不存在");
  33. return messageModel;
  34. }
  35. //3、判断密码是否有误
  36. if(!password.equals(user.getPassword())){
  37. messageModel.setCode(0);//修改状态为0
  38. messageModel.setMsg("密码有误");
  39. return messageModel;
  40. }
  41. //4、若无问题就将用户信息放到消息模型中
  42. messageModel.setObject(user);
  43. //释放资源
  44. sqlSession.close();
  45. return messageModel;
  46. }
  47. /*service层:(业务逻辑)
  48. 1、创建消息模型对象(状态、提示信息、回显数据)
  49. 2、判断账号是否存在
  50. 若账号存在,就提示“用户账号已存在不能注册”,回显数据到消息模型对象中,返回消息模型对象
  51. 3、若无问题就将用户信息放到消息模型中*/
  52. public MessageModel Register(User user) {
  53. // 1、创建消息模型对象(状态、提示信息、回显数据)
  54. MessageModel messageModel = new MessageModel();
  55. //回显数据
  56. User u = new User();
  57. u.setUsername(user.getUsername());
  58. u.setPassword(user.getPassword());
  59. //将回显的数据存到数据模型中
  60. messageModel.setObject(u);
  61. //获取sqlSession
  62. SqlSession sqlSession = GetSessionUtil.SqlSession();
  63. //获取mapper
  64. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  65. //调用mapper中查找用户名的方法
  66. User user1 = mapper.selectByUsername(user.getUsername());
  67. //2、判断账号是否存在
  68. if(user1!=null){
  69. //若账号存在,就提示“用户账号已存在不能注册”,
  70. messageModel.setCode(0);//消息模型的状态修改为0
  71. messageModel.setMsg("该账号已存在不能注册");//提示信息
  72. return messageModel;//将错误的信息返回给messageModel
  73. }
  74. //不存在,3、若无问题就将用户信息放到消息模型中
  75. //调用mapper中的注册方法
  76. mapper.Register(user);
  77. messageModel.setObject(user);
  78. //提交事务:添加时需要提交,查询时不需要提交
  79. //将数据放到数据库时,需要提交事务;从数据库中取出数据时,不需要提交事务
  80. sqlSession.commit();
  81. return messageModel;
  82. //释放资源
  83. }
  84. }

mapper层:UserMapper

  1. package com.hsd.mapper;
  2. import com.hsd.entity.User;
  3. import org.apache.ibatis.annotations.Select;
  4. public interface UserMapper {
  5. //@Select("select * from user")
  6. User selectByUsername(String name);
  7. void Register(User user);
  8. }

 UserMapper.xml

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--namespace:命名空间,对应Mapper接口的路径-->
  6. <mapper namespace="com.hsd.mapper.UserMapper">
  7. <!--id(必写)对应Mapper接口中的方法名称,parameterType:接口中的方法的参数类型,resultType:实体类-->
  8. <select id="selectByUsername" parameterType="String" resultType="com.hsd.entity.User">
  9. select * from user where username=#{username};
  10. </select>
  11. <insert id="Register">
  12. insert into user value (null,#{username},#{password});
  13. </insert>
  14. </mapper>

 设置xml:File-->Settings-->Editor-->Code Style-->File and Code Templates:点击'+'号,设置:Name:Mapper,Extension:xml-->Apply-->OK

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="">
  6. </mapper>

 

 注册:

1.前端页面register.jsp 注册表单:

(1)form表单,账号、密码、重复密码和注册的按钮

(2)将注册按钮绑定点击事件

(3)获取账号、密码、重复密码的值

(4)判断账号是否为空 若为空,就提示“账号不能为空”(赋值给div标签)并return返回 (5)判断密码是否为空 若为空,就提示“密码不能为空”(赋值给div标签)并return返回 (6)判断重复密码是否为空 若为空,就提示“重复密码不能为空”(赋值给div标签)并return返回

(7)判断密码和重复密码是否一致

(8)判断密码长度是否符合要求(>3&&<6)

(9)提交表单

2.后端代码:

(1)接收客户端请求(账号、密码)

(2)把接收的数据封装到实体类

(3)调用service中的注册方法

(4)判断账号是否存在 若账号存在,就提示“用户账号已存在不能注册”,返回到注册页面继续注册。

(5)若该账号不存在,就跳转到登录页面

controller层:(接收请求、响应结果)

1、接收客户端请求(账号、密码)

2、把接收的数据封装到实体类

3、调用service中的注册方法

4、判断是否注册成功,成功的话跳转到登录页面,失败的话继续注册

service层:(业务逻辑)

1、创建消息模型对象(状态、提示信息、回显数据)

2、判断账号是否存在 若账号存在,就提示“用户账号已存在不能注册”,回显数据到消息模型对象中,返回消息模型对象

3、若无问题就将用户信息放到消息模型中

mapper层:

1、mapper接口:定义对应的接口

2、mapper.xml:写对应的sql语句

  1.前端页面register.jsp:

里面用到了jQuery:

jQuery 是一个 JavaScript 库,里面存在大量的JavaScript函数

jQuery 极大地简化了 JavaScript 编程

jQuery 的获取:官网

  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 30868
  4. Date: 2022/10/28
  5. Time: 10:30
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  9. <html>
  10. <head>
  11. <title>Title</title>
  12. </head>
  13. <body>
  14. <span style="text-align: center">
  15. <h1>注册页面</h1>
  16. <form action="RegisterServlet" method="get" id="registerForm">
  17. 账号:<input type="text" name="username" id="username" value="${messageModel.object.username}"><br>
  18. 密码:<input type="password" name="password" id="password" value="${messageModel.object.password}"><br>
  19. 重复密码:<input type="password" name="password2" id="password2"><br>
  20. <div style="color: red" id="div">${messageModel.msg}</div><br>
  21. <button type="button" id="but">注册</button>
  22. <button type="button"><a href="user.jsp" style="text-decoration: none">登录</a></button>
  23. </form>
  24. </span>
  25. </body>
  26. <script src="js/jquery-3.4.1.js"></script>
  27. <script type="text/javascript">
  28. /*通过id选择器获取注册的按钮,给注册按钮绑定点击事件*/
  29. $("#but").click(function () {
  30. //获取账号、密码、重复密码的值
  31. var username=$("#username").val();
  32. var password=$("#password").val();
  33. var password2=$("#password2").val();
  34. //判断是否为空
  35. function isEmpty(str){
  36. if(str==null||str.trim()==""){
  37. return true;
  38. }
  39. return false;
  40. }
  41. if(isEmpty(username)){
  42. $("#div").html("账号不能为空")
  43. return;
  44. }
  45. if(isEmpty(password)){
  46. $("#div").html("密码不能为空")
  47. return;
  48. }
  49. if(isEmpty(password2)){
  50. $("#div").html("重复密码不能为空")
  51. return;
  52. }
  53. //判断密码和重复密码是否一致
  54. if(password!=password2){
  55. $("#div").html("密码不一致")
  56. return;
  57. }
  58. //判断密码长度是否符合要求(>3&&<6)
  59. if(username.length<3||username.length>6){
  60. $("#div").html("账号长度不能小于3位,也不能大于6位")
  61. return;
  62. }
  63. //提交表单
  64. $("#registerForm").submit();
  65. });
  66. </script>
  67. </html>

 2.后端代码:controller层:RegisterServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.User;
  3. import com.hsd.entity.vo.MessageModel;
  4. import com.hsd.service.UserService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. @WebServlet("/RegisterServlet")
  12. public class RegisterServlet extends HttpServlet {
  13. @Override
  14. /*controller层:(接收请求、响应结果)
  15. 1、接收客户端请求(账号、密码)
  16. 2、把接收的数据封装到实体类
  17. 3、调用service中的注册方法
  18. 4、判断是否注册成功,成功的话跳转到登录页面,失败的话继续注册*/
  19. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  20. //获取userService对象
  21. UserService userService = new UserService();
  22. // 1、接收客户端请求(账号、密码)
  23. String username=req.getParameter("username");
  24. String password=req.getParameter("password");
  25. //2、把接收的数据封装到实体类
  26. User user=new User();
  27. user.setUsername(username);
  28. user.setPassword(password);
  29. //3、调用service中的注册方法
  30. MessageModel messageModel=userService.Register(user);
  31. //4、判断是否注册成功,成功的话跳转到登录页面,失败的话继续注册
  32. if(messageModel.getCode()==1){
  33. //成功,将消息模型存到req中,并重定向到登录页面
  34. req.setAttribute("messageModel",messageModel);
  35. resp.sendRedirect("user.jsp");
  36. }else {
  37. //失败,将消息模型存到req中,并转发到注册页面
  38. req.setAttribute("messageModel",messageModel);
  39. req.getRequestDispatcher("/register.jsp").forward(req,resp);
  40. }
  41. }
  42. }

 student.jsp:首页

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%--
  3. Created by IntelliJ IDEA.
  4. User: 30868
  5. Date: 2022/10/28
  6. Time: 8:44
  7. To change this template use File | Settings | File Templates.
  8. --%>
  9. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  10. <html>
  11. <head>
  12. <title>展示页面</title>
  13. </head>
  14. <body>
  15. <center>
  16. <h1>展示页面</h1>
  17. <h2>欢迎${messageModel.object.username}登录成功!</h2>
  18. <a href="add.jsp">添加</a>
  19. <table border="1px" cellspacing="0">
  20. <tr>
  21. <%--th:加粗居中--%>
  22. <th>选项</th>
  23. <th>编号</th>
  24. <th>姓名</th>
  25. <th>年龄</th>
  26. <th>性别</th>
  27. <th>爱好</th>
  28. <th>日期</th>
  29. <th>操作</th>
  30. </tr>
  31. <%--c:forEach :循环--%>
  32. <c:forEach items="${list}" var="l">
  33. <tr>
  34. <td>
  35. <input type="checkbox" name="option" value="${l.id}">
  36. </td>
  37. <td>${l.id}</td>
  38. <td>${l.name}</td>
  39. <td>${l.age}</td>
  40. <td>
  41. <c:if test="${l.sex==1}">
  42. </c:if>
  43. <c:if test="${l.sex!=1}">
  44. </c:if>
  45. </td>
  46. <td>${l.hobby}</td>
  47. <td>${l.time}</td>
  48. <td>
  49. <%--修改根据id--%>
  50. <a href="selectByIdServlet?id=${l.id}">修改</a>
  51. <%--删除根据id--%>
  52. <a href="deleteByIdServlet?id=${l.id}">删除</a>
  53. </td>
  54. </tr>
  55. </c:forEach>
  56. </table>
  57. <input type="submit" value="全选" onclick="checkAll()">
  58. <input type="submit" value="全不选" onclick="checkNoAll()">
  59. </center>
  60. </body>
  61. <script type="text/javascript">
  62. /*在js中获取点击框*/
  63. var option=document.getElementsByName("option");
  64. //全选
  65. function checkAll() {
  66. for (let i = 0; i < option.length; i++) {
  67. option[i].checked=true;
  68. }
  69. }
  70. function checkNoAll() {
  71. for (let i = 0; i < option.length; i++) {
  72. option[i].checked=false;
  73. }
  74. }
  75. </script>
  76. </html>

StudentServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.List;
  11. @WebServlet("/StudentServlet")
  12. public class StudentServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取StudentService对象
  16. StudentService studentService = new StudentService();
  17. //调用Service层的selectAll方法
  18. List<Student> list=studentService.selectAll();
  19. //将拿到的数据存到req域中
  20. req.setAttribute("list",list);
  21. //转发到student.jsp展示页面
  22. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  23. }
  24. }

 service层:StudentService类: 

  1. package com.hsd.service;
  2. import com.hsd.entity.Student;
  3. import com.hsd.mapper.StudentMapper;
  4. import com.hsd.utils.GetSessionUtil;
  5. import org.apache.ibatis.session.SqlSession;
  6. import java.util.List;
  7. public class StudentService {
  8. //获取工具类中的SqlSession对象
  9. SqlSession sqlSession= GetSessionUtil.SqlSession();
  10. //获取Mapper
  11. StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
  12. public List<Student> selectAll() {
  13. //获取mapper接口中查看所有的方法
  14. List<Student> list=mapper.selectAll();
  15. //释放资源
  16. sqlSession.close();
  17. //返回到Servlet
  18. return list;
  19. }
  20. public void addServlet(Student student) {
  21. //获取mapper中添加的方法
  22. mapper.addServlet(student);
  23. //提交事务
  24. sqlSession.commit();
  25. //释放资源
  26. sqlSession.close();
  27. }
  28. public void deleteById(int id) {
  29. //获取mapper中删除的方法
  30. mapper.deleteById(id);
  31. //提交事务
  32. sqlSession.commit();
  33. sqlSession.close();
  34. }
  35. public Student selectById(int id) {
  36. //获取mapper中根据id查找的方法
  37. Student student=mapper.selectById(id);
  38. sqlSession.close();
  39. return student;
  40. }
  41. public void update(Student student) {
  42. //获取mapper中的修改方法
  43. mapper.update(student);
  44. //提交事务
  45. sqlSession.commit();
  46. sqlSession.close();
  47. }
  48. }

mapper层: 

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. }

 StudentMapper.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.hsd.mapper.StudentMapper">
  6. <select id="selectAll" resultType="com.hsd.entity.Student">
  7. select * from student;
  8. </select>
  9. <insert id="addServlet">
  10. insert into student value (null,#{name},#{age},#{sex},#{hobby},#{time});
  11. </insert>
  12. <delete id="deleteById">
  13. delete from student where id=#{id};
  14. </delete>
  15. <select id="selectById" resultType="com.hsd.entity.Student">
  16. select * from student where id=#{id};
  17. </select>
  18. <update id="update">
  19. update student set name=#{name},age=#{age},sex=#{sex},hobby=#{hobby},time=#{time} where id=#{id};
  20. </update>
  21. </mapper>

添加:     1.前端页面add.jsp     2.后端代码:       (1)接收客户端请求(添加的数据)       (2)把接收的数据封装到实体类       (3)调用service中的添加方法       (4)添加完毕后返回首页。          controller层:(接收请求、响应结果)           1、接收客户端请求(添加的数据)           2、把接收的数据封装到实体类           3、调用service中的添加方法           4、添加成功的话跳转到首页          service层:(业务逻辑)           1、获取工具类中的SqlSession对象           2、获取Mapper           3、获取mapper中添加的方法           mapper层:            mapper接口:定义对应的接口            mapper.xml:写对应的sql语句
1.前端页面add.jsp:
  1. <%--
  2. Created by IntelliJ IDEA.
  3. User: 30868
  4. Date: 2022/10/29
  5. Time: 8:54
  6. To change this template use File | Settings | File Templates.
  7. --%>
  8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  9. <html>
  10. <head>
  11. <title>添加页面</title>
  12. </head>
  13. <body>
  14. <form action="AddServlet" method="get">
  15. 姓名:<input type="text" name="name"><br>
  16. 年龄:<input type="text" name="age"><br>
  17. 性别:<input type="radio" name="sex" value="1">男
  18. <input type="radio" name="sex" value="0">女<br>
  19. 爱好:<input type="checkbox" name="hobby" value="吃">吃
  20. <input type="checkbox" name="hobby" value="喝">喝
  21. <input type="checkbox" name="hobby" value="玩">玩
  22. <input type="checkbox" name="hobby" value="乐">乐<br>
  23. 日期:<input type="date" name="time"><br>
  24. <input type="reset" value="重置"><br>
  25. <input type="submit" value="添加"><br>
  26. </form>
  27. </body>
  28. </html>

 controller层:AddServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.Arrays;
  11. @WebServlet("/AddServlet")
  12. public class AddServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取StudentService
  16. StudentService studentService = new StudentService();
  17. String name=req.getParameter("name");
  18. String age=req.getParameter("age");
  19. String sex=req.getParameter("sex");
  20. //多选框实现添加用数组
  21. String[] hobby=req.getParameterValues("hobby");
  22. String time=req.getParameter("time");
  23. //将获取到的数据封装到对应的实体类中
  24. //Student student = new Student(Integer.parseInt(null),name,Integer.parseInt(age),sex,hobby,time);
  25. Student student = new Student();
  26. student.setName(name);
  27. student.setAge(Integer.parseInt(age));
  28. student.setSex(sex);
  29. student.setHobby(Arrays.toString(hobby));
  30. student.setTime(time);
  31. //调用StudentService中的添加方法,将添加的数据传回去,添加不需要返回值
  32. studentService.addServlet(student);
  33. //转发到首页
  34. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  35. }
  36. }
service层:在StudentService中写入添加方法。
mapper层:在StudentMapper中写入添加方法,在StudentMapper.xml中写入添加的sql语句。
删除:      后端代码:       (1)创建studentService对象       (2)接收客户端请求(根据id删除)       (3)删除后返回首页          controller层:(接收请求、响应结果)           1、接收客户端请求(根据id删除)           2、调用service中的删除方法           3、删除成功的话跳转到首页          service层:(业务逻辑)           1、获取工具类中的SqlSession对象           2、获取Mapper           3、获取mapper中删除的方法           mapper层:            mapper接口:定义对应的接口            mapper.xml:写对应的sql语句

 deleteByIdServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.service.StudentService;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/deleteByIdServlet")
  10. public class deleteByIdServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. //创建studentService对象
  14. StudentService studentService = new StudentService();
  15. //获取id,根据id删除
  16. String id=req.getParameter("id");
  17. //删除不需要返回值
  18. studentService.deleteById(Integer.parseInt(id));
  19. //删除后返回首页
  20. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  21. }
  22. }

 service层:在StudentService中写入根据id查找和删除的方法。

mapper层:在StudentMapper中写入根据id查找的方法和删除的方法,在StudentMapper.xml中写入根据id查找和删除的sql语句。

修改:     1.前端页面update.jsp:        进行数据回显     2.后端代码:       获取要修改的数据:       (1)获取studentService类中的获取id的方法       (2)将数据存到req域中,通过setAttribute发送给回显页面,方便回显数据       (3)若找到数据,跳转到修改页面,进行回显       对获取的数据进行修改       (1)接收修改后的数据       (2)把修改后的数据封装到实体类student中       (3)调用studentService类中的修改方法       (4)修改后跳转到主页面          controller层:(接收请求、响应结果)           1、接收客户端请求(根据id修改)           2、调用service中的修改方法           3、修改成功的话跳转到首页          service层:(业务逻辑)           1、获取工具类中的SqlSession对象           2、获取Mapper           3、获取mapper中修改的方法           mapper层:            mapper接口:定义对应的接口            mapper.xml:写对应的sql语句

 1.前端页面update.jsp:

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  3. <%--
  4. Created by IntelliJ IDEA.
  5. User: 30868
  6. Date: 2022/10/29
  7. Time: 14:37
  8. To change this template use File | Settings | File Templates.
  9. --%>
  10. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  11. <html>
  12. <head>
  13. <title>修改页面</title>
  14. </head>
  15. <body>
  16. <form action="UpdateServlet" method="get">
  17. 编号:<input type="text" name="id" value="${s.id}"><br>
  18. 姓名:<input type="text" name="name" value="${s.name}"><br>
  19. 年龄:<input type="text" name="age" value="${s.age}"><br>
  20. 性别:<input type="radio" name="sex" value="1" <c:if test="${s.sex==1}"></c:if> checked="checked">男
  21. <input type="radio" name="sex" value="0" <c:if test="${s.sex==0}"></c:if> checked="checked">女<br>
  22. 爱好:<input type="checkbox" name="hobby" value="吃" <c:if test="${fn:contains(s.hobby,'吃' )}">checked="checked"</c:if>>吃
  23. <input type="checkbox" name="hobby" value="喝" <c:if test="${fn:contains(s.hobby,'喝' )}">checked="checked"</c:if>>喝
  24. <input type="checkbox" name="hobby" value="玩" <c:if test="${fn:contains(s.hobby,'玩' )}">checked="checked"</c:if>>玩
  25. <input type="checkbox" name="hobby" value="乐" <c:if test="${fn:contains(s.hobby,'乐' )}">checked="checked"</c:if>>乐<br>
  26. 日期:<input type="date" name="time" value="${s.time}"><br>
  27. <input type="reset" value="重置"><br>
  28. <input type="submit" value="修改"><br>
  29. </form>
  30. </body>
  31. </html>

 2.后端代码:controller层:selectByIdServlet类:修改时,先根据id回显。

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. @WebServlet("/selectByIdServlet")
  11. public class selectByIdServlet extends HttpServlet {
  12. @Override
  13. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14. //获取studentService对象
  15. StudentService studentService = new StudentService();
  16. //获取id
  17. String id = req.getParameter("id");
  18. //获取studentService类中的获取id的方法
  19. Student student=studentService.selectById(Integer.parseInt(id));
  20. //将数据存到req域中,通过setAttribute发送给回显页面,方便回显数据
  21. req.setAttribute("s",student);
  22. //若找到数据,跳转到修改页面,进行回显
  23. req.getRequestDispatcher("update.jsp").forward(req,resp);
  24. }
  25. }

UpdateServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.Arrays;
  11. @WebServlet("/UpdateServlet")
  12. public class UpdateServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取studentService对象
  16. StudentService studentService = new StudentService();
  17. //接收修改后的数据
  18. String id = req.getParameter("id");
  19. String name = req.getParameter("name");
  20. String age = req.getParameter("age");
  21. String sex = req.getParameter("sex");
  22. //多选框用数组类型接收数据
  23. String[] hobby = req.getParameterValues("hobby");
  24. String time = req.getParameter("time");
  25. //把修改后的数据封装到实体类student中
  26. Student student = new Student();
  27. student.setId(Integer.parseInt(id));
  28. student.setName(name);
  29. student.setAge(Integer.parseInt(age));
  30. student.setSex(sex);
  31. //将数组类型转换为String
  32. student.setHobby(Arrays.toString(hobby));
  33. student.setTime(time);
  34. //调用studentService类中的修改方法,修改不需要返回值
  35. studentService.update(student);
  36. //修改后跳转到主页面
  37. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  38. }
  39. }

 service层:在StudentService中写入根据id修改的方法。

mapper层:在StudentMapper中写入根据id修改的方法,在StudentMapper.xml中写入根据id修改的sql语句。

页面效果:

 

 

功能完善 

1、选中删除功能

2、根据姓名查询功能

3、根据年龄区间查询功能

:student.jsp页面:

  1. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  2. <%--
  3. Created by IntelliJ IDEA.
  4. User: 30868
  5. Date: 2022/10/28
  6. Time: 8:44
  7. To change this template use File | Settings | File Templates.
  8. --%>
  9. <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
  10. <html>
  11. <head>
  12. <title>展示页面</title>
  13. </head>
  14. <body>
  15. <center>
  16. <h1>展示页面</h1>
  17. <h2>欢迎${messageModel.object.username}登录成功!</h2>
  18. <a href="add.jsp">添加</a>
  19. <form action="SelectByNameServlet" method="get">
  20. 根据姓名查询:<input type="text" name="name" value="${s.name}">
  21. <input type="submit" value="查询">
  22. </form>
  23. <form action="SelectByAgeServlet" method="get">
  24. 根据年龄区间查询:<input type="text" name="age1" value="${s.age1}">---<input type="text" name="age2" value="${s.age2}">
  25. <input type="submit" value="查询">
  26. </form>
  27. <table border="1px" cellspacing="0">
  28. <tr>
  29. <%--th:加粗居中--%>
  30. <th>选项</th>
  31. <th>编号</th>
  32. <th>姓名</th>
  33. <th>年龄</th>
  34. <th>性别</th>
  35. <th>爱好</th>
  36. <th>日期</th>
  37. <th>操作</th>
  38. </tr>
  39. <%--c:forEach :循环--%>
  40. <c:forEach items="${list}" var="l">
  41. <tr>
  42. <td>
  43. <input type="checkbox" name="option" value="${l.id}">
  44. </td>
  45. <td>${l.id}</td>
  46. <td>${l.name}</td>
  47. <td>${l.age}</td>
  48. <td>
  49. <c:if test="${l.sex==1}">
  50. </c:if>
  51. <c:if test="${l.sex!=1}">
  52. </c:if>
  53. </td>
  54. <td>${l.hobby}</td>
  55. <td>${l.time}</td>
  56. <td>
  57. <%--修改根据id--%>
  58. <a href="selectByIdServlet?id=${l.id}">修改</a>
  59. <%--删除根据id--%>
  60. <a href="deleteByIdServlet?id=${l.id}">删除</a>
  61. </td>
  62. </tr>
  63. </c:forEach>
  64. </table>
  65. <input type="submit" value="全选" onclick="checkAll()">
  66. <input type="submit" value="全不选" onclick="checkNoAll()">
  67. <input type="submit" value="选中删除" onclick="XDelete()">
  68. </center>
  69. </body>
  70. <script type="text/javascript">
  71. /*在js中获取点击框*/
  72. var option=document.getElementsByName("option");
  73. //全选
  74. function checkAll() {
  75. for (let i = 0; i < option.length; i++) {
  76. option[i].checked=true;
  77. }
  78. }
  79. //全不选
  80. function checkNoAll() {
  81. for (let i = 0; i < option.length; i++) {
  82. option[i].checked=false;
  83. }
  84. }
  85. //选中删除
  86. function XDelete() {
  87. //定义一个id变量,初始化值为null,用来存储选中的数据
  88. var id="";
  89. //循环多选框
  90. for (let i = 0; i < option.length; i++) {
  91. if(option[i].checked==true)
  92. {
  93. //选中的id赋值给id变量,用逗号分隔开
  94. id=id+option[i].value+","
  95. }
  96. }
  97. location.href="XDeleteServlet?id="+id;
  98. }
  99. </script>
  100. </html>

1、选中删除功能 

controller层:XDeleteServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.service.StudentService;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/XDeleteServlet")
  10. public class XDeleteServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. //创建StudentService对象
  14. StudentService studentService = new StudentService();
  15. //接收页面发送过来的id
  16. String ids=req.getParameter("id");
  17. //查看是否可以获得选中的id
  18. System.out.println(ids);
  19. //调用service中的方法
  20. studentService.xDelete(ids);
  21. //删除成功后返回首页
  22. req.getRequestDispatcher("StudentServlet").forward(req,resp);
  23. }
  24. }

 service层:StudentService类中添加方法:

  1. public void xDelete(String ids){
  2. //查看是否可以获得选中的id
  3. System.out.println(ids);
  4. //字符串分割
  5. String[] split = ids.split(",");
  6. //循环删除,将分割后的id进行循环(选中多条)
  7. for (String id : split) {
  8. //调用mapper中的接口
  9. mapper.xDelete(Integer.parseInt(id));
  10. }
  11. //提交事务
  12. sqlSession.commit();
  13. sqlSession.close();
  14. }

 mapper层:在StudentMapper接口类和xml中添加方法

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. void xDelete(int id);
  12. }
  1. <delete id="xDelete">
  2. delete from student where id = #{id}
  3. </delete>

页面效果:选中id为12,14的删除

 

 2、根据姓名查询功能

 controller层:SelectByNameServlet类

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.List;
  11. @WebServlet("/SelectByNameServlet")
  12. public class SelectByNameServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //获取StudentService对象
  16. StudentService studentService = new StudentService();
  17. //获取页面中的name值
  18. String name = req.getParameter("name");
  19. //查看是否获取页面输入的name
  20. //System.out.println(name);
  21. Student student=new Student();
  22. student.setName(name);
  23. //调用selectByName方法
  24. List<Student> list=studentService.selectByName(student);
  25. //将拿到的数据添加到req中
  26. req.setAttribute("list",list);
  27. //通过Session将查找的数据转发到页面
  28. req.setAttribute("s",student);
  29. //转发到展示页面
  30. req.getRequestDispatcher("student.jsp").forward(req,resp);
  31. }
  32. }

 service层:StudentService类中添加方法: 

  1. public List<Student> selectByName(Student student) {
  2. //调用mapper中的方法
  3. List<Student> list=mapper.selectByName(student);
  4. //提交事务
  5. sqlSession.commit();
  6. sqlSession.close();
  7. return list;
  8. }

  mapper层:在StudentMapper接口类和xml中添加方法

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. void xDelete(int id);
  12. List<Student> selectByName(Student student);
  13. List<Student> selectByAge(Student student);
  14. }

 根据姓名模糊查询:

  1. <select id="selectByName" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.Student">
  2. select * from student where name like concat('%',#{name},'%')
  3. </select>

页面效果:查询名字含‘三’的所有有关信息 

 

3、根据年龄区间查询功能 

 controller层:SelectByAgeServlet类 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.service.StudentService;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.List;
  11. @WebServlet("/SelectByAgeServlet")
  12. public class SelectByAgeServlet extends HttpServlet {
  13. @Override
  14. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  15. //
  16. StudentService studentService = new StudentService();
  17. //
  18. String age1=req.getParameter("age1");
  19. String age2=req.getParameter("age2");
  20. //
  21. Student student = new Student();
  22. student.setAge1(Integer.parseInt(age1));
  23. student.setAge2(Integer.parseInt(age2));
  24. //
  25. //
  26. List<Student> list=studentService.selectByAge(student);
  27. //将拿到的数据添加到req中,返回值写list的原因是把数据返回
  28. req.setAttribute("list",list);
  29. req.setAttribute("s",student);
  30. //
  31. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  32. }
  33. }

 service层:StudentService类中添加方法:  

  1. public List<Student> selectByAge(Student student) {
  2. //调用mapper中的方法
  3. List<Student> list=mapper.selectByAge(student);
  4. //提交事务
  5. sqlSession.commit();
  6. sqlSession.close();
  7. return list;
  8. }

   mapper层:在StudentMapper接口类和xml中添加方法

  1. package com.hsd.mapper;
  2. import com.hsd.entity.Student;
  3. import java.util.List;
  4. public interface StudentMapper {
  5. //查看所有
  6. List<Student> selectAll();
  7. void addServlet(Student student);
  8. void deleteById(int id);
  9. Student selectById(int id);
  10. void update(Student student);
  11. void xDelete(int id);
  12. List<Student> selectByName(Student student);
  13. List<Student> selectByAge(Student student);
  14. }

 根据年龄区间查询:

  1. <select id="selectByAge" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.Student">
  2. select * from student
  3. /*循环判断,where标签在MyBatis中是循环*/
  4. /*if标签在MyBatis中是判断*/
  5. <where>
  6. /*在MyBatis中,在where循环中使用and的前提,必须是还有一次条件,如果只有一次条件就不允许使用and,可以写一个模拟条件*/
  7. sex in('0','1')/*模拟条件*/
  8. /*判断输入的不是空值*/
  9. <if test="age1 != null and age1 != ''">
  10. /*在MyBatis中,大于号和小于号是由(&gt; &lt;)代替的*/
  11. and age &gt;#{age1}
  12. </if>
  13. <if test="age2!=null and age2!=''">
  14. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  15. and age &lt;#{age2}
  16. </if>
  17. </where>
  18. </select>

 页面效果:查询年龄在17到20的所有信息

 

进行多条件查询:

将2、根据age查询和3、根据name查询联合起来,进行多条件查询,以下是在2、3的基础上进行的完善。文末会介绍直接进行多条件查询,不用写2、3。

修改的页面如下:student.jsp页面

  1. <%-- <form action="SelectByNameServlet" method="get">
  2. 根据姓名查询:<input type="text" name="name" value="${s.name}">
  3. <input type="submit" value="查询">
  4. </form>
  5. <form action="SelectByAgeServlet" method="get">
  6. 根据年龄区间查询:<input type="text" name="age1" value="${s.age1}">---<input type="text" name="age2" value="${s.age2}">
  7. <input type="submit" value="查询">--%>
  8. <form action="SelectNameAndAgeServlet" method="get">
  9. 根据姓名查询:<input type="text" name="name" value="${s.name}">
  10. 根据年龄区间查询:<input type="text" name="age1" value="${s.age1}">---<input type="text" name="age2" value="${s.age2}">
  11. <input type="submit" value="查询">
  12. </form>
  13. <%--</form>--%>

 在entity层的vo包下添加一个StudentVo类:

  1. package com.hsd.entity.vo;
  2. public class StudentVo {
  3. private String name;//根据姓名查询的字段
  4. private String age1;//根据年龄区间查询开始的年龄字段
  5. private String age2;//根据年龄区间查询结束的年龄字段
  6. public StudentVo() {
  7. }
  8. public StudentVo(String name, String age1, String age2) {
  9. this.name = name;
  10. this.age1 = age1;
  11. this.age2 = age2;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getAge1() {
  20. return age1;
  21. }
  22. public void setAge1(String age1) {
  23. this.age1 = age1;
  24. }
  25. public String getAge2() {
  26. return age2;
  27. }
  28. public void setAge2(String age2) {
  29. this.age2 = age2;
  30. }
  31. }

 将Student类进行修改:将参数age1和age2删除,同时将该类中与这两个参数有关的get,set方法及有参无参方法删除。

修改SelectByAgeServlet类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.entity.vo.StudentVo;
  4. import com.hsd.service.StudentService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectByAgeServlet")
  13. public class SelectByAgeServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. //
  17. StudentService studentService = new StudentService();
  18. //
  19. String age1=req.getParameter("age1");
  20. String age2=req.getParameter("age2");
  21. //
  22. /* Student student = new Student();
  23. if(age1!=null&&age2!=null){
  24. student.setAge1(Integer.parseInt(age1));
  25. student.setAge2(Integer.parseInt(age2));
  26. }*/
  27. //
  28. //
  29. /* List<Student> list=studentService.selectByAge(student);
  30. //将拿到的数据添加到req中,返回值写list的原因是把数据返回
  31. req.setAttribute("list",list);
  32. req.setAttribute("s",student);*/
  33. //将接受的值存到Vo的实体类中
  34. StudentVo studentVo = new StudentVo();
  35. studentVo.setAge1(age1);
  36. studentVo.setAge2(age2);
  37. // 获取StudentService中根据姓名查询的方法,返回值写List集合的原因,就是需要返回所有的数据
  38. List<Student> list = studentService.selectByAge(studentVo);
  39. // 给查询所有的数据全部添加到req中
  40. req.setAttribute("list",list);
  41. // 拿到的数据添加到req中
  42. req.setAttribute("s",studentVo);
  43. //
  44. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  45. }
  46. }

 修改SelectByNameServlet类:

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.entity.vo.StudentVo;
  4. import com.hsd.service.StudentService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectByNameServlet")
  13. public class SelectByNameServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. //获取StudentService对象
  17. StudentService studentService = new StudentService();
  18. //获取页面中的name值
  19. String name = req.getParameter("name");
  20. //查看是否获取页面输入的name
  21. //System.out.println(name);
  22. /* Student student=new Student();
  23. student.setName(name);
  24. //调用selectByName方法
  25. List<Student> list=studentService.selectByName(student);
  26. //将拿到的数据添加到req中
  27. req.setAttribute("list",list);
  28. //通过Session将查找的数据转发到页面
  29. req.setAttribute("s",student);*/
  30. StudentVo studentVo = new StudentVo();
  31. studentVo.setName(name);
  32. // 获取StudentService中根据姓名查询的方法,返回值写List集合的原因,就是需要返回所有的数据
  33. List<Student> list = studentService.selectByName(studentVo);
  34. // 给查询所有的数据全部添加到req中
  35. req.setAttribute("list",list);
  36. // 给根据姓名查询拿到的数据添加到req中
  37. req.setAttribute("s",studentVo);
  38. //转发到展示页面
  39. req.getRequestDispatcher("student.jsp").forward(req,resp);
  40. }
  41. }

 在controller层加一个类:SelectNameAndAgeServlet类

  1. package com.hsd.controller;
  2. import com.hsd.entity.Student;
  3. import com.hsd.entity.vo.StudentVo;
  4. import com.hsd.service.StudentService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectNameAndAgeServlet")
  13. public class SelectNameAndAgeServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. StudentService studentService = new StudentService();
  17. //
  18. String name = req.getParameter("name");
  19. String age1=req.getParameter("age1");
  20. String age2=req.getParameter("age2");
  21. StudentVo studentVo = new StudentVo();
  22. studentVo.setName(name);
  23. studentVo.setAge1(age1);
  24. studentVo.setAge2(age2);
  25. List<Student> list=studentService.selectByNameAndAge(studentVo);
  26. req.setAttribute("list",list);
  27. req.setAttribute("s",studentVo);
  28. //
  29. req.getRequestDispatcher("/student.jsp").forward(req,resp);
  30. }
  31. }

 修改StudentService:

  1. public List<Student> selectByName(StudentVo studentVo) {
  2. //调用mapper中的方法
  3. List<Student> list=mapper.selectByName(studentVo);
  4. //提交事务
  5. sqlSession.commit();
  6. sqlSession.close();
  7. return list;
  8. }
  9. public List<Student> selectByAge(StudentVo studentVo) {
  10. //调用mapper中的方法
  11. List<Student> list=mapper.selectByAge(studentVo);
  12. //提交事务
  13. sqlSession.commit();
  14. sqlSession.close();
  15. return list;
  16. }
  17. public List<Student> selectByNameAndAge(StudentVo studentVo) {
  18. List<Student> list=mapper.selectByNameAndAge(studentVo);
  19. //提交事务
  20. sqlSession.commit();
  21. sqlSession.close();
  22. return list;
  23. }

 修改StudentMapper:

  1. List<Student> selectByName(StudentVo studentVo);
  2. // 根据age区间条件查询的方法
  3. List<Student> selectByAge(StudentVo studentVo);
  4. // 多条件查询的方法
  5. List<Student> selectByNameAndAge(StudentVo studentVo);
  1. <select id="selectByName" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.vo.StudentVo">
  2. select * from student where name like concat('%',#{name},'%')
  3. </select>
  4. <select id="selectByAge" resultType="com.hsd.entity.Student" parameterType="com.hsd.entity.vo.StudentVo">
  5. select * from student
  6. /*循环判断,where标签在MyBatis中是循环*/
  7. /*if标签在MyBatis中是判断*/
  8. <where>
  9. /*在MyBatis中,在where循环中使用and的前提,必须是还有一次条件,如果只有一次条件就不允许使用and,可以写一个模拟条件*/
  10. sex in('0','1')/*模拟条件*/
  11. /*判断输入的不是空值*/
  12. <if test="age1 != null">
  13. /*在MyBatis中,大于号和小于号是由(&gt; &lt;)代替的*/
  14. and age &gt;#{age1}
  15. </if>
  16. <if test="age2!=null">
  17. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  18. and age &lt;#{age2}
  19. </if>
  20. </where>
  21. </select>
  22. <select id="selectByNameAndAge" parameterType="com.hsd.entity.vo.StudentVo" resultType="com.hsd.entity.Student">
  23. select * from student
  24. <where>
  25. <if test="name!=null||name!=''">
  26. name like concat('%',#{name},'%')
  27. </if>
  28. <if test="age1!=null and age1!=''">
  29. and age &gt;#{age1}
  30. </if>
  31. <if test="age2!=null and age2!=''">
  32. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  33. and age &lt;#{age2}
  34. </if>
  35. </where>
  36. </select>

页面效果: 

直接进行多条件查询,不用写以上的2、3 步

以下用另一个项目进行展示。整体架构和上面的项目一致。

  1. <form action="SelectGnameAndPriceServlet" method="get">
  2. 根据商品名称查询:<input type="text" name="gname" value="${g.gname}"><br>
  3. 根据价格区间查询:<input type="text" name="price1" value="${g.price1}">---<input type="text" name="price2" value="${g.price2}"><br>
  4. <input type="submit" value="查询">
  5. </form>

  在entity层的vo包下添加一个GoodsVo类:

  1. package com.hsd.entity.vo;
  2. public class GoodsVo {
  3. private String gname;
  4. private String price1;
  5. private String price2;
  6. public GoodsVo() {
  7. }
  8. public GoodsVo(String gname, String price1, String price2) {
  9. this.gname = gname;
  10. this.price1 = price1;
  11. this.price2 = price2;
  12. }
  13. public String getGname() {
  14. return gname;
  15. }
  16. public void setGname(String gname) {
  17. this.gname = gname;
  18. }
  19. public String getPrice1() {
  20. return price1;
  21. }
  22. public void setPrice1(String price1) {
  23. this.price1 = price1;
  24. }
  25. public String getPrice2() {
  26. return price2;
  27. }
  28. public void setPrice2(String price2) {
  29. this.price2 = price2;
  30. }
  31. }

此时,Goods类中的参数不需要进行任何修改,因为在后面的操作中,涉及的都是GoodsVo类。

在controller层添加一个SelectByGnameAndPrice类: 

  1. package com.hsd.controller;
  2. import com.hsd.entity.Goods;
  3. import com.hsd.entity.vo.GoodsVo;
  4. import com.hsd.service.GoodsService;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import java.io.IOException;
  11. import java.util.List;
  12. @WebServlet("/SelectGnameAndPriceServlet")
  13. public class SelectGnameAndPriceServlet extends HttpServlet {
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16. GoodsService goodsService = new GoodsService();
  17. //
  18. String gname = req.getParameter("gname");
  19. String price1=req.getParameter("price1");
  20. String price2=req.getParameter("price2");
  21. GoodsVo goodsVo = new GoodsVo();
  22. goodsVo.setGname(gname);
  23. goodsVo.setPrice1(price1);
  24. goodsVo.setPrice2(price2);
  25. List<GoodsVo> list=goodsService.selectByGnameAndPrice(goodsVo);
  26. //将查询信息展示到页面上
  27. req.setAttribute("list",list);
  28. //回显
  29. req.setAttribute("g",goodsVo);
  30. //
  31. req.getRequestDispatcher("/goods.jsp").forward(req,resp);
  32. }
  33. }

 GoodsService类:添加一个selectByGnameAndPrice方法

  1. public List<GoodsVo> selectByGnameAndPrice(GoodsVo goodsVo) {
  2. List<GoodsVo> list=mapper.selectByGnameAndPrice(goodsVo);
  3. //提交事务
  4. sqlSession.commit();
  5. sqlSession.close();
  6. return list;
  7. }

 GoodsMapper:添加selectByGnameAndPrice方法

 List<GoodsVo> selectByGnameAndPrice(GoodsVo goodsVo);

 GoodsMapper.xml:添加sql语句

  1. <select id="selectByGnameAndPrice" parameterType="com.hsd.entity.vo.GoodsVo" resultType="com.hsd.entity.Goods">
  2. select * from goods
  3. <where>
  4. <if test="gname!=null||gname!=''">
  5. gname like concat('%',#{gname},'%')
  6. </if>
  7. <if test="price1!=null and price1!=''">
  8. and price &gt;#{price1}
  9. </if>
  10. <if test="price2!=null and price2!=''">
  11. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  12. and price &lt;#{price2}
  13. </if>
  14. </where>
  15. </select>

对以上项目的修改: 

 一、以上的StudentVo类中age1和age2都是String类型的,若写为int类型,当根据年龄区间进行搜索时,输入框什么都不输入的话,想要的结果是查询所有,但int类型会报500的错误。解决方法如下:

在转换类型时添加一个判断语句即可。

修改之前的500错误如下: 

1、将StudentMapper.xml中的语句进行修改,如下: 

  1. <select id="selectByNameAndAge" parameterType="com.hsd.entity.vo.StudentVo" resultType="com.hsd.entity.Student">
  2. select * from student
  3. <where>
  4. <if test="name!=null and name!=''">
  5. name like concat('%',#{name},'%')
  6. </if>
  7. <if test="age1!=null and age1!=0">
  8. and age &gt;#{age1}
  9. </if>
  10. <if test="age2!=null and age2!=0">
  11. /*在MyBatis中,大于号和小于号是由(gt; lt;)代替的*/
  12. and age &lt;#{age2}
  13. </if>
  14. </where>
  15. </select>

2、 将SelectByNameAndAgeServlet中的语句进行修改,转换类型时,加一个判断。如下:

  1. //判断age不是null且不是空串就进入if,反之没有输入的话,就不走这个查询条件。
  2. if(age1!=null&&!"".equals(age1)){
  3. student.setAge1(Integer.parseInt(age1));
  4. }
  5. if(age2!=null&&!"".equals(age2)){
  6. student.setAge2(Integer.parseInt(age2));
  7. }

二、当进行选中删除时,什么都不选直接点击选中删除按钮时,会报500错误。对其进行修改完善:

给选中删除函数加一个判断,若一条都没选中,则弹窗提示。

 1、引入jquery:

<script src="js/jquery-3.4.1.js"></script>

 2、给选中删除函数加一个判断,若一条都没选中,则弹窗提示。修改如下:

  1. //选中删除
  2. function XDelete() {
  3. if($("input[name=option]:checked").length==0){
  4. alert("至少选中一条数据");
  5. return;
  6. }
  7. //定义一个id变量,初始化值为null,用来存储选中的数据
  8. var id="";
  9. //循环多选框
  10. for (let i = 0; i < option.length; i++) {
  11. if(option[i].checked==true)
  12. {
  13. //选中的id赋值给id变量,用逗号分隔开
  14. id=id+option[i].value+","
  15. }
  16. }
  17. location.href="XDeleteServlet?id="+id;
  18. }

三、添加一个过滤器:当没有登录直接访问主页面和添加页面时,提示未登录。必须登录后才能进行其他操作。

浏览器一旦启动,当登录过一次后,再返回到登录之前的页面,在url栏输入StudentServlet或add.jsp时,不会再提示未登录,可以直接进入。
可以简单理解为:在浏览器启动时,过滤器只会起一次过滤作用。

1、 在controller层添加一个filter包,在包下创建一个RightConfig类:

  1. package com.hsd.filter;
  2. import com.hsd.entity.vo.MessageModel;
  3. import javax.servlet.*;
  4. import javax.servlet.annotation.WebFilter;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import javax.servlet.http.HttpSession;
  9. import java.io.IOException;
  10. //拦截器的工具类
  11. @WebFilter(value = {"/StudentServlet","/add.jsp"})
  12. public class RightConfig implements Filter {
  13. @Override
  14. public void init(FilterConfig filterConfig) throws ServletException {
  15. }
  16. @Override
  17. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  18. //过滤器(拦截器)
  19. //1.先向下转型(强制类型转换),获取HttpServletRequest
  20. HttpServletRequest request= (HttpServletRequest) servletRequest;
  21. HttpServletResponse response= (HttpServletResponse) servletResponse;
  22. //2.获取session域
  23. HttpSession session=request.getSession();
  24. //3.通过getAttribute获取到user,返回一个消息模型对象
  25. MessageModel messageModel = (MessageModel) session.getAttribute("user");
  26. //4.判断是否登录
  27. if(messageModel!=null){
  28. //已经登录,释放拦截器
  29. filterChain.doFilter(request,response);
  30. }else{
  31. //没有登录,返回登录页面进行登录
  32. request.setAttribute("msg","未登录,请返回登录");
  33. //后端代码跳转到jsp需加‘/’
  34. request.getRequestDispatcher("user.jsp").forward(request,response);
  35. }
  36. }
  37. @Override
  38. public void destroy() {
  39. }
  40. }

 选择Filter javax.servlet:

 2、修改UserServlet类:

  1. if(messageModel.getCode()==1){
  2. //成功,将消息模型存到req中,并重定向到首页
  3. //获取session信息
  4. HttpSession session=req.getSession();
  5. //把登录的信息存到session中
  6. session.setAttribute("user",messageModel);
  7. //转发(req)
  8. req.getSession().setAttribute("messageModel",messageModel);
  9. //重定向(resp)
  10. //路径不加‘/’
  11. resp.sendRedirect("StudentServlet");
  12. }else

 3、修改user.jsp:添加提示信息:${msg}

<div style="color: red" id="div">${messageModel.msg} ${msg}</div><br>

 实现退出登录功能:两种方法

(1)写一个超链接:

(2)先添加一个超链接:<a href="ExitServlet">退出登录</a>,
然后在controller层中添加一个ExitServlet类

 (1)写一个超链接:

<a href="user.jsp">退出</a>

 效果:

 

 

 

 缺点:
<1>当点击退出时,直接返回到user.jsp,但是username和password的内容仍存在。
<2>退出后,在url输入StudentServlet或add.jsp时,可以直接进入,即:过滤器没起作用。解决办法:
使用(2)实现退出登录。

(2)先添加一个超链接:<a href="ExitServlet">退出登录</a>,
然后在controller层中添加一个ExitServlet类,在该类中实现将(1)中的<1>username和password消除,实现(1)中的<2>过滤器。 

<a href="ExitServlet">退出登录</a>
  1. package com.hsd.controller;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  8. import java.io.IOException;
  9. @WebServlet("/ExitServlet")
  10. public class ExitServlet extends HttpServlet {
  11. @Override
  12. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  13. //获取session中的信息
  14. HttpSession session=req.getSession();
  15. //清空session域
  16. session.invalidate();
  17. req.getRequestDispatcher("user.jsp").forward(req,resp);
  18. }
  19. }

效果: 

 

​​​​​​​ 

 

总结: 

selectByIdServlet类:
(1)在controller层中:
有req.setAttribute("s",student);语句
(2)在service层中:
有return student;语句。
作用:将数据进行回显
如:输入姓名进行查询时,当点击按钮时,填写的数据不会消失。若无返回,则一旦点击
按钮进行查询,在输入框的内容将消失。

StudentServlet类
SelectByAgeServlet类
SelectByNameServlet类
SelectNameAndAgeServlet类

(1)在controller层中:
三者都有req.setAttribute("list",list);语句。
(2)在service层中:
三者的方法都有返回值return list;语句
作用:将拿到的数据存在req域中。
返回值写list集合的原因:就是需要返回所有的数据到页面上展示
如:在根据姓名查询时,当查询到数据时,先将查到的数据存在req中的list中,
然后根据return list;语句将数据展示到页面上,若无返回,则查询到的信息不会在页面上展示。


 

mapper配套:mapper层的接口和.xml中的方法名及sql语句要一致
getParameter:接收前端页面参数

req.setAttribute:将messageModel对象存到req域中
使用getAttribute通过key获取session中的值
req.getParameterValues("hobby");多选框实现添加用数组
student.setHobby(Arrays.toString(hobby));

重定向(resp):resp.sendRedirect("StudentServlet");
转发(req):req.getRequestDispatcher("/user.jsp").forward(req,resp);

重定向和转发的区别?


相同点:页面都会实现跳转
不同点:请求转发时,url不会发生变化 状态码:307
       重定向时,url会发生变化 状态码:302

mapper层:
.xml中
namespace:命名空间,对应Mapper接口的路径
id(必写)对应Mapper接口中的方法名称,parameterType:接口中的方法的参数类型,resultType:实体类。
提交事务:sqlSession.commit():
添加时需要提交,查询时不需要提交。
即:将数据放到数据库时,需要提交事务;从数据库中取出数据时,不需要提交事务
如:在注册用户时,需将用户名和密码放到数据库中,需要提交事务,而在登录时,只是从数据库获取用户名和密码进行比较,不需要提交事务。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发