ssm框架+Layui整合案例

2023-11-13

业余写得整合案例 想学习的可以来参考 初来乍到

准备工作

Layui+tomcat+mysql

目录

1 实现的效果图

 2 实现代码

2.0 前端代码

 2.1 登录页面login.jsp

2.2 登录后跳转的主页面 main.jap

web.xml 这里面主要是加载tomcat的时候被加载的配置文件

4 pom.xml jar包和依赖

2.3 后端代码 

2.3.1 resources中的代码

2.3.1.1 接口的映射文件 mapper文件里的

2.3.1.2 spring 和springmvc 映射文件

2.3.2 java代码

1 controller层代码

2 dao层

3 entity 实现类层

​ 

4service 业务层 (业务层是一个接口 所有有一个实现类)

5 util (这里面主要是用来渲染页面的时候一些规范)

6 interceptor 拦截器


1 实现的效果图

 

 

 

 

 

 

 

 

 2 实现代码

2.0 前端代码

 2.1 登录页面login.jsp

<%--
  Created by IntelliJ IDEA.
  User: 旧巷的常青藤
  Date: 2021/12/10
  Time: 14:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录页面</title>
    <%-- 引入外部jar包--%>
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css"/>
    <script type="text/javascript" src="${pageContext.request.contextPath}/layui/layui.js"></script>
    <style>
        #top{
            background: url("img/4.png") no-repeat;
            background-size: cover;
        }
    </style>
</head>

<body id="top">
<div style="width: 400px;height: 300px ;margin: auto;margin-top: 15%;">
<form class="layui-form" action="">
    <div class="layui-form-item">
        <label class="layui-form-label"><strong>账号</strong></label>
        <div class="layui-input-block">
            <input type="text" name="username" lay-verify="required" autocomplete="off" placeholder="请输入账号" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label"><strong>密码</strong></label>
        <div class="layui-input-block">
            <input type="password" name="password" lay-verify="pass" placeholder="请输入密码" autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button type="button" class="layui-btn" lay-submit="" lay-filter="demo1">登录</button>
            <button type="button" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>
</div>
</body>
<script>
    layui.use(['form'], function(){
        var form = layui.form
            ,layer = layui.layer
            ,$=layui.jquery;
        //自定义验证规则
        form.verify({
            pass: [
                /^[\S]{6,12}$/
                ,'密码必须6到12位,且不能出现空格'
            ]
        });
        //监听提交
        form.on('submit(demo1)', function(data){
            $.ajax({
                url:"${pageContext.request.contextPath}/login/login"
                ,type:"post"
                ,data:data.field
                ,success:function (result) {
                    if(result.code===2000){
                        layer.msg(result.msg,{icon:1})
                        location.href="${pageContext.request.contextPath}/main/main"
                    }else {
                        layer.msg(result.msg,{icon:5})
                    }
                }
                ,dataType:"json"
            })
            return false;
        });
    });
</script>
</html>

2.2 登录后跳转的主页面 main.jap

<%--
  Created by IntelliJ IDEA.
  User: 旧巷的常青藤
  Date: 2021/12/10
  Time: 15:53
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <link type="text/css" rel="stylesheet" href="${pageContext.request.contextPath}/layui/css/layui.css"/>
    <script type="text/javascript" src="${pageContext.request.contextPath}/layui/layui.js"></script>
</head>
<form class="layui-form" action="">
    <div class="layui-form-item">
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input type="text" name="loginName" placeholder="请输入员工姓名"  autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <input type="text" name="longinPass"   placeholder="请输入密码" autocomplete="off" class="layui-input">
            </div>
        </div>
        <div class="layui-inline">
            <div class="layui-input-inline">
                <button type="button" class="layui-btn" lay-submit="" lay-filter="search">搜索</button>
            </div>
        </div>
    </div>
</form>
<body>
<table class="layui-hide" id="test" lay-filter="test"></table>

<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm" lay-event="add">添加</button>
        <button class="layui-btn layui-btn-sm" lay-event="deleteAll">批量删除</button>
        <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
    </div>
</script>

<script type="text/html" id="barDemo">
    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<form class="layui-form" style="display: none" action="" id="uid" lay-filter="userform">
    <input type="text" style="display: none" name="userid"/>
    <div class="layui-form-item">
        <label class="layui-form-label">账号</label>
        <div class="layui-input-block">
            <input type="text" name="loginname" lay-verify="title" autocomplete="off" placeholder="请输入标题" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">密码</label>
        <div class="layui-input-block">
            <input type="text" name="longinpass" lay-verify="title" autocomplete="off" placeholder="请输入标题" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">手机号</label>
        <div class="layui-input-block">
            <input type="text" name="phone" lay-verify="required"  placeholder="请输入" autocomplete="off" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <label class="layui-form-label">职位</label>
        <div class="layui-input-block">
            <input type="text" name="realname" lay-verify="title" autocomplete="off" placeholder="请输入标题" class="layui-input">
        </div>
    </div>
    <div class="layui-form-item">
        <div class="layui-input-block">
            <button type="button" class="layui-btn" lay-submit="" lay-filter="demo1">提交修改</button>
            <button type="reset" class="layui-btn layui-btn-primary">重置</button>
        </div>
    </div>
</form>
<script>
    layui.use('table', function(){
        var form = layui.form;
        var table = layui.table;
        var $ =layui.jquery;

        //添加表单的搜索监听事件
        form.on('submit(search)',function(data){
            //表格数据重新渲染。
            table.reload('test',{
                page: {
                    curr: 1 //重新从第 1 页开始
                },
                where: { //按照什么进行查找
                    "loginName": data.field.loginName,
                    "longinPass": data.field.longinPass
                }
            })
        });
        table.render({
            elem: '#test'
            ,url:'${pageContext.request.contextPath}/userInfo/list'
            ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
            ,title: '书籍数据表'
            ,cols: [[
                {type: 'checkbox', fixed: 'left'}
                ,{field:'userid', title:'用户编号', sort: true}
                ,{field:'loginname', title:'用户名', edit: 'text'}
                ,{field:'longinpass', title:'密码',edit: 'text', sort: true}
                ,{field:'phone', title:'手机号', width:100}
                ,{field:'realname', title:'职位'}
                ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
            ]]
            ,page: true
            ,limit:5
            ,limits:[2,5,10,15]
        });
        //监听行工具事件
        table.on('tool(test)', function(obj){
            var data = obj.data;
            //console.log(obj)
            if(obj.event === 'del'){
                layer.confirm('真的删除行么', function(index){
                  $.ajax({
                      url:"${pageContext.request.contextPath}/userInfo/delete",
                      data:{"userid":data.userid},
                      type: "post",
                      success:function (rel) {
                          if (rel.code===2000){
                              layer.closeAll()
                              layer.msg(rel.msg,{icon:1})
                              table.reload("test")
                          }
                      },
                      dataType:"json"
                  })
                });
            } else if(obj.event === 'edit') {
                layer.open({
                    type: 1
                    , id: 'layerDemo'//防止重复弹出
                    , content: $("#uid")
                    , shade: 0 //不显示遮罩
                });
            }
            form.val("userform",data)
        });
        //监听提交
        form.on('submit(demo1)', function(data){
           $.ajax({
               url:"${pageContext.request.contextPath}/userInfo/update",
               data:data.field,
               type:"post",
               success:function (rel) {
                   layer.closeAll()
                   layer.msg(rel.msg,{icon: 1})
                   table.reload("test")
               },
               dataType: "json"
           })
        });
        //头工具栏事件
        table.on('toolbar(test)', function(obj){
            var checkStatus = table.checkStatus(obj.config.id);
            var  event  = obj.event;
            $("#uid")[0].reset();
            if (event==="add"){
                layer.open({
                    type: 1
                    ,content:$("#uid")
                    ,shade: 0 //不显示遮罩
                });
            }else if (event==="deleteAll"){
                var data = checkStatus.data;
                if (data.length<=0){
                    layer.msg("请选择你要删除的行")
                }else {
                     var  str =""
                    for (var i=0;i<data.length;i++){
                        str=str+","+data[i].userid
                    }
                    str=str.substring(1,str.length)
                    let strings = str.split(",");
                    console.log(strings)
                    $.ajax({
                        url:"${pageContext.request.contextPath}/userInfo/deleteAll"
                        ,data:{"userid":str}
                        ,success:function (rel) {
                            if (rel.code===2000){
                                layer.closeAll()
                                layer.msg(rel.msg,{icon:1})
                                table.reload("test")
                            }
                        },
                        dataType: "json"
                    })
                }

            }
        });
    })
</script>
</body>
</html>

web.xml 这里面主要是加载tomcat的时候被加载的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml</param-value>
  </context-param>
</web-app>

4 pom.xml jar包和依赖

<?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>com.lc</groupId>
  <artifactId>12-10ssm</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <!--分页-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.11</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>
    <!--spring和mybatis整合的依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.6</version>
    </dependency>
    <!--druid连接池-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.4</version>
    </dependency>
    <!--springmvc-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>
    <!--mybatis的依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>
    <!--mysql的依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.26</version>
    </dependency>
    <!--lombok-->
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.22</version>
    </dependency>
    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.4</version>
    </dependency>
    <!--servlet和jsp-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>servlet-api</artifactId>
      <version>2.5</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.2</version>
    </dependency>
    <!--log4j-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.30</version>
    </dependency>

  </dependencies>
</project>

 

2.3 后端代码 

这里我主要用的是ssm框架  不会的 可以去看一下我的博客 里面详细的介绍的有

2.3.1 resources中的代码

这里面主要是接口方法的映射文件

2.3.1.1 接口的映射文件 mapper文件里的

这个可以自动生成 不懂得 可以去看我之前的博客  这里我就不多说了 

2.3.1.2 spring 和springmvc 映射文件

 spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--包扫描:业务层service:-->
    <context:component-scan base-package="com.lc.service"/>
    <!--定义数据源:
   https://blog.csdn.net/qq_35038153/article/details/77353689
          DBCP:
          C3P0:
          Proxool:
          BoneCP:
          DRUID: 现在企业用的比较多
               driverClassName = com.mysql.cj.jdbc.Driver
               driver=com.mysql.cj.jdbc.Driver
               url=jdbc:mysql:///student?serverTimezone=GMT&useSSL=false
               username=root
               password=密码
               #初始化连接数量#
               initialSize = 5
               #最大连接数量
               maxACtive = 10
               #等待时间 3秒
               maxWait = 3000
    -->
    <bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/jdbc?serverTimezone=Asia/Shanghai"/>
        <property name="username" value="root"/>
        <property name="password" value="2001"/>
        <!--初始化链接数量 根据你的项目评估-->
        <property name="initialSize" value="5"/>
        <!--  最大连接数-->
        <property name="maxActive" value="10"/>
        <!-- 等待时间  毫秒数-->
        <property name="maxWait" value="5000"/>
    </bean>
    <!--spring把mybatis配置文件的内容封装到SqlSessionFactorybean类中。-->
    <bean id="session" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="ds"/>
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置参数,一行配置一个 -->
                        <value>
                            params=value1
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
    <!--为指定dao接口生成代理实现类。交于spring容器来管理dao接口的代理实现类对象。-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--basePackage:为那些包下的dao接口生成代理实现类。-->
        <property name="basePackage" value="com.lc.dao"/>
    </bean>

</beans>

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!--包扫描-->
        <context:component-scan base-package="com.lc.controller"/>
    <!--特殊注解-->
        <mvc:annotation-driven/>
    <!--静态资源放行-->
        <mvc:default-servlet-handler/>
    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--声明拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login/login"/>
            <mvc:exclude-mapping path="/img/4.png"/>
            <bean class="com.lc.interceptor.Myinterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>

日志文件 

### 设置###
log4j.rootLogger = debug,stdout,D,E

### 输出信息到控制抬 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

### 输出DEBUG 级别以上的日志到=E://logs/error.log ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = F://logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

### 输出ERROR 级别以上的日志到=E://logs/error.log ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File =F://logs/error.log 
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

2.3.2 java代码

1 controller层代码

 pagecontroller

package com.lc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 15:52
 **/
@Controller
@RequestMapping("main")
public class PageController {
    @RequestMapping("main")
    public String main(){
        return "mian";
    }
}

UserController

package com.lc.controller;

import com.lc.service.UserService;
import com.lc.util.CommonResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 15:46
 **/
@Controller
@RequestMapping("login")
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("login")
    @ResponseBody
    public CommonResult login(String username,String password){
        CommonResult nameAndPass = userService.findNameAndPass(username, password);
        return nameAndPass;
    }

}

UserinfoController

package com.lc.controller;

import com.lc.entity.User;
import com.lc.entity.Userinfo;
import com.lc.service.UserInfoService;
import com.lc.util.CommonResult;
import com.lc.util.TableYaui;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 18:45
 **/
@Controller
@RequestMapping("userInfo")
public class UserInfoController {
    @Autowired
    private UserInfoService userInfoService;

    @RequestMapping("list")
    @ResponseBody
    public TableYaui list(int page,int limit,String loginName,String longinPass){
        TableYaui byName = userInfoService.findByName(page, limit, loginName, longinPass);
        return byName;
    }
    @RequestMapping("delete")
    @ResponseBody
    public CommonResult delete(int userid){
        CommonResult delete = userInfoService.delete(userid);
        return delete;
    }
    @RequestMapping("update")
    @ResponseBody
    public CommonResult update(Userinfo userinfo){
        if (userinfo.getUserid()!=null){
            CommonResult update = userInfoService.update(userinfo);
            return update;
        }else {
            CommonResult insert = userInfoService.insert(userinfo);
            return insert;
        }
    }

    @RequestMapping("deleteAll")
    @ResponseBody
    public CommonResult delete(String userid){
        CommonResult commonResult = userInfoService.deleteByPrimaryKey(userid);
        return commonResult;

    }
}

2 dao层

这里面自动生成出来的  但是我在里面新添加了方法注意看

userdao

package com.lc.dao;

import com.lc.entity.User;
import org.apache.ibatis.annotations.Param;

public interface UserDao {
    int deleteByPrimaryKey(Integer id);

    int insert(User record);

    int insertSelective(User record);

    User selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(User record);

    int updateByPrimaryKey(User record);

    User findNameAndPass(@Param("username") String username, @Param("password") String password);

}

 userinfodao

​
package com.lc.dao;

import com.lc.entity.Userinfo;
import com.lc.util.CommonResult;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserinfoDao {
    int deleteByPrimaryKey(Integer userid);

    int insert(Userinfo record);

    int insertSelective(Userinfo record);

    Userinfo selectByPrimaryKey(Integer userid);

    int updateByPrimaryKeySelective(Userinfo record);

    int updateByPrimaryKey(Userinfo record);


    List<Userinfo> findByName(@Param("loginName") String loginName, @Param("longinPass") String longinPass);
}

​

3 entity 实现类层

 

user

package com.lc.entity;

import lombok.Data;

import java.io.Serializable;

/**
 * user
 * @author 
 */
@Data
public class User implements Serializable {
    /**
     * 鐢ㄦ埛id
     */
    private Integer id;

    /**
     * 鐧诲綍鍚?
     */
    private String username;

    private String password;

    /**
     * 真实姓名
     */
    private String realname;

    private Integer status;

    private static final long serialVersionUID = 1L;
}

 userinfo

package com.lc.entity;

import lombok.Data;

import java.io.Serializable;

/**
 * userinfo
 * @author 
 */
@Data
public class Userinfo implements Serializable {
    /**
     * 用户id
     */
    private Integer userid;

    /**
     * 登录名
     */
    private String loginname;

    /**
     * 登录密码
     */
    private String longinpass;

    /**
     * 手机号
     */
    private String phone;

    /**
     * 真实姓名
     */
    private String realname;

    private static final long serialVersionUID = 1L;
}

4service 业务层 (业务层是一个接口 所有有一个实现类)

UserService
package com.lc.service;

import com.lc.util.CommonResult;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 15:10
 **/
public interface UserService {
    public CommonResult findNameAndPass(String username, String password);

}
UserInfoService
package com.lc.service;

import com.lc.entity.Userinfo;
import com.lc.util.CommonResult;
import com.lc.util.TableYaui;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 18:40
 **/
public interface UserInfoService {
    public TableYaui findByName(int page, int limit, String loginName, String longinPass);
    public CommonResult delete(int userid);
    public CommonResult update(Userinfo userinfo);
    public CommonResult insert(Userinfo userinfo);
    public CommonResult deleteByPrimaryKey(String userid);
}
UserServiceImpl
package com.lc.service.userserviceimpl;

import com.lc.dao.UserDao;
import com.lc.entity.User;
import com.lc.service.UserService;
import com.lc.util.CommonResult;
import com.lc.util.WebUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 15:28
 **/
@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    public CommonResult findNameAndPass(String username, String password) {
        User user = userDao.findNameAndPass(username, password);
        if (user==null){
            return new CommonResult(5000,"账号或密码错误",null);
        }
        if (user.getStatus()==2){
            return new CommonResult(5000,"该账户已经被限制",null);
        }
        WebUtil.getSession().setAttribute("user",user);
        return new CommonResult(2000,"登录成功",null);
    }
}
UserInfoServiceImpl
package com.lc.service.userserviceimpl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.lc.dao.UserinfoDao;
import com.lc.entity.Userinfo;
import com.lc.service.UserInfoService;
import com.lc.util.CommonResult;
import com.lc.util.TableYaui;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 18:42
 **/
@Service("userInfoService")
public class UserInfoServiceImpl implements UserInfoService {
    @Autowired
    private UserinfoDao userinfoDao;
    public TableYaui findByName(int page, int limit, String loginName, String longinPass) {
        PageHelper.startPage(page,limit); // 开启分页
        List<Userinfo> byName = userinfoDao.findByName(loginName, longinPass);
        PageInfo<Userinfo> userinfoPageInfo = new PageInfo<Userinfo>(byName);
        return new TableYaui(0,"",userinfoPageInfo.getTotal(),userinfoPageInfo.getList());
    }

    public CommonResult delete(int id) {
        int delete = userinfoDao.deleteByPrimaryKey(id);
        if (delete>-2){
            return new CommonResult(2000,"删除成功",null);
        }else {
            return new CommonResult(5000,"删除失败",null);
        }
    }

    public CommonResult update(Userinfo userinfo) {
        int i = userinfoDao.updateByPrimaryKey(userinfo);
        if (i>-2){
            return new CommonResult(2000,"修改成功",null);
        }else {
            return new CommonResult(5000,"修改失败",null);
        }
    }

    public CommonResult insert(Userinfo userinfo) {
        int insert = userinfoDao.insert(userinfo);
        if (insert>-2){
            return new CommonResult(2000,"添加成功",null);
        }else {
            return new CommonResult(5000,"添加失败",null);
        }
    }

    public CommonResult deleteByPrimaryKey(String userid) {
        String[] split = userid.split(",");
        int i=0;
        for (String s : split) {
            i = userinfoDao.deleteByPrimaryKey(Integer.parseInt(s));

        }
        if (i>-2){
            return new CommonResult(2000,"批量删除成功",null);
        }else {
            return new CommonResult(5000,"批量删除失败",null);
        }
    }
}

5 util (这里面主要是用来渲染页面的时候一些规范)

WebUtil
package com.lc.util;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * @program: 12-10ssm1
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-11 09:10
 **/
public class WebUtil {
    /***
     * 根据request获取session
     * @return
     */
    public static HttpSession getSession(){
        HttpSession session = getRequest().getSession();
        return session;
    }

    /***
     * 获取request
     * @return
     */
    public static HttpServletRequest getRequest(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        return request;
    }
}
TableYaui
package com.lc.util;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 16:26
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class TableYaui {
    private int code;
    private String msg;
    private long count;
    private Object data;
}
CommonResult
package com.lc.util;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @program: 12-10ssm
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-10 15:35
 **/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResult {
    private int code;
    private String msg;
    private Object data;
}

6 interceptor 拦截器

package com.lc.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @program: 12-10ssm1
 * @description:
 * @author: IX亿少女的梦
 * @create: 2021-12-11 09:09
 * 定义一个拦截器  实现HandlerInterceptor 从写 preHandle方法
 * 
 **/
public class Myinterceptor  implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object user = request.getSession().getAttribute("user");
        if (user!=null){
            return true;
        }else {
            response.sendRedirect(request.getContextPath()+"/login.jsp");
            return false;
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ssm框架+Layui整合案例 的相关文章

  • 如何将选定的元素从 devTools 页面发送到 chrome 侧边栏页面

    我正在开发 chrome devTools 扩展 基本上 我在 元素 面板中添加了一个侧边栏窗格 开发工具 js chrome devtools panels elements createSidebarPane ChromeTrast f
  • 为什么我的事件处理程序会导致“不是函数”错误,但可以在 Firebug 控制台中运行?

    使用JQuery 1 2 6 在Firefox 3和IE7上进行测试 我有一些非常基本的 JavaScript 代码来重新加载验证码图像 在我的 JS 文件中 我有 var Captcha count 0 Refresh function
  • Mongoose 查询执行后回调函数从未被调用

    以下是我的代码 mongoose connect mongodb localhost mydatabase var db mongoose connection db on error console error bind console
  • Javascript:使用 IIFE 和块语句之间的区别

    IIFE主要用于封装作用域 function let myVar 10 not global 但为什么不直接使用块语句呢 let myVar 10 also not global 除了范围封装之外 进一步使用 IIFE 是否还有其他好处 块
  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • jslint 配置 |传递全局变量

    我如何提醒 jshint 我有全局变量 即命名它们 我知道你可以做到这一点 但我不记得语法了 我在这里定义了一个全局的 function window glob1 local var 稍后像这样使用 不同的 IIFE function gl
  • vuejs 模板和 asp.net 部分视图,好的做法吗?

    我在网站中使用 Vue js 并将模板添加到 html 代码中 并将 js 代码添加到单个 js 文件中 所以我不想使用 vue Vuefy Browserfy 方法 而是稍后捆绑并缩小我的 js 文件 由于我必须使用 Asp Net MV
  • Angular UI-Router:多个 URL 到单一状态

    我已经开始使用 Angular 的 ui router 并且我正在尝试弄清楚如何让多个 URL 引用单个状态 例如 orgs 12354 overview retyrns the same pages as org overview 我的
  • IE localStorage 事件失火

    在 Internet Explorer 9 和 10 中 localStorage 实现意外地触发事件 这里有很棒的线索 Chrome 的 localStorage 实现存在错误 https stackoverflow com questi
  • 将文本字段限制为仅包含数字的最佳方法?

    I m using the following Javascript to restrict a text field on my website to only accept numerical input and no other le
  • JQuery $.ajax() 在 java servlet 中发布数据

    我想将数据发送到 java servlet 进行处理 数据将具有可变长度并采用键 值对 A1984 1 A9873 5 A1674 2 A8724 1 A3574 3 A1165 5 数据不需要这样格式化 这就是我现在的方式 var sav
  • ES6 静态方法引用 self? [复制]

    这个问题在这里已经有答案了 我有两节课 存储库和用户存储库 我想在 Repository 中定义一个静态方法 该方法在运行时调用 UserRepository 中的静态函数 有什么干净的方法可以做到这一点吗 class Repository
  • 为什么我的 D3 SVG 图上的轴不会更新?

    I have 简单的 D3 散点图 http www raxacoricofallapatorius com test scattertest html我在显示数据的几个不同属性之间切换 但是虽然我可以更改数据点 并按照我想要的方式进行转换
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 如何使用 Javascript OAuth 库不暴露您的密钥?

    看着Twitter OAuth 库 https dev twitter com docs twitter libraries 我看到了这个注释 将 JavaScript 与 OAuth 结合使用时要小心 不要暴露你的钥匙 然后 看着jsOA
  • 在 Firestore 文本字段中存储文本文件并删除换行符

    我正在尝试将 CSV 文件存储在 Cloud Firestore 内的文本字段中 然而 Firestore 正在删除所有换行符并将整个 CSV 文件存储为一行 这Firestore 数据类型文档 https firebase google
  • Safari 扩展将消息发送到特定选项卡

    有没有办法从全局页面发送消息到特定选项卡 我目前正在做的是 在创建选项卡时 注入的脚本会创建一个唯一的 ID 并将包含该编号的消息发送到全局页面 并且全局页面会保存该编号 如果全局页面需要发送一些数据到一个tab 即 tab 3 然后全局页

随机推荐

  • code换取微信openid_微信支付JSAPI攻略

    前两天给商城加了个微信支付 非H5支付 相当于微信公众号网页支付 真是一言难尽啊 我只能说菜是原罪 再次流下了没技术的眼泪 总结一下 大概分为7个步骤 第一步 用户触发微信支付事件时 我们大概需要判断一下它是不是用微信客户端打开的 如果不是
  • C语言文件操作(超详细)

    前言 本文主要介绍C语言中文件操作的相关内容 例 文件读 写等相关函数 1 什么是文件 文件是以计算机硬盘为载体存储在计算机上的信息集合 是数据源的一种 最主要的作用是保存数据 将数据放入文件中 相比代码程序中堆栈上的数据 其优点在于可以随
  • 在MS Word 中添加 Mathtype 插件(vbe6ext.olb不能被加载问题 已解决)

    在MS Word中更好的使用Mathtype 本人不提供任何版本的 mathtype 软件安装包 问题背景 尝试安装插件mathtype到word遇到报错三连 1 VBE6EXT OLB不能被加载 2 未知的错误 50001 3 由于宏安全
  • 《牛客网刷题之零基础入门前端之JavaScript》

    目录 ES5 数据类型 基本数据类型检测 检测复杂数据类型 数据类型转换 运算符 阶乘 绝对值 幂 平方根 余数 数组求和 完全等同 或运算 且运算 字符串字符统计 流程控制 返回星期数 内置对象 从大到小排序 大写字符串 对象属性键名 对
  • java反射详解

    一 反射简介 Class类与java lang reflect库一起对反射的概念进行了支持 该类库包含了Field Method及Constructor 这些类型的对象是由JVM在运行时创建的 这样你就可以使用Constructor创建新的
  • VMware Host Only方式联网配置注意

    VMware下安装CentOS虚拟机 网络配置为Host Only方式 将物理网卡分享给VMnet1以保证虚拟机联网 这样不像Bridge方式要占用单独的IP 若是公共访问就要用bridge方式了 也不会向NAT方式一样每次的IP都会变化
  • 《Unity 3D游戏开发 第2版》宣雨松 pdf分享下载

    链接 pan baidu com s 1LfRTGUma 提取码 e2sn 转载于 https juejin im post 5c2b58895188256e047dc2b5
  • 小程序的点击复制功能和长按复制功能

    前言 在小程序中实现点击复制功能和长按复制功能 主要使用wx setClipboardData 小程序的复制功能 官方方法 wx setClipboardData 小程序的复制功能 功能描述 设置系统剪贴板的内容 调用成功后 会弹出 toa
  • SpringBoot:返回响应,统一封装

    说明 接口的返回响应 封装成统一的数据格式 再返回给前端 返回响应 统一封装实体 数据结构如下 代码 package com example core model import io swagger v3 oas annotations m
  • 官网下载git缓慢问题

    问题描述 为上传项目到github git就避免不了需要下载 但是在git官网中下载 1 2kb s的速度 中途还会卡顿 解决方案 在腾讯软件中心下载 几分钟方可下载完成 1 电脑上有电脑管家的话 选择软件管理 搜索git就可以下载 2 直
  • MBR2GPT:将 MBR 转换为 GPT

    几年前 Windows操作系统通常安装在主引导记录 MBR 分区上 但是 随着固件 UEFI 和更大磁盘的安全进步 现在需要 GUID 分区表 GPT 磁盘来利用这些新功能 如果您将系统磁盘配置为 MBR 磁盘 则MB42GPT exe实用
  • logistic回归详解一:为什么要使用logistic函数

    项目github地址 bitcarmanlee easy algorithm interview and practice 欢迎大家star 留言 一起学习进步 从线性分类器谈起 给定一些数据集合 他们分别属于两个不同的类别 例如对于广告数
  • php 判断数组里有大于0 的值_如何比较两个PHP多维数组

    点击蓝字关注我们 每天获取最新的编程小知识 源 php中文网 源 www php cn 判断两个多维数组是否相等 或有哪些元素区别 我们可以通过PHP中array udiff 函数和create function 方法 strcmp 等函数
  • C++ map

    定义一个map对象 map
  • python求水仙花数(用列表生成式)

    水仙花数是指一个n位数 n 3 它的每位上的数字的n次幕之和等于它本身 例如 13 53 3 3 153 求100 999之间所有的水仙花数 i for i in range 100 1000 if i 100 3 i 10 10 3 i
  • LetCode#7给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。JAVA

    每天一道算法题 拒绝当懒狗 一起进步 题目 给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 231 231 1 就返回 0 假设环境不允许存储 64 位整数 有符号或
  • MySQL 可重复读隔离级别,完全解决幻读了吗?

    我在上一篇文章中提到 MySQL InnoDB 引擎的默认隔离级别虽然是 可重复读 但是它很大程度上避免幻读现象 并不是完全解决了 解决的方案有两种 针对快照读 普通 select 语句 是通过 MVCC 方式解决了幻读 因为可重复读隔离级
  • 通过URL自动触发Jenkins构建任务

    方法一 进入jenkins安全设置 开启安全域及授权策略 2 在用户设置处生成api token 复制生成的token 3 选择测试项目 配置 构建触发器 选择触发远程构建 将token粘贴在身份验证令牌处 保存 4 在浏览器中输入 htt
  • 联想ideapad700-15isk(小新线下版)黑苹果完美驱动附详细安装过程

    直接上安装的流程 欢迎大家关注我的个人博客 联想ideapad700 15isk 我的配置如下 前期准备 制作安装盘 盘符分配 设置U盘启动 开始安装 添加本地引导 安装完成进入设置 关于clover 划重点 2020年8月30日更新 20
  • ssm框架+Layui整合案例

    业余写得整合案例 想学习的可以来参考 初来乍到 准备工作 Layui tomcat mysql 目录 1 实现的效果图 2 实现代码 2 0 前端代码 2 1 登录页面login jsp 2 2 登录后跳转的主页面 main jap web