SpringBoot+MyBatisPlus+Thymeleaf+AdminLTE增删改查实战

SpringBoot+MyBatisPlus+Thymeleaf+AdminLTE增删改查实战说明AdminLTE是网络上比较流行的一款Bootstrap模板,包含丰富的样式、组件和插件,非常适用于后端开发人员做后台管理系统。因为最近又做了个后台管理系统,这次就选的是AdminLTE做主题模板发现效果不错,这里我把最核心的SpringBoot如何集成AdminLTE实现增删改查的源码提供出来,需要的朋友可以参考而少走弯路。实现效果技术选型前端:Thymeleaf+Bootstrap+AdminLTE+插件后端:SpringBoot2.0+Mybatis-Plus数据库:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

说明

AdminLTE是网络上比较流行的一款Bootstrap模板,包含丰富的样式、组件和插件,非常适用于后端开发人员做后台管理系统。
因为最近又做了个后台管理系统,这次就选的是AdminLTE做主题模板发现效果不错,这里我把最核心的SpringBoot如何集成AdminLTE实现增删改查的源码提供出来,需要的朋友可以参考而少走弯路。

项目源码

需要源码的朋友给我来个一键三连,留个邮箱后发送!

实现效果

在这里插入图片描述
在这里插入图片描述

技术选型

  • 前端:Thymeleaf+Bootstrap+AdminLTE+插件
  • 后端:Spring Boot2.0 + Mybatis-Plus
  • 数据库:MySQL5.7

核心代码

只讲重点,详细看源码。

页面

dataTables的实战用法如下:

myTable = $('#dataTable').DataTable(
            { 
   
                language: lang,  //提示信息
                "iDisplayLength": 10,//默认每页数量
                //"bPaginate": true, //翻页功能
                "bLengthChange": false, //改变每页显示数据数量
                "bFilter" : false, //过滤功能
                "ordering": false,
                "bSort": false, //排序功能
                //"bInfo" : true,//页脚信息
                //"bAutoWidth" : true,//自动宽度
                "stateSave": true,
                "retrieve": true,
                "processing": true,
                "serverSide": true,
                //"bPaginate" : true,
                "bProcessing": true,//服务器端进行分页处理的意思
                ajax: function (data, callback, settings) { 
   //ajax配置为function,手动调用异步查询
                    // 构造请求参数
                    var param = { 
   };
                    param.draw = data.draw;
                    param.pageSize = data.length;//页面显示记录条数,在页面显示每页显示多少项的时候
                    param.start = data.start;//开始的记录序号
                    param.pageNo = (data.start / data.length) + 1;//当前页码
                    //param.order = data.order[0];
                    param.username = $("#s_username").val();
                    $.ajax({ 
   
                        type: "POST",
                        url: ctx + "/user/list",
                        cache: false, //禁用缓存
                        data: param, //传入已封装的参数
                        dataType: "json",
                        success: function (res) { 
   
                            // console.log(res)
                            //setTimeout仅为测试遮罩效果
                            setTimeout(
                                function () { 
   
                                    //封装返回数据,这里仅演示了修改属性名
                                    var returnData = { 
   };
                                    returnData.draw = res.data.draw;//这里直接自行返回了draw计数器,应该由后台返回
                                    returnData.recordsTotal = res.data.total;
                                    returnData.recordsFiltered = res.data.total;//后台不实现过滤功能,每次查询均视作全部结果
                                    returnData.data = res.data.records;
                                    //关闭遮罩
                                    //$wrapper.spinModal(false);
                                    //调用DataTables提供的callback方法,代表数据已封装完成并传回DataTables进行渲染
                                    //此时的数据需确保正确无误,异常判断应在执行此回调前自行处理完毕
                                    callback(returnData);
                                },
                                200);
                        },
                        error: function (XMLHttpRequest, textStatus, errorThrown) { 
   
                            alert("查询失败");
                        }
                    });
                },
                "aoColumns": [
                    { 
   
                        sTitle: '序号',
                        data: null,
                        className: 'text-center whiteSpace',
                        render:function(data,type,row,meta) { 
   
                            return meta.row + 1 +
                                meta.settings._iDisplayStart;
                        }
                    },
                    { 
   "data": "username"},
                    { 
   "data": "email"},
                    { 
   "data": "truename"},
                    { 
   "data": "createTime",
                        render: function (data, type, row, meta) { 
   
                            if (data){ 
      // data不为空进行转换
                                return (new Date(data)).Format("yyyy-MM-dd hh:mm:ss");
                            } else { 
   
                                return data = ''; //data为空时不转换
                            }
                        }
                    }
                ],

                "columnDefs": [{ 
   
                    // 定义操作列,######以下是重点########
                    "targets": 5,//操作按钮目标列
                    "data": null,
                    "render": function (data, type, row) { 
   
                        var id = '"' + row.id
                            + '"';
                        //<a href='javascript:void(0);' class='delete btn btn-default btn-xs' ><i class='fa fa-times'></i> 查看</a>
                        var html = "<button class='btn btn-sm btn-warning' οnclick='edit("
                            + id
                            + ")'><i class='icon-pencil'></i> 编辑</button>"
                        html += "<button class='btn btn-sm btn-danger' οnclick='remove("
                            + id
                            + ")'><i class='icon-remove'></i> 删除</button>"
                        return html;
                    }
                }],
                "fnDrawCallback": function(){ 
   
                    var api = this.api();
                    //var startIndex= api.context[0]._iDisplayStart;//获取到本页开始的条数
                    api.column(0).nodes().each(function(cell, i) { 
   
                        //此处 startIndex + i + 1;会出现翻页序号不连续,主要是因为startIndex 的原因,去掉即可。
                        //cell.innerHTML = startIndex + i + 1;
                        cell.innerHTML =  i + 1;
                    });
                }
    });

控制器

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

    @RequestMapping
    public String user(){ 
   
        return "user";
    }

    @GetMapping("/{id}")
    @ResponseBody
    public Result<User> get(@PathVariable Integer id){ 
   
        User user =  userService.getById(id);

        return ResultUtil.ok(user);
    }

    /** * 分页查询 * @param username * @param pageNo * @param pageSize * @return */
    @PostMapping("/list")
    @ResponseBody
    public Result<IPage<User>> list(@RequestParam(value = "username", required = false) String username,
                             @RequestParam(defaultValue = "1") Integer pageNo,
                             @RequestParam(defaultValue = "10") Integer pageSize){ 
   
        // 构造查询条件
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        if(!StringUtils.isEmpty(username)){ 
   
            queryWrapper.like("username",username);
            queryWrapper.orderByDesc("create_time");
        }
        Page<User> page = new Page<>(pageNo,pageSize);

        IPage<User> result = userService.page(page, queryWrapper);
        // 设置总记录数
        result.setTotal(userService.count(queryWrapper));

        return ResultUtil.ok(result);
    }

    @PostMapping("/add")
    @ResponseBody
    public Result<String> add(@RequestBody User user){ 
   
        userService.save(user);

        return ResultUtil.ok("添加成功!");
    }

    @PostMapping("/modify")
    @ResponseBody
    public Result<String> modify(@RequestBody User user){ 
   
        userService.saveOrUpdate(user);

        return ResultUtil.ok("修改成功!");
    }

    @PostMapping("/remove")
    @ResponseBody
    public Result<String> remove(@RequestParam Integer id){ 
   
        userService.removeById(id);

        return ResultUtil.ok("删除成功!");
    }
}

需要源码的朋友给我来个一键三连,留个邮箱后发送!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/164542.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pip安装本地指定版本的whl文件

    pip安装本地指定版本的whl文件用pip装一些包的时候,由于pip默认的源也就那几个,换了清华的没用,豆瓣的也没用。。。老停在下载途中就不走了。。,所以就想到了能不能先把这些包down下来,然后本地进行安装呢?说干就干,这里以Tensorflow为例:1.下载.whl文件百度输入:TensorFlowpypi查看到最近能用的最新.whl版本为1.5.0rc1:点开该链接:选择好适合自己系统的版本,然后下载!重点来了:一般来说直…

    2022年6月5日
    110
  • Ping 命令详解[通俗易懂]

    简述:ICMP协议是“InternetControlMessagePtotocol”(因特网控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。ping(PacketInternetGroper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP;回声请求消息给目的地并报告是否收到所希望的ICMPecho(ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令ping命令通常用来作为网络可用性的检查。ping命

    2022年4月10日
    37
  • Cpu指令重排_cpu的指令集

    Cpu指令重排_cpu的指令集Cpu为了提高效率会对指令进行重排序,以适合cpu的顺序运行。但是指令重排会遵守As-if-serial的规则,就是所有的动作(Action)都可以为了优化而被重排序,但是必须保证它们重排序后的结果和程序代码本身的应有结果是一致的。所以这种情况在单线程中不会出现什么问题。而对于多线程,这个规则就失效了,所以可能会导致结果出现问题。解决办法就是内存屏障,也叫内存栅栏。是一种屏…

    2022年10月17日
    2
  • 原型模式的应用场景_原型化开发方法

    原型模式的应用场景_原型化开发方法ProtoType 原型模式动机模型定义实例结构要点总结笔记动机在软件系统中,经常面临着”某些结构复杂的对象“的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口如何应对这种变化?如何向”客户程序“(使用这些对象的程序)”隔离出“这些易变对象,从而使得”依赖这些易变对象的客户程序“不随着需求变化而变化?模型定义使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新对象。实例和工厂模型用的同一个实例工厂模式//工厂class SplitterF

    2022年8月9日
    2
  • fcos调研

    fcos调研有权重 https github com tianzhi0549 FCOS 这个有测试代码 https github com Stick To Object Detection API Tensorflow 介绍的 https blog csdn net qiu article details

    2025年8月12日
    0
  • PLSQL使用教程

    PLSQL使用教程plsql基本使用教程一、登录1、在这里配置好数据库服务,之后就可以登录了2、输入用户名和密码,并选择之前配置好的数据库服务。我这服务名取为localhost。(这个名字随意起。)二、创建表空间1、在SQL窗口中执行以下SQL代码。CREATETABLESPACEFJFEDWLOGGINGDATAFILE’C:\app\Administrator\oradata\orcl…

    2022年5月2日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号