MyBatis注解开发实现学生管理页面(分页pagehelper,多条件搜索,查看课程信息)

news2024/9/29 5:38:17

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>studentSystemWork</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.16</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.25</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!--jackson-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!--StringUtils-->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!-- Beanutils -->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.3</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- DBUtils -->
        <dependency>
            <groupId>commons-dbutils</groupId>
            <artifactId>commons-dbutils</artifactId>
            <version>1.6</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!--c3p0-->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <!--分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.1.10</version>
        </dependency>
    </dependencies>

</project>

index.html

<!DOCTYPE html>
<html>

<head>
    <title></title>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="element-ui-2.13.0/lib/theme-chalk/index.css" />
    <script type="text/javascript" src="vue/vue-v2.6.10.js"></script>
    <script type="text/javascript" src="element-ui-2.13.0/lib/index.js"></script>
    <script type="text/javascript" src="vue/axios-0.18.0.js"></script>
</head>

<body>
<div id="app">
    <template>
        <el-table :data="tableData" @selection-change="handleSelectionChange" size="medium"
                  highlight-current-row="true" style="width: 100%">
            <el-table-column type="selection" width="55" prop="sid">
            </el-table-column>
            <el-table-column width="100px" label="序号" type="index">
            </el-table-column>
            <el-table-column label="姓名" prop="sname">
            </el-table-column>
            <el-table-column label="性别" prop="gender">
            </el-table-column>
            <el-table-column label="班级" prop="tbClass.caption">
            </el-table-column>
            <el-table-column>
                <template slot="header" slot-scope="scope">
                    <el-input v-model="search" size="mini" placeholder="请输入姓名" />
                </template>
            </el-table-column>
            <!-- <el-table-column>
                <template slot="header" slot-scope="scope">
                    <el-select v-model="cid" placeholder="请选择班级">
                        <el-option v-for="item in classes"
                          :key="item.cid"
                          :label="item.caption"
                          :value="item.cid">
                        </el-option>
                      </el-select>
                </template>
            </el-table-column> -->
            <el-table-column>
                <template slot="header" slot-scope="scope">
                    <el-radio v-model="sex" label="男">男</el-radio>
                    <el-radio v-model="sex" label="女">女</el-radio>
                </template>
            </el-table-column>
            <el-table-column>
                <template slot="header" slot-scope="scope">
                    <el-button type="success" @click="findAll()">搜索</el-button>
                </template>
                <template slot-scope="scope">
                    <el-button size="mini" @click="handleLook(scope.$index, scope.row)">查看课程信息</el-button>
                </template>
            </el-table-column>
        </el-table>
    </template>
    <br />
    <el-row>
        <el-button type="warning" @click="delAll()">删除选中</el-button>
    </el-row>
    <template>
        <div class="block" align="right">
            <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
                           :current-page="currentPage" :page-sizes="[3, 4, 5, 6]" :page-size="pageSize"
                           layout="total, sizes, prev, pager, next, jumper" :total="totalCount">
            </el-pagination>
        </div>
    </template>

    <!-- 查看课程信息 -->
    <el-dialog title="查看课程信息" :visible.sync="dialogFormVisible">
        <el-form ref="ruleForm" :model="ruleForm" label-width="80px">
            <el-form-item label="学生姓名">
                <el-input v-model="ruleForm.sname" style="width: 210px;" readonly></el-input>
            </el-form-item>
        </el-form>
        <el-table :data="tableCourse" @selection-change="handleSelectionChange" size="medium"
                  highlight-current-row="true" style="width: 100%">
            <el-table-column width="100px" label="序号" type="index">
            </el-table-column>
            <el-table-column label="课程" prop="courses[0].cname">
            </el-table-column>
            <el-table-column label="成绩" prop="num">
            </el-table-column>
            <el-table-column label="老师" prop="courses[0].teacher.tname">
            </el-table-column>
        </el-table>
    </el-dialog>
</div>
</body>
<script>
    axios.defaults.withCredentials = true
    new Vue({
        el: "#app",
        data: {
            /*表格数据*/
            tableData: [],
            tableCourse: [],
            /*条件查询关键字*/
            search: '',
            sex: "",
            //批量删除存放选中的复选框
            multipleSelection: [],
            //存放删除的数据
            delarr: [],
            //当前页
            currentPage: 1,
            //每页显示条数
            pageSize: 3,
            //总条数
            totalCount: '',
            //总页数
            totalPage: '',
            // 是否展示课程信息对话框
            dialogFormVisible: false,
            ruleForm: {
                sid: '',
                sname: '',
                gender: '',
                tbClass: '',
                class_id: '',
            },
        },
        methods: {

            findAll() {
                let param = new URLSearchParams();
                param.append("type", "showStuByPage");
                param.append("page", this.currentPage);
                param.append("rows", this.pageSize);
                param.append("sname", this.search);
                param.append("gender", this.sex);
                axios({
                    method: "post",
                    url: "http://localhost:8080/studentSystemWork_war_exploded/studentServlet",
                    data: param
                }).then(obj => {
                    this.tableData = obj.data.list;
                    this.totalCount = obj.data.total;
                });
            },

            handleSizeChange: function (size) {
                this.pageSize = size;
                this.findAll();
            },

            handleCurrentChange: function (currentPage) {
                this.currentPage = currentPage;
                this.findAll();
            },

            delAll() {
                //获取删除的ID
                this.delarr = [];
                for (let i = 0; i < this.multipleSelection.length; i++) {
                    this.delarr.push(this.multipleSelection[i].sid);
                }
                //判断要删除的文件是否为空
                if (this.delarr.length == 0) {
                    this.$message.warning("请选择要删除的数据!")
                } else {
                    this.$confirm("是否确认删除?", "提示", { type: 'warning' }).then(() => {
                        //点击确认删除
                        let param = new URLSearchParams();
                        param.append("sids", this.delarr.join())
                        param.append("type", "deleteStudents")
                        axios({
                            method: "post",
                            url: "http://localhost:8080/studentSystemWork_war_exploded/studentServlet",
                            data: param
                        }).then(obj => {
                            if (obj.data) {
                                this.$message.success("删除成功!");
                                setTimeout(function () {
                                    window.location.href = "index.html"
                                }, 1500)
                            } else {
                                this.$message.error("删除失败!")
                            }
                        });
                    });
                }
            },

            handleSelectionChange(val) {
                this.multipleSelection = val;
            },

            handleLook(index, row) {
                this.dialogFormVisible = true;
                this.ruleForm = row;
                let param = new URLSearchParams();
                param.append("type","getStudentCourseById")
                param.append("sid",row.sid);
                axios({
                    method: "post",
                    url: "http://localhost:8080/studentSystemWork_war_exploded/scoreServlet",
                    data: param
                }).then(obj => {
                    this.tableCourse = obj.data;
                });
            },

        },

        created() {
            this.findAll();
        }

    })
</script>

</html>

studentDao

package com.etime.dao;

import com.etime.pojo.Student;
import com.etime.pojo.TbClass;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface StudentDao {
    @Select({"<script> select count(*) from student " +
            "<where>  " +
            "<if test = \"sname != ''\"> " +
                "and sname like concat('%',#{sname},'%')  " +
            "</if>  " +
            "<if test = \"gender != ''\"> " +
                "and gender = #{gender} " +
            "</if> " +
            "</where> </script>"})
    int getCountStudent(Student student);

    @Select({"<script> select * from student " +
            "<where>  " +
            "<if test = \"sname != ''\"> " +
            "and sname like concat('%',#{sname},'%')  " +
            "</if>  " +
            "<if test = \"gender != ''\"> " +
            "and gender = #{gender} " +
            "</if> " +
            "</where> </script>"})
    @Results({
            @Result(property = "sid",column = "sid"),
            @Result(property = "gender",column = "gender"),
            @Result(property = "class_id",column = "class_id"),
            @Result(property = "sname",column = "sname"),
            @Result(property = "tbClass",column = "class_id",javaType = TbClass.class,
                    one = @One(select = "com.etime.dao.TbClassDao.getClassByCid"))
    })
    List<Student> showStuByPage(Student student);

    @Delete({"<script>delete from student where sid in " +
            "<foreach collection=\"list\" open=\"(\" close=\")\" item=\"sid\" separator=\",\"> " +
            "#{sid} " +
            "</foreach>" +
            "</script>"})
    int deleteStudents(List<Integer> list);
}

具体完整代码看资源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】面向抽取和理解基于Transformer的自动作文评分模型的隐式评价标准(实验结果部分)

方法 结果 在这一部分&#xff0c;我们展示对于每个模型比较的聚合的统计分析当涉及到计算特征和独立的特征组&#xff08;表格1&#xff09;&#xff0c;抽取功能组和对齐重要功能组&#xff08;表格2&#xff09;&#xff0c;并且最后&#xff0c;我们提供从模型比较&#x…

【前端工程化】配置React+ts企业级代码规范及样式格式和git提交规范

目录 前言 代码规范技术栈 创建react18vite2ts项目 editorconfig统一编辑器配置 prettier自动格式化代码 eslintlint-staged检测代码 使用tsc检测类型和报错 代码提交时使用husky检测代码语法规范 代码提交时使用husky检测commit备注规范 配置commitizen方便添加commi…

VMware centos7虚拟机修改静态IP

一、修改网络适配器 1、打开 2、使用管理员权限修改 3、按照图中步骤修改为 4、设置网关为10.0.0.2后保存即可 二、修改配置文件 1、输入下面代码进入修改&#xff08;网卡这里网卡名字为ens33&#xff0c;可使用ifcfig或ip a查看&#xff09; vi /etc/sysconfig/netwo…

【Java 进阶篇】CSS 选择器详解

CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页上元素样式的语言。要想有效地使用CSS&#xff0c;了解CSS选择器是至关重要的&#xff0c;因为它们允许你选择要应用样式的HTML元素。在本文中&#xff0c;我们将详细介绍CSS选择器的各种类型和用法&#xff0c;以便你…

并不止于表面理论和简单示例——《Python数据科学项目实战》

Python 现在可以说是运用最广泛的编程语言之一&#xff0c;使用 Python 的人不只局限在计算机相关专业的从业者,很多来自金融领域、医疗领域以及其他我们无法想象的领域的人,每天都在使用 Python处理各种数据、使用机器学习进行预测以及完成各种有趣的工作。 长久以来&#xff…

济南建筑模板生产厂家有哪些?

在济南地区&#xff0c;寻找一家可靠的建筑模板供应商对于建筑施工企业来说是至关重要的。在众多的厂家中&#xff0c;广西贵港市能强优品木业是济南地区建筑模板最具实力的供应商之一。他们不仅提供高质量的建筑模板&#xff0c;还能提供整车物流包运输&#xff0c;并将货物发…

android app开发环境搭建

Android是流行的移动设备原生应用开发平台&#xff0c;其支持Java语言以及Kotlin语言的开发环境&#xff0c;本文主要描述官方提供的Android studio集成开发环境搭建。 https://developer.android.google.cn/ 如上所示&#xff0c;从官方上下载最新版本的Android studio集成开…

C++ 修改文件创建时间、修改时间属性

简介 修改文件创建时间、修改时间、大小等属性。 博客 《C 获取文件创建时间、修改时间、大小等属性》分享后&#xff0c;好兄弟“古月”发来一段代码&#xff0c;说可以修改文件的创建时间等。测试了一下真可以&#xff0c;下面是运行效果和代码&#xff1a; 代码 #i…

mysql面试题35:MySQL有关权限的表有哪些?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL有关权限的表有哪些? MySQL中与权限相关的表主要包括以下几个: user表:存储MySQL用户的基本信息,包括用户名、密码等。可以使用以下命令…

用于物体识别和跟踪的下游任务自监督学习-2-背景

2.1用于现实世界应用的计算机视觉的基本概念 有许多中间步骤涉及应用计算机视觉算法来解决现实世界中的问题。机器视觉算法从光学传感器的图像采集开始,并最终解决现实世界的决策任务,如自动驾驶汽车、机器人自动化和监控。设计现代计算机视觉算法包括传感器数据编码、解码、…

Practical Memory Leak Detection using Guarded Value-Flow Analysis 论文阅读

本文于 2007 年投稿于 ACM-SIGPLAN 会议1。 概述 指针在代码编写过程中可能出现以下两种问题&#xff1a; 存在一条执行路径&#xff0c;指针未成功释放&#xff08;内存泄漏&#xff09;&#xff0c;如下面代码中注释部分所表明的&#xff1a; int foo() {int *p malloc(4 …

PointRend: 将图像分割视为渲染——PointRend:Image Segmentation as Rendering

0.摘要 我们提出了一种新的方法&#xff0c;用于高效、高质量的对象和场景图像分割。通过将经典的计算机图形学方法与像素标记任务中面临的过采样和欠采样挑战进行类比&#xff0c;我们开发了一种将图像分割视为渲染问题的独特视角。基于这个视角&#xff0c;我们提出了PointRe…

昂首资本通过套期保值,MT4和MT5这样选

对冲模式允许交易者为一项资产开立任意数量的头寸&#xff0c;但只能进行多单交易&#xff0c;无法改变开仓的成交量。 套期保值系统由MT4和MT5两款软件提供支持&#xff0c;自2016年起&#xff0c;套期保值系统由MT5取代了MT4。净额结算模式允许交易者一次只有一个金融工具的…

TensorRT的结构

Builder&#xff08;网络原数据&#xff09;&#xff1a;模型搭建的入口&#xff0c;网络的tensorRT内部表示以及可执行程序引擎都是由该对象的成员方法生成的 BuiderConfig&#xff08;网络原数据的选项&#xff09;&#xff1a;负责设置模型的一些参数&#xff0c;如是否开始…

R语言R包详解——stringr包:字符处理

R语言 R语言R包详解——stringr包&#xff1a;字符处理 一切用法皆以说明书为准&#xff0c;想要了解该包&#xff0c;请多查阅说明书或者查看底层算法。 文章目录 R语言一、安装与加载R包二、函数简介三、函数详解3.1、str_c: 字符串拼接3.2、str_trim: 去掉字符串的空格和TA…

2核4G服务器支持多少用户同时在线访问?卡不卡?

腾讯云轻量2核4G5M带宽服务器支持多少人在线访问&#xff1f;5M带宽下载速度峰值可达640KB/秒&#xff0c;阿腾云以搭建网站为例&#xff0c;假设优化后平均大小为60KB&#xff0c;则5M带宽可支撑10个用户同时在1秒内打开网站&#xff0c;从CPU内存的角度&#xff0c;网站程序效…

Java 19的未来:新特性、性能优化和更多

文章目录 新特性的引入1. 模式匹配的扩展2. 增强的模式匹配异常处理3. 基于记录的反射4. 引入静态方法的接口 性能优化1. 垃圾收集器的改进2. 即时编译器的增强3. 并行处理的改进 Java编程的前景展望1. 更多的应用场景2. 更强的生态系统3. 更广泛的社区参与4. 面向未来的编程 结…

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.5 键盘事件

本章要实现的整体效果如下&#xff1a; QEvent::KeyPress ​ 键盘按下时&#xff0c;触发该事件&#xff0c;它对应的子类是 QKeyEvent QEvent::KeyRelease ​ 键盘抬起时&#xff0c;触发该事件&#xff0c;它对应的子类是 QKeyEvent 本节通过两个案例来讲解这 2 个事件&…

C++学习day4

作业&#xff1a; 1> 思维导图 2> 整理代码 1. 拷贝赋值函数课上代码 //拷贝赋值函数课上代码 #include<iostream> using namespace std;//创建类 class Stu { private://私有的string name;int socer;int *age;//此处注意用到指针类型 public://共有的//无参构…

爬取微博热榜并将其存储为csv文件

&#x1f64c;秋名山码民的主页 &#x1f602;oi退役选手&#xff0c;Java、大数据、单片机、IoT均有所涉猎&#xff0c;热爱技术&#xff0c;技术无罪 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; 获取源码&#xff0c;添加WX 目录 前言1.…