SSM 整合实现 增删改查、PageHelper 实现分页
发布日期:2021-06-30 16:50:27 浏览次数:3 分类:技术文章

本文共 12665 字,大约阅读时间需要 42 分钟。

一、前言

1、想法

这个SSM(Spring+SpringMVC+MyBatis,基于Maven)实现的 CRUD 测试是之前写的,一直留着想等有空再使用点 BootStrap / EasyUI / ElementUI 对界面(现在纯 HTML)进行优化,却一直没有时间。不过后来想了想,这样代码更加注重后台业务逻辑,更加简单易读。

这里页面虽然使用了 JSP,并没有使用 JSP 的 EL、JSTL 库,全程使用 jQuery 的 Ajax 以 JSON 的数据格式进行交互

后面有时间会实现 vue+ssm 的整合来替代简陋的 JSP 页面,并前后端分离
2、运行环境

①编译器:eclipse

②服务器:Tomcat7
③JDK:1.7
④数据库:MySQL

3、框架、工具

①前端: jQuery

②后台:Spring、SpringMVC、MyBatis、Maven

二、功能介绍

1、jsonlist.jsp 主界面:

相当简单,以后的 CRUD 都在这个页面上

这里写图片描述

2、分页功能:

在上述页面中,例如点击>>显示下一页,效果如下:红色框表示变化的地方

这里写图片描述

3、编辑功能:

点击上图第一行的编辑,就会显示在下方的编辑区

这里写图片描述
修改密码为123后,点击编辑,刷新页面,改变web5为123
这里写图片描述

4、删除功能:

点击id=6的一行的删除链接,即刚才修改的那行,id=6就不见了

这里写图片描述

5、增加功能:

这里有个细节,就是你输入的用户名是之前就有的话,会提示你的名字不可用

这里写图片描述

正确输入后,点击新增

这里写图片描述

会自动跳到最后一页,可以看刚刚正确输入的信息

这里写图片描述

至此 CRUD 该演示的应都演示完了,下面是实现的代码

三、代码实现

1、代码结构

这里要注意,绿色框中的内容都不是我自己手动编写加入的,是使用 MyBatis 的逆向工程自动生成的,这里也就没有必要列出代码了,同时代码的关键地方都清除注释了,应该没有任何阅读障碍

逆向工程具体使用方法可以去参考之前的文章

逆向工程使用的文件为红色框中的文件

这里写图片描述

2、主界面 jsonlist.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%>
JSON<% pageContext.setAttribute("APP_PATH", request.getContextPath());%>

Ajax 纯天然无污染

Id Username Password Edit Delete

连续显示的页码


用户名: 密码:

id: 用户名: 密码:

2、服务层 UserService.java

package com.cun.service;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.cun.bean.User;import com.cun.bean.UserExample;import com.cun.dao.UserMapper;@Servicepublic class UserService {
@Autowired UserMapper userMapper; // 获取所有的用户 public List
getAll() { return userMapper.selectByExample(null); } // 新增用户 public void addUser(User user) { userMapper.insertSelective(user); } //检验用户名是否重复 public boolean checkUserName(String username) { UserExample userExample = new UserExample(); userExample.createCriteria().andUsernameEqualTo(username); long countByExample = userMapper.countByExample(userExample); if (countByExample == 0) { return true; } else { return false; } } //查询用户 public User getUser(Integer id) { return userMapper.selectByPrimaryKey(id); } //删除用户 public void delUser(Integer id) { userMapper.deleteByPrimaryKey(id); } //更新用户 public void ediUser(User user) { userMapper.updateByPrimaryKey(user); }}

3、控制层 UserController.java

package com.cun.controller;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.ibatis.annotations.Param;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.cun.bean.User;import com.cun.service.UserService;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;@Controllerpublic class UserController {
@Autowired UserService userService; // 定位页码请求处理 @RequestMapping("/users") // defaultValue在简陋的jsp测试页面无法点击赋值时,发挥作用 public String getUsers0(@RequestParam(value = "pn", defaultValue = "1") Integer pn, @RequestParam(value = "num", defaultValue = "5") Integer num, Model model) { // 页码、每页的大小 PageHelper.startPage(pn, num); // 获取结果集 List
users = userService.getAll(); // 代理结果、连续显示的页数 PageInfo
page = new PageInfo
(users, 5); // 保存到Session中 model.addAttribute("pageInfo", page); // 返回页面 return "list"; } // 显示所有用户信息 @ResponseBody @RequestMapping(value = "/jsonusers", method = RequestMethod.GET) public PageInfo
getUsers(@RequestParam(value = "pn", defaultValue = "1") Integer pn, @RequestParam(value = "num", defaultValue = "5") Integer num, Model model) { // 页码、每页的大小 PageHelper.startPage(pn, num); // 获取结果集 List
users = userService.getAll(); // 代理结果、连续显示的页数 PageInfo
page = new PageInfo
(users, 5); // 上面是把page存到Session中,这里是直接返回json字符串 return page; } // 添加用户 @ResponseBody @RequestMapping(value = "/jsonusers", method = RequestMethod.POST) // data : "password="+password+"&username="+username 居然可以用一个user接受两个数据,太智能了 public void addUser(User user) { // 保存数据到数据库 userService.addUser(user); } // 查一个用户 @ResponseBody @RequestMapping(value = "/getuser/{id}", method = RequestMethod.GET) public User getUser(Integer id) { return userService.getUser(id); } // 检查用户名是否可用 @ResponseBody @RequestMapping(value = "/checkuser", method = RequestMethod.POST) public HashMap
checkUserName(String userName) { boolean tap = userService.checkUserName(userName); Map
map = new HashMap
(); if (tap) { map.put("msg", "you can use it"); } else { map.put("msg", "you cannot use the name"); } return (HashMap
) map; } // 删除用户 method = RequestMethod.POST,用DELETE则无法做到 @RequestMapping(value = "/deluser",method = RequestMethod.POST) public void delUsers(User user) { System.out.println("要删除的用户id="+user.getId()); userService.delUser(user.getId()); } @RequestMapping(value="/ediUser",method=RequestMethod.POST) public void ediUser(User user) { System.out.println(user); userService.ediUser(user); }}

4、逆向工程生成文件 MBGTest.java

package com.cun.test;import java.io.File;import java.util.ArrayList;import java.util.List;import org.mybatis.generator.api.MyBatisGenerator;import org.mybatis.generator.config.Configuration;import org.mybatis.generator.config.xml.ConfigurationParser;import org.mybatis.generator.internal.DefaultShellCallback;public class MBGTest {    public static void main(String[] args) throws Exception {        List
warnings = new ArrayList
(); boolean overwrite = true; File configFile = new File("mbg.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); }}

5、逆向工程配置文件 mbg.xml

6、最后 Maven 架包依赖 pom.xml

4.0.0
com.cun.ssmtest
spring
0.0.1-SNAPSHOT
war
com.github.pagehelper
pagehelper
5.0.0
org.mybatis.generator
mybatis-generator-core
1.3.5
org.springframework
spring-webmvc
4.3.7.RELEASE
com.fasterxml.jackson.core
jackson-databind
2.8.8
org.hibernate
hibernate-validator
5.4.1.Final
org.springframework
spring-jdbc
4.3.7.RELEASE
org.springframework
spring-test
4.3.7.RELEASE
org.springframework
spring-aspects
4.3.7.RELEASE
org.mybatis
mybatis
3.4.2
org.mybatis
mybatis-spring
1.3.1
c3p0
c3p0
0.9.1
mysql
mysql-connector-java
5.1.41
jstl
jstl
1.2
javax.servlet
javax.servlet-api
3.0.1
provided
junit
junit
4.12

7、sping 的配置 applicationContext.xml

这里写图片描述

8、SpringMVC 配置 dispatcherServlet-servlet.xml

9、web.xml 配置

contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
dispatcherServlet
org.springframework.web.servlet.DispatcherServlet
1
dispatcherServlet
/
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
utf-8
forceRequestEncoding
true
forceResponseEncoding
true
CharacterEncodingFilter
/*
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
HiddenHttpMethodFilter
/*
HttpPutFormContentFilter
org.springframework.web.filter.HttpPutFormContentFilter
HttpPutFormContentFilter
/*
/index.jsp

四、小结

优化:

1、本次 CRUD 后端使用了目前流行的ssm框架等之后,编写起来是很快的,不过原因之一也是本测试过于简单了,仅仅是单表的 CRUD ,如果涉及多表的 CRUD 就要自己的去修改 DAO、Bean 层了,

2、本次 CRUD 的界面实在是太简陋了,急需优化

3、本次 CURD 前端处理 JSON,并没有使用目前流行的 MVVM 模式的框架如 Vue,而是大量使用 jQuery 的 Ajax 方法,基于 DOM 的操作实在是太繁杂了,有需改善。

4、2018.2.28:增加了点 BootStrap样式,算是 2.0版本,代码就不更新了

这里写图片描述
5、2018.8.5:分页手动写也是可以的,曾经做一个学校的学生宿舍管理系统,分页用的就是如下的方法,page、size 传入 mybaits 的 mapper.xml 中的 sql 即可,并不复杂:

转载地址:https://larger5.blog.csdn.net/article/details/79273968 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[增删改查] Lucene 5 索引 CRUD
下一篇:[服务器] Centos7 云服务器部署项目常用的 Linux 命令

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月15日 22时01分05秒