S2SH框架整合开发版(十一)下

简介: S2SH框架整合开发版(十一)

十. 测试类


package com.yjl.test;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.yjl.pojo.User;
import com.yjl.service.UserService;
import com.yjl.util.PageBean;
import com.yjl.util.QueryHelper;
/**
 @author:yuejl
 @date: 2019年5月27日 下午3:04:08
 @Description 类的相关描述
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class UserTest {
  @Resource
  private UserService userService;
  @Test
  public void AddTest(){
    User user=new User();
    user.setName("蝴蝶飞3");
    user.setSex("男");
    user.setAge(24);
    userService.addEntity(user);
  }
  @Test
  public void updateTest(){
    User user=userService.getEntityById(6);
    user.setName("蝴蝶飞4");
    user.setAge(25);
    userService.updateEntity(user);
  }
  @Test
  public void deleteTest(){
    userService.deleteEntity(6);
  }
  @Test
  public void saveOrUpdateTest(){
    User user=new User();
    user.setId(7);
    user.setName("蝴蝶飞4");
    user.setSex("男");
    user.setAge(24);
    userService.saveOrUpdateEntity(user);
  }
  @Test
  public void getEntityByIdTest(){
    User user=userService.getEntityById(7);
    System.out.println(user);
  }
  @Test
  public void getEntityTest(){
    //User user=userService.getEntity("From User where name=? and age=?",new Object[]{"张三",24});
    User user=userService.getEntity("From User where name=? and age=?",Arrays.asList(new Object[]{"张三",24}));
    System.out.println(user);
  }
  @Test
  public void findAllEntitysTest(){
    List<User> userList=userService.findAllEntitys();
    userList.forEach(n->System.out.println(n));
  }
  @Test
  public void findEntitysByIds(){
    //List<User> userList=userService.findEntitysByIds(new Long[]{3L,4L});
    List<User> userList=userService.findEntitysByIds(new Long[]{3L,4L});
    userList.forEach(n->System.out.println(n));
  }
  @Test
  public void findEntitysByHql(){
    //List<User> userList=userService.findEntitysByHql("From User where sex=? and age=?",new Object[]{"男",24});
    //List<User> userList=userService.findEntitysByHql("From User where sex=? and age=?",Arrays.asList(new Object[]{"男",24}));
    List<User> userList=userService.findEntitysByHql("From User where sex=? and age=?",Arrays.asList(new Object[]{"男",24}),1,2);
    userList.forEach(n->System.out.println(n));
  }
  @Test
  public void countTest(){
    //System.out.println(userService.count());
    //System.out.println(userService.count("select count(*) From User"));
    //System.out.println(userService.count("select count(*) From User where sex=? and age=?",Arrays.asList(new Object[]{"男",24})));
    System.out.println(userService.count("select count(*) From User where sex=? and age=?",new Object[]{"男",24}));
  }
  @Test
  public void queryHelper1Test(){
    QueryHelper qh=new QueryHelper(User.class);
    qh.addCondition("sex=?",new Object[]{"男"})
    .addCondition("age=?",24);
    System.out.println("输出值:"+qh.getListQueryHql());
    List<User> userList=userService.findEntitysByHql(qh);
    userList.forEach(n->System.out.println(n));
  }
  @Test
  public void queryHelper2Test(){
    QueryHelper qh=new QueryHelper(User.class);
    qh.addCondition("sex=?",new Object[]{"男"})
    .addCondition("age=?",24);
    qh.setCount();
    System.out.println(userService.count(qh));
  }
  @Test
  public void queryHelper3Test(){
    QueryHelper qh=new QueryHelper(User.class);
    qh.addCondition("sex=?",new Object[]{"男"})
    .addCondition("age=?",24);
    PageBean<User> userList=userService.page(1,2,qh);
    System.out.println(userList.toString());
  }
  @Test
  public void uniqueTest(){
    //Object o=userService.queryUnique("select count(*) From User where sex=? and age=?",new Object[]{"男",24});
    //Object o=userService.queryUnique("select max(id) From User where sex=? and age=?",new Object[]{"男",24});
    Object o=userService.queryUnique("From User where name=? and age=?",new Object[]{"王二",24});
    System.out.println((User)o);
  }
}


其中,数据库值有:


20190528191939237.png


十一 BaseAction 类


package com.yjl.util;
import java.lang.reflect.ParameterizedType;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.util.ValueStack;
/**
 * 自己定义好的BaseAction, 需要继承这个BaseAction.
  *author 作者 yuejl
  *version 创建时间 2018年1月11日上午9:38:19 
*/
public abstract class BaseAction<T> extends ActionSupport
implements ModelDriven<T>{
  private static final long serialVersionUID = 1L;
  /**
   * @param 要封闭的Model
   */
  protected T model;
  /** @return 构造方法,获得model的值
   */
  @SuppressWarnings("unchecked")
  public BaseAction(){
    ParameterizedType p=(ParameterizedType) this.getClass().getGenericSuperclass();
    Class <T> clazz=(Class<T>) p.getActualTypeArguments()[0];
    try {
      model=clazz.newInstance();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  /**
   * @return 获得封装后的数据
   */
  @Override
  public T getModel() {
    return model;
  }
  //定义分页所用的值
  private int currentPage;
  private int pageSize;
  public int getCurrentPage() {
    return currentPage;
  }
  public void setCurrentPage(int currentPage) {
    this.currentPage = currentPage;
  }
  public int getPageSize() {
    return pageSize;
  }
  public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
  }
  /**
   * 
   * @return 获取值栈
   */
  public ValueStack getValueStack(){
    return ActionContext.getContext().getValueStack();
  }
  /**
   * @return 获取当前的request
   */
  public HttpServletRequest getCurrentRequest(){
    return ServletActionContext.getRequest();
  }
  /**
   * @return 获取当前的session
   */
  public HttpSession getCurrentSession(){
    return getCurrentRequest().getSession();
  }
  /**
   * @return 获取当前的response
   */
  public HttpServletResponse getCurrentResponse() {
    return ServletActionContext.getResponse();
  }
  //可以继续添加一些常见的方法。
}


十二 UserAction 类,需要继承BaseAction


package com.yjl.web.action;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import com.yjl.pojo.User;
import com.yjl.service.UserService;
import com.yjl.util.BaseAction;
import com.yjl.util.QueryHelper;
/**
 @author:yuejl
 @date: 2019年5月22日 下午8:05:24
 @Description 类的相关描述
*/
@Controller
@Scope("prototype")
public class UserAction extends BaseAction<User>{
  private static final long serialVersionUID = 1L;
  @Resource
  private UserService userService;
  public String list(){
    /*List<User> userList=userService.findAllEntitys();
    ActionContext.getContext().getValueStack().
    set("userList", userList);*/
    QueryHelper qh=new QueryHelper(User.class);
    getValueStack().push(
        userService.page(
            super.getCurrentPage(), 
            super.getPageSize(), 
            qh));
    return "list";
  }
}


十三 pageView.jspf 分页界面


<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
 <s:if test="pageCount==0">
  <span class="text-danger">对不起,没有查询到相关的记录信息</span>
 </s:if>
 <s:else>
<div class="row">
  <div class="col-md-4" style="height:20px;font-size:13px;">
    页次:<span class="text-danger" style="font-size:16px" id="showCurrentPage">${currentPage}</span>/
    <span class="text-danger" style="font-size:16px">${pageCount}</span>页 &nbsp;
    <span id="showPageSize" class="hidden" style="display:none;">${pageSize}</span>
    每页显示:<select class="text-danger" style="font-size:16px" id="pageSize"></select>&nbsp;条 &nbsp;
    <span id="showRecordCount" class="hidden" style="display:none;">${recordCount}</span>
    总记录数:<span class="text-danger" style="font-size:16px">${recordCount}</span>&nbsp;条
  </div>
  <div class="col-md-6" style="margin-top:-25px">
    <ul class="pagination pagination-sm">
      <!-- 首页的时候 -->
      <li><a href="javascript:void(0)" onclick="javascript:gotoPage(1);">首页</a></li>
      <!-- 判断向后页是否可用 -->
      <s:if test="start">
        <li class="disabeld"><a href="javascript:void(0)">&laquo;</a></li>
      </s:if>
      <s:else>
        <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${currentPage}-1);">&laquo;</a></li>
      </s:else>
      <!-- 显示前面的... -->
      <s:if test="beginPageIndex>1">
        <s:if test="currentPage>10">
          <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${currentPage}-10);">...</a></li>
        </s:if>
        <s:else>
          <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${currentPage}-1);">...</a></li>
        </s:else> 
      </s:if>
      <s:iterator begin="%{beginPageIndex}" end="%{endPageIndex}" var="num">
        <s:if test="#num == currentPage"> <%-- 当前页 --%>
          <li class="active"><a href="javascript:void(0)">${num}</a></li>
        </s:if>
        <s:else> <%-- 非当前页 --%>
          <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${num});">${num}</a></li>
        </s:else>   
      </s:iterator>
      <!-- 显示后面的... -->
      <s:if test="currentPage<pageCount-5">
        <s:if test="currentPage+5<pageCount">
          <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${currentPage}+5);">...</a></li>
        </s:if>
        <s:else>
          <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${currentPage}-1);">...</a></li>
        </s:else> 
      </s:if>
      <!-- 判断向后页是否可用 -->
      <s:if test="end">
        <li class="disabeld"><a href="javascript:void(0)">&raquo;</a></li>
      </s:if>
      <s:else>
        <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${currentPage}+1);">&raquo;</a></li>
      </s:else>
      <!--是尾页的时候 -->
      <li><a href="javascript:void(0)" onclick="javascript:gotoPage(${pageCount});">尾页</a></li>
    </ul>
  </div>
  <div class="col-md-2">
    <span class="pull-right" style="font-size:16px;">快速到第:
    <select onchange="gotoPage(this.value)" id="_pn"
    style="width:45px;">
      <s:iterator begin="1" end="%{pageCount}" var="num">
        <option value="${num}">${num}</option>
      </s:iterator>
    </select>&nbsp;页</span>
    <script type="text/javascript">
      $("#_pn").val("${currentPage}");
    </script> 
  </div>
</div>
</s:else>
<script type="text/javascript">
  function gotoPage(pageNum){
    $("#pageForm").append("<input type='hidden' name='currentPage' value='" + pageNum +"'>");
    var pageSize=$("#pageSize").val();
    $("#pageForm").append("<input type='hidden' name='pageSize' value='"+pageSize+"'>");
    $("#pageForm").submit();
  }
  $("#pageSize").on("change",function(){
    //获取显示的页面数
    var pageSize=$(this).val();
    //获取当前的页数。
    var currentPage=$("#showCurrentPage").text();
    if(pageSize*currentPage>recordCount){
      currentPage=1;
    }
    //先看一下,是否有那些值。
    if($("#pageForm input[name='currentPage']").length>0){
      $("#pageForm input[name='currentPage']").val(currentPage);
      $("#pageForm input[name='pageSize']").val(pageSize);
    }else{
      $("#pageForm").append("<input type='hidden' name='currentPage' value='" + currentPage +"'>");
      $("#pageForm").append("<input type='hidden' name='pageSize' value='"+pageSize+"'>");
    }
    $("#pageForm").submit();
  })
  //设置显示的页数
  var pageSizeList=[1,5,10,15,20];
  var recordCount=$("#showRecordCount").text();
  if(!inArray(recordCount,pageSizeList)){ //不再这里面,才添加。
    pageSizeList.push(recordCount);
  }
  var createPageSize=function(data,target){
    target.empty();
    $.each(data,function(idx,item){
      $("<option value='"+item+"'>"+item+"</option>").appendTo(target);
    })
  }
  createPageSize(pageSizeList,$("#pageSize"));
  $("#pageSize").val($("#showPageSize").text());
  function inArray(data,arr){
    var flag=false;
    $.each(arr,function(idx,item){
      if(item==data){
        flag=true;
        return false;
      }
    })
    return flag;
  }
</script>


十四. user.jsp页面


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="${pageContext.request.contextPath}/JS/bootstrap/css/bootstrap.min.css" type="text/css"/>
<script type="text/javascript" src="${pageContext.request.contextPath}/JS/jquery/jquery-3.1.0.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/JS/bootstrap/js/bootstrap.min.js"></script>
<title>显示列表信息</title>
</head>
<body>
  <div class="container">
    <!--这个查询的 id的值 一定要是pageForm,不能变。-->
    <s:form id="pageForm" class="form-inline" action="User_list.action">
        <div class="row">
        <!-- 这是查询搜索的框 -->
          <div class="text-info col-md-1">查询搜索:</div>
          <div class="col-md-3">
            <div class="row">
              <label for="loginName" class="col-md-6 control-label text-right">用户名:</label>
              <div class="col-md-6">
                <s:textfield class="form-control inputClass" id="userName" name="userName"
                  value="%{userName}" cssStyle="width:150px;">
                </s:textfield>
              </div>
            </div>
          </div>
          <div class="form-group pull-right col-sm-1">
            <button type="submit" class="btn btn-primary">
              <span class="glyphicon glyphicon-search"></span>查询结果
            </button>
          </div>
        </div>
      <div class="row">
        <table class="table table-bordered table-hover">
          <caption>查看用户信息</caption>
          <thead>
            <tr>
              <th class="col-xs-2">姓名</th>
              <th class="col-xs-2">性别</th>
              <th class="col-xs-2">年龄</th>
              <th class="col-xs-4" colspan="3">相关操作 
                    <span style="padding-left:40px">
                        <a href="#">添加按钮</a>  
                    </span>
              </th>
            </tr>
          </thead>
          <tbody>
            <s:iterator value="recordList" var="user">
                <tr>
                  <td>${user.name}</td>
                  <td>${user.sex}</td>
                  <td>${user.age}</td>
                  <td>
                    <a href="#">查看详情</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <a href="#">修改</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    <a href="#">删除</a>
                </tr>
            </s:iterator>
          </tbody>
        </table>
      </div>
      <!--添加分页信息,注意路径-->
      <%@ include file="pageView.jspf"%>
    </s:form>
  </div>
</body>
</html>


十五 启动服务器,查看效果


20190528194156612.png


具体的源代码已经上传,可于: 下载。


谢谢!!!

相关文章
|
JavaScript 前端开发
如何禁用火狐的javascript
如何禁用火狐的javascript
196 0
|
12月前
|
C语言 C++ 容器
【c++丨STL】string模拟实现(附源码)
本文详细介绍了如何模拟实现C++ STL中的`string`类,包括其构造函数、拷贝构造、赋值重载、析构函数等基本功能,以及字符串的插入、删除、查找、比较等操作。文章还展示了如何实现输入输出流操作符,使自定义的`string`类能够方便地与`cin`和`cout`配合使用。通过这些实现,读者不仅能加深对`string`类的理解,还能提升对C++编程技巧的掌握。
486 5
基于simulink的模糊PID控制器建模与仿真,并对比PID控制器
在MATLAB 2022a的Simulink中,构建了模糊PID和标准PID控制器模型,对比两者控制输出。模糊控制器采用模糊逻辑处理误差和误差变化率,通过模糊化、推理和去模糊化调整PID参数。模糊PID能更好地应对非线性和不确定性,而标准PID虽然简单易实现,但对复杂系统控制可能不足。通过仿真分析,可选择适合的控制器类型。
|
SQL 前端开发 Java
苍穹外卖》电商实战项目(java)知识点整理(下)
苍穹外卖》电商实战项目(java)知识点整理(下)
596 1
|
资源调度 数据可视化 大数据
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
大数据-04-Hadoop集群 集群群起 NameNode/DataNode启动 3台公网云 ResourceManager Yarn HDFS 集群启动 UI可视化查看 YarnUI(二)
159 4
|
Shell Linux C语言
【Shell 命令集合 文档编辑】Linux 种算术运算 expr命令使用指南
【Shell 命令集合 文档编辑】Linux 种算术运算 expr命令使用指南
221 0
|
测试技术
软件测试自动化策略与实施:提升质量与效率的关键
【7月更文挑战第25天】软件测试自动化是提高软件质量和效率的重要手段。通过明确自动化测试目标、选择合适的测试工具、制定详细的测试计划、建立稳定的测试框架以及持续优化与迭代,企业可以构建高效、可靠的自动化测试体系。在实施过程中,注重与项目团队的沟通与协作,确保自动化测试与项目开发的紧密结合,共同推动产品质量的不断提升。
|
存储 Java 程序员
Java内存划分详解
Java内存管理至关重要,影响程序性能与稳定性。Java虚拟机(JVM)将内存划分为堆、方法区、程序计数器、Java虚拟机栈与本地方法栈。堆为核心区域,存放对象实例;方法区存储类信息;程序计数器记录字节码指令;栈管理方法执行。垃圾收集器自动回收内存,提升程序效率与可靠性。理解这些概念有助于优化Java程序。
151 0
|
运维 监控 容灾
智能化运维场景分析
【7月更文挑战第12天】智能运维目标是解放运维人员,提高效率,确保业务连续性和优化资源利用。
|
安全 Windows
【解决】Windows 11检测提示电脑不支持 TPM 2.0(注意从DTPM改为PTT)
【解决】Windows 11检测提示电脑不支持 TPM 2.0(注意从DTPM改为PTT)
2378 0