基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询

yizhihongxing

接下来我会详细讲解“基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询”的完整攻略。

1. 前期准备

首先需要确保本地已经安装好以下环境:
- JDK 1.8+
- Maven 3+
- MySQL 5+

2. 创建项目并导入相关依赖

创建一个Maven项目并在pom.xml中引入以下依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.14</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.6.0</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>bootstrap</artifactId>
    <version>5.1.3</version>
</dependency>

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>datatables</artifactId>
    <version>1.10.25</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

3. 创建数据库表

在MySQL中创建一张用户表,包含以下字段:
- id(主键)
- name(姓名)
- age(年龄)
- gender(性别)
- address(地址)

4. 编写Controller

编写一个UserController,其中包含以下两个接口:
- 获取用户列表接口:用于返回分页、模糊查询后的用户列表;
- 添加用户接口:用于添加新用户。

代码示例:

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/list")
    public Object list(int pageNumber, int pageSize, String searchText) {
        Page<User> page = userService.findPage(pageNumber, pageSize, searchText);
        Map<String, Object> result = new HashMap<>();
        result.put("data", page.getContent());
        result.put("recordsTotal", page.getTotalElements());
        result.put("recordsFiltered", page.getTotalElements());
        result.put("draw", pageNumber);
        return result;
    }

    @RequestMapping("/add")
    public String add(User user) {
        userService.save(user);
        return "success";
    }
}

5. 编写Service

编写UserService,其中包含以下两个方法:
- findPage:用于分页、模糊查询用户列表;
- save:用于添加新用户。

代码示例:

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public Page<User> findPage(int pageNumber, int pageSize, String searchText) {
        Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.Direction.ASC, "id");
        if (StringUtils.isEmpty(searchText)) {
            return userRepository.findAll(pageable);
        } else {
            return userRepository.findByNameContainingOrAddressContaining(searchText, searchText, pageable);
        }
    }

    public void save(User user) {
        userRepository.save(user);
    }
}

6. 编写Repository

编写UserRepository,继承自JpaRepository,用于操作用户表。

代码示例:

public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
    Page<User> findByNameContainingOrAddressContaining(String name, String address, Pageable pageable);
}

7. 编写前端页面

创建一个HTML页面,包含以下内容:
- 一个表格,用于展示用户列表;
- 一个表单,用于添加新用户;
- 引入Bootstrap和DataTables的相关CSS和JS文件。

代码示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户管理</title>
    <link rel="stylesheet" href="/webjars/bootstrap/5.1.3/css/bootstrap.min.css"/>
    <link rel="stylesheet" href="/webjars/datatables/1.10.25/css/dataTables.bootstrap5.min.css"/>
</head>
<body>
<div class="container">
    <h1>用户管理</h1>
    <br/>
    <div class="row">
        <div class="col-lg-6">
            <form class="form-inline mb-3" id="addUserForm">
                <div class="form-group mr-2">
                    <label for="name">姓名:</label>
                    <input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
                </div>
                <div class="form-group mr-2">
                    <label for="age">年龄:</label>
                    <input type="number" class="form-control" id="age" name="age" placeholder="请输入年龄">
                </div>
                <div class="form-group mr-2">
                    <label for="gender">性别:</label>
                    <select class="form-select" id="gender" name="gender">
                        <option value="1">男</option>
                        <option value="2">女</option>
                    </select>
                </div>
                <div class="form-group mr-2">
                    <label for="address">地址:</label>
                    <input type="text" class="form-control" id="address" name="address" placeholder="请输入地址">
                </div>
                <button type="button" class="btn btn-primary" id="addUserBtn">添加</button>
            </form>
        </div>
    </div>
    <div class="row">
        <div class="col-lg-12">
            <table class="table table-bordered" id="userTable">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>姓名</th>
                    <th>年龄</th>
                    <th>性别</th>
                    <th>地址</th>
                </tr>
                </thead>
            </table>
        </div>
    </div>
</div>
<script src="/webjars/jquery/3.6.0/jquery.min.js"></script>
<script src="/webjars/datatables/1.10.25/js/jquery.dataTables.min.js"></script>
<script src="/webjars/datatables/1.10.25/js/dataTables.bootstrap5.min.js"></script>
<script type="text/javascript">
    $(function () {
        var table = $('#userTable').DataTable({
            paging: true,
            serverSide: true,
            searching: true,
            ajax: function (data, callback, settings) {
                var param = {};
                param.pageNumber = data.start / data.length + 1;
                param.pageSize = data.length;
                param.searchText = data.search.value;

                $.ajax({
                    type: "GET",
                    url: "/user/list",
                    data: param,
                    success: function (result) {
                        callback({
                            recordsTotal: result.recordsTotal,
                            recordsFiltered: result.recordsFiltered,
                            data: result.data
                        });
                    }
                });
            },
            columns: [
                {data: "id"},
                {data: "name"},
                {data: "age"},
                {
                    data: "gender",
                    render: function (data, type, full, meta) {
                        if (data === 1) {
                            return "男";
                        } else if (data === 2) {
                            return "女";
                        } else {
                            return "";
                        }
                    }
                },
                {data: "address"}
            ]
        });

        $('#addUserBtn').click(function () {
            var name = $('#name').val();
            var age = $('#age').val();
            var gender = $('#gender').val();
            var address = $('#address').val();

            $.ajax({
                type: "POST",
                url: "/user/add",
                data: {name: name, age: age, gender: gender, address: address},
                success: function (result) {
                    if (result === "success") {
                        alert("添加成功");
                        table.ajax.reload();
                        $('#addUserForm')[0].reset();
                    } else {
                        alert("添加失败");
                    }
                }
            });
        });
    });
</script>
</body>
</html>

8. 运行程序

将项目打包部署到Tomcat中,启动Tomcat后访问前端页面,即可进行分页、模糊查询和添加操作。

示例一:使用搜索功能进行模糊查询;
示例二:添加一条新的用户信息。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • gitkraken使用—01、gitkraken的安装与破解

    下面是关于“GitKraken使用—01、GitKraken的安装与破解”的完整攻略: 1. GitKraken简介 GitKraken是一款跨平台的Git客户端,它提供了直观的用户界面和强大的功能,使得Git的使用变得更加简单和高效。 2. GitKraken安装与破解 以下是GitKraken的安装与破解步骤: 步骤1:下载GitKraken 首先,需要…

    other 2023年5月7日
    00
  • linux中ctrl+s的作用

    在Linux中,Ctrl+S是一个特殊的组合键,它的作用是暂停终端的输出。如果您不小心按下了Ctrl+S,您可能会认为终端已经崩溃了,因为您无法输入任何命令。以下是如何解决这个问题的完整攻略,包含两个示例说明。 步骤一:恢复终端输出 如果您不小心按下了Ctrl+S,您可以按下Ctrl+Q来恢复终端的输出。这是因为Ctrl+S暂停了终端的输出,而Ctrl+Q恢…

    other 2023年5月9日
    00
  • 详解JavaScript栈内存与堆内存

    详解JavaScript栈内存与堆内存 在JavaScript中,内存分为栈内存和堆内存两种类型。栈内存用于存储基本数据类型和引用类型的变量的值,而堆内存用于存储复杂对象和引用类型的实例。 栈内存 栈内存是一种后进先出(LIFO)的数据结构,它用于存储函数的执行上下文和基本数据类型的值。每当一个函数被调用时,都会创建一个新的执行上下文,并将其推入栈内存中。当…

    other 2023年8月1日
    00
  • BJDCTF 2nd web

    BJDCTF 2nd web是一场网络安全比赛中的一道Web题目,本文将提供完整攻略,包括题目分析、解题思路和具体实现方法,并提供两个示例说明。 题目分析 题目描述:给定一个网站,其中包含一个登录页面和一个用户信息页面。用户需要在登录页面输入正确的用户名和密码才能进入用户信息页面。但是,该网站存在一个漏洞,可以通过绕过登录验证来直接访问用户信息页面。 解题思…

    other 2023年5月5日
    00
  • Android自定义ViewGroup之CustomGridLayout(一)

    针对Android自定义ViewGroup之CustomGridLayout(一)这篇文章,我给出以下完整攻略: 1. 主要内容 介绍自定义ViewGroup的概念,以及与之相关的布局管理器(LayoutManager) 讲解如何继承ViewGroup并重写一些必要的方法 实现一个类似GridLayout的CustomGridLayout,支持动态添加子Vi…

    other 2023年6月25日
    00
  • Spring中@Value读取properties作为map或list的操作

    为了解释Spring中@Value读取properties作为Map或List的操作,我们需要先了解@Value的基本用法。 @Value是Spring框架提供的一个注解,可以用于为类中的属性注入值。它有两种形式: @Value(“value”) @Value(“#{expression}”) 第一种形式支持直接赋值,第二种形式可以使用SpEL表达式来计算。…

    other 2023年6月25日
    00
  • Android百度地图应用之创建显示地图

    下面是详细讲解”Android百度地图应用之创建显示地图”的完整攻略。 准备工作 在进行百度地图的开发之前,我们需要先进行以下的准备工作: 注册百度开发者账号,进入百度开发者平台进行注册; 创建应用并获取AK,进入控制台,创建应用并获取AK; 下载Android SDK,并进行安装。 创建项目 打开Android Studio,创建一个新项目; 在”Proj…

    other 2023年6月27日
    00
  • 怎样给U盘加密 给U盘隐私上把锁

    给U盘加密有多种方法,本文将介绍两种常用的方式:使用加密软件和使用Windows自带的加密功能。 使用加密软件 在网上下载并安装一个可信赖的加密软件,例如TrueCrypt或VeraCrypt 。(本文以TrueCrypt为例) 打开TrueCrypt,点击“Volume creation”,选择“Creat Volume in a file” 选择加密文件…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部