简易SSM+Layui 查询信息项目

      入职的第一个星期,领导安排做了一个测试新人项目,框架要求用SpringMVC,数据库使用Oracle,页面没有要求,所以我就选用了我比较熟悉的Layui,小伙伴可以把该项目当成简易的SSM项目框架使用,不需要使用时不需要再次搭建。

spring-mybatis配置

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                        http://www.springframework.org/schema/tx
                        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
                        http://www.springframework.org/schema/aop
                        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.cn.ssm"/>


    <!-- 引入连接数据库参数的配置文件 -->
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- 自动扫描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:*com/cn/ssm/mapping/*.xml"></property>
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cn.ssm.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 拦截器方式配置事物 -->
    <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="append*" propagation="REQUIRED"/>
            <tx:method name="save*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="modify*" propagation="REQUIRED"/>
            <tx:method name="edit*" propagation="REQUIRED"/>
            <tx:method name="insert*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="remove*" propagation="REQUIRED"/>
            <tx:method name="confirm*" propagation="REQUIRED"/>
            <tx:method name="start*" propagation="REQUIRED"/>
            <tx:method name="sendMes" propagation="REQUIRED"/>
            <tx:method name="read*" propagation="REQUIRED"/>
            <tx:method name="get*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="find*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="load*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="search*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="datagrid*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="select*" propagation="REQUIRED" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

<!--    <aop:config>-->
<!--        <aop:pointcut id="mainPointcut" expression="execution(* com.cn.ssm.service.*(..))"/>-->
<!--        <aop:advisor pointcut-ref="mainPointcut" advice-ref="transactionAdvice" order="2"/>-->
<!--    </aop:config>-->
</beans>  

springMvc配置

<?xml version="1.0" encoding="UTF-8"?>
<!-- ~ Copyright (c) 2009-2013 NancyNing All rights reserved. ~ @(#) 
	spring-mvc.xml 2013-05-20 10:09 -->

<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    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-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
     <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->  
    <context:component-scan base-package="com.cn.ssm.controller" />  
    <mvc:annotation-driven />
    <mvc:default-servlet-handler/>
    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->  
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>  
    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->  
    <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->  
            </list>  
        </property>  
    </bean>  
    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
      
    <!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->  
    <bean id="multipartResolver"    
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默认编码 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 内存中的最大值 -->  
        <property name="maxInMemorySize" value="40960" />    
    </bean>
    <mvc:interceptors>
        <!--登录拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login"/>
            <mvc:exclude-mapping path="/js/**"/>
            <mvc:exclude-mapping path="/layui/**"/>
            <mvc:exclude-mapping path="/css/**"/>
            <bean class="com.cn.ssm.common.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>

log4j 配置

### 设置###
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.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.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

登录页面jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登录页面</title>
    <link rel="stylesheet" href="css/login.css" media="all">
    <link rel="stylesheet" href="css/layui.css">
</head>
<body style="margin: 0px;
	padding: 0px;
	background-color: #005cb1;
	width: 100%;
	height: 100%;
	text-align: center;">
<form id="userForm" class="layui-form" method="post">
    <div>
        <div id="card">
            <div id="top" style="text-align: center;
	font-family: 'Microsoft Tai Le Bold', 'Microsoft Tai Le Regular',
		'Microsoft Tai Le';
	font-weight: bold;
	font-style: normal;
	font-size: 20px;
	height: 50px;
	color: white;">查询登录
            </div>
            <div>
                <div>
                    <input id="username" name="username" type="text" placeholder="账号" autocomplete="off" style="background-color: white;
	border-radius: 10px;
	width: 390px;
	height: 40px;
	margin-top: 65px;
	text-indent: 15px;"/>
                </div>
            </div>
            <div>
                <div>
                    <input id="password" type="password" name="password" placeholder="密码" autocomplete="off" style="	background-color: white;
	border-radius: 10px;
	width: 390px;
	height: 40px;
	margin-top: 25px;
	text-indent: 15px;"/>
                </div>
            </div>
            <div>
                <div style="color: #FCC800;width: 390px;margin: auto;">
                    <button id="login" type="button" style="margin-top: 25px;background-color: #005cb1" lay-submit
                            lay-filter="login"
                            class="layui-btn layui-btn-fluid">登录
                    </button>
                </div>
            </div>
            <div>
                <div class="layui-col-xs-12" style="margin-top: 50px; color: white;">Project one test</div>
            </div>
        </div>
    </div>
</form>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="layui/layui.all.js" charset="utf-8"></script>
<script type="text/javascript" src="layui/lay/modules/layer.js" ></script>
<script type="text/javascript" src="js/login.js" charset="utf-8"></script>
</body>
</html>

需要layui的资源文件直接去layui官网下载即可。

登录页面js


layui.use('form', function() {
    var form = layui.form;
    var layer = layui.layer;
    form.on('submit(login)', function(data){
        $.ajax({
            url: '/login',
            type : 'POST',
            data: {
                'username': data.field.username,
                'password': data.field.password
            },
            dataType: 'json',
            success: function (res) {
                if (res.msg != '' && res.msg != null) {
                    layer.msg(res.msg);
                    return false;
                }
                $(location).prop('href','/index')
            },
            error: function (res) {
                layer.msg("登录失败");
                return false;
            }
        });
    });
})

$(document).keyup(function(e){
    if (e.keyCode == 13) {
        if ($('username').val() != '' && $('password').val() != '') {
            $('#login')[0].click();
        }
    }

});

登录后台

package com.cn.ssm.controller;

import javax.servlet.http.HttpSession;

@Controller
public class LoginController {

    @Autowired
    private UsersService usersService;
    @Autowired
    private IDCardService idCardService;
    /**
     * 用户登录
     *
     * @param user
     * @param model
     * @param session
     * @return
     */
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public Result login(Users user, Model model, HttpSession session) {
        Result<Object> result = new Result();
        //获取用户名和密码
        String username = user.getUsername();
        String password = user.getPassword();
        //些处横板从数据库中获取对用户名和密码后进行判断
        Users userInfo = usersService.selectByName(username);
        if (userInfo == null) {
            result.setCode("1");
            result.setMsg("用户名或密码错误");
            return result;
        }else {
            String pwd = userInfo.getPassword();
            if (pwd.equals(password)) {
                session.setAttribute("USER_SESSION", userInfo);
                return result;
            } else {
                result.setCode("1");
                result.setMsg("用户名或密码错误");
                return result;
            }
        }
    }
}

Result是我自己封装的一个类,主要用于返回信息,状态和数据

Result类代码

package com.cn.ssm.domain;

public class Result<T> {

        private String code = "0";

        private String msg;

        private T result;

        public String getCode() {
            return code;
        }

        public void setCode(String code) {
            this.code = code;
        }

        public String getMsg() {
            return msg;
        }

        public void setMsg(String msg) {
            this.msg = msg;
        }

        public T getResult() {
            return result;
        }

        public void setResult(T result) {
            this.result = result;
        }
    }

之后便是调用service里面selsctByName(),在写一些简单的sql即可。

登录页面和主页面样式一样,用到layui的主要包含数据表格,以下是代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" isELIgnored="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>信息详情</title>
    <link rel="stylesheet" href="../../css/login.css" media="all">
    <link rel="stylesheet" href="../../css/layui.css">
</head>
<body >
<span>身份证信息</span>
<table class="layui-hide" id="one"></table><br><br>
<span>登记信息</span>
<table class="layui-hide" id="two"></table><br><br>
<span>完成情况信息</span>
<table class="layui-hide" id="three"></table>
<input type="hidden" id="ID" value="${info.ID}">
<input type="hidden" id="type" value="${info.type}">


<script type="text/javascript" src="../../js/jquery.min.js"></script>
<script type="text/javascript" src="../../layui/layui.all.js" charset="utf-8"></script>
<script type="text/javascript" src="../../layui/lay/modules/layer.js" ></script>
<script type="text/javascript" src="../../js/indexTable.js" charset="utf-8"></script>
<script type="text/javascript" src="../../js/dateFormat.js" charset="utf-8"></script>
</body>
</html>

相应JS代码:

$(function () {
    var id = $("#ID").val();
    var type = $("#type").val();

    var table = layui.table;
    var url = getRootPath() + "/station/StationInfo/searchList";
    var cols =
        layui.use('table', function () {
            var table = layui.table;
            table.render({
                elem: '#one'
                , url: '/searchList?ID=' + id
                , cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                , cols: [[
                    {field: 'id', width: 200, title: '身份证号', sort: true},
                    {field: 'typeName', width: 200, title: '居住类型'}
                    , {field: 'startTime', width: 200, title: '开始时间', templet: '#startTime'}
                    , {field: 'endTime', width: 200, title: '截止时间', templet: '#endTime'}
                ]], page: true   //开启分页
                , limit: 10   //默认十条数据一页
                , limits: [10, 20, 30, 50]  //数据分页条
            });
            table.render({
                elem: '#two'
                , url: '/searchListTwo?ID=' + id + "&type=" + type
                , cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                , cols: [[
                    {field: 'dzsffsbh', width: 200, title: '是否申请地址变更'},
                    {field: 'wyjjrq', width: 200, title: '网约取件时间', templet: '#wyjjrq'}
                    , {field: 'jjr_xm', width: 200, title: '取件人姓名'}
                    , {field: 'jjr_lxdh', width: 200, title: '取件联系电话'}
                    , {field: 'jjr_dz', width: 300, title: '取件地址'}

                    , {field: 'jjtscg', width: 200, title: '是否取件成功'}
                    , {field: 'jjsbyy', width: 200, title: '取件失败原因'}
                    , {field: 'jjsj', width: 200, title: '取件时间', templet: '#jjsj'}
                    , {field: 'jjdh', width: 200, title: '取件单号'}
                    , {field: 'sjr_xm', width: 200, title: '收件人姓名'}

                    , {field: 'sjr_lxdh', width: 200, title: '收件人联系电话'}
                    , {field: 'sjr_dz', width: 200, title: '收件地址'}
                    , {field: 'psrq', width: 200, title: '配送日期'}
                    , {field: 'psdh', width: 200, title: '配送单号'}
                    , {field: 'xgsj', width: 200, title: '修改日期', templet: '#xgsj'}
                ]],
                parseData: function (res) {
                    console.log(res);
                }
            });
            table.render({
                elem: '#three'
                , url: '/searchListThree?ID=' + id
                , cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增
                , cols: [[
                    {field: 'yjmx_qzrq', width: 200, title: '签注时间', templet: '#yjmx_qzrq'},
                    {field: 'yjmx_sfps', width: 200, title: '是否配送'}
                    , {field: 'yjmx_pspc', width: 200, title: '配送批次'}
                    , {field: 'yjmx_qsrq', width: 200, title: '签收日期'}
                    , {field: 'yjmx_psdh', width: 200, title: '配送单号'}
                ]]
                , page: true   //开启分页
                , limit: 10   //默认十条数据一页
                , limits: [10, 20, 30, 50]  //数据分页条
            });
        });
});

需要注意的一点是lauyi需特定的返回数据格式才能在页面显示出来,这是后台的代码

   @RequestMapping("/searchList")
    @ResponseBody
    public Map<String,Object> searchListTwo(String ID,String type){
        Map<String,Object> resultMap = new HashMap<String, Object>();
        List<IDCard> list = new ArrayList<IDCard>();
        if ("2".equals(type)) {
            list = idCardService.selectByTypeOne(ID);
        } else {
            list = idCardService.selectByTypeTwo(ID);
        }
        for (int i = 0;i<list.size();i++){
            if ("1".equals(list.get(i).getDzsffsbh())){
                list.get(i).setDzsffsbh("已变更");
            }else{
                list.get(i).setDzsffsbh("未变更");
            }
            if ("1".equals(list.get(i).getJjtscg())){
                list.get(i).setJjtscg("已取件");
            }else{
                list.get(i).setJjtscg("未取件");
            }
        }
        resultMap.put("data",list);
        resultMap.put("code",0);
        resultMap.put("msg","");
        resultMap.put("count","1000");

        return resultMap;
    }

resultMap中data,code,msg,count便是layui规定的返回数据格式。

之上就是简易的SSM加layui后台项目,如果有小伙伴有什么问题可留言,也可以关注我公众号加我微信。


                                                                                        Java核心基础

                                                                                 ----------------------------------

                                                                                    (看那两撇小胡子)

                                                                                    

                                                                          基础 | 心得 | 经历 | 更重要的是开心嘛!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值