搜寻框含糊搜寻数据并判断如果是空则不执行 where外面的内容<mapper namespace="com.cy.pj.sys.dao.SysLogDao">指定数据为dao层 <!-- resultType返回值去记录总数 --> <select id="getRowCount" resultType="int"><!-- 返回值是int类型 --> select count(*) from sys_logs <where> <if test="username!=null and username!=''"><!-- 搜寻数据如果为 null就不执行where了 --> username like concat("%",#{username},"%")<!-- 含糊搜寻数据 --> </if> </where> </select></mapper>
这是一种逻辑思维 当前业务就要这样去写的//基于条件查问用户行为日志记录总数 //@param username 查问条件()用户名-基于此用户名进行含糊查问) //@return 查问到的记录总数 int getRowCont(String username);//这是一个搜寻框,依据用户名查问的总记录数 List<SysLog> findPageObjects(String username,查问条件 Integer startIndex, 起始地位 Integer pageSize);这个是分页面的大小每页最多显示多少条数据
<sql id="abcd">应用sql封装总数据提取共性 from sys_logs <where> <if test="username!=null and username!=''"><!-- 搜寻数据如果为 null就不执行where了 --> username like concat("%",#{username},"%")<!-- 含糊搜寻数据 --> </if> </where> </sql> <!-- resultType返回值去记录总数 --> <select id="findPageObjects" resultType="com.cy.pj.sys.pojo.SysLog"><!-- 返回值间接返回包名 --> 分页查问 select * <include refid="abcd"/>调用sql里的共性数据 order by createdTime desc limit #{startIndex},#{pageSize} </select> 总记录数据 <select id="getRowCount" resultType="int"><!-- 返回值是int类型 --> select count(*) <include refid="abcd"/>调用sql里的共性数据sql自定义的id值 </select>
//service 层分页业务;public interface SysLogService { //用户名 //分页查问 //返回值 封装了查问和计算结果的一个分页对象 pageObject<SysLog> findPageObjects(String username,Integer pageCurrent);}
02这个是定义的一个类 pojo层的类和上面对应 public class pageObject<T> implements Serializable{ private static final long serialVersionUID = 7372326137711610989L;//实现序列化接口 //总数数 private Integer rowCount;//池化思维 //当前页记录 private List<T> records;//加《T》是为了其余模块 当前应用分页 分享共性 //总页数 private Integer pageCount; //页面大小(每页最多显示多少条记录) private Integer pageSize; //以后页码值 private Integer pageCurrent; public pageObject(Integer rowCount, List<T> records, Integer pageSize, Integer pageCurrent) { super(); //依据业务需要近进行判断所须要的数据; this.rowCount = rowCount;//总数数 this.records = records;//当前页记录 this.pageCount = pageCount;//总页数 this.pageSize = pageSize;//页面大小(每页最多显示多少条记录) this.pageCurrent = pageCurrent;//以后页码值 //计算pageCount的值,办法2 this.pageCount=(this.rowCount-1)/pageSize+1; }}
Serviceimpl层业务 业务层 业务层@Servicepublic class SysLogServiceImpl implements SysLogService { @Autowired private SysLogDao sysLogDao; @Override public pageObject<SysLog> findPageObjects(String username, Integer pageCurrent) { // TODO Auto-generated method stub if(pageCurrent==null||pageCurrent<1) throw new IllegalArgumentException("以后页码值有效"); //判断值 int rowCount=sysLogDao.getRowCont(username); if(rowCount==0) throw new ServiceException("没有找到对应后果");本人定义的异样 应用这个异样要类继承 RuntimeException这个类是运行异样 //查问当前页数据 int pageSize=5;//这个值也能够从页面传递到服务器显示数据 int startIndex=(pageCurrent-1)*pageSize; List<SysLog> records=sysLogDao.findPageObjects(username, startIndex, pageSize); return new pageObject<SysLog>(rowCount, records, pageSize, pageCurrent); }}
Controller层解决异样 , 解决异样语句 @Controller@RequestMapping("/log/")//这个当前如果用户传个——1则会报500这个谬误所以最好还是 增加一个状态 public class SysLogController { @Autowired private SysLogService sysLogService; @RequestMapping("doFindPageObjects") @ResponseBody//以json字符串返回数据 public JsonResult doFindPageObjects(String username,Integer pageCurrent){// try { pageObject<SysLog> pageObject=sysLogService.findPageObjects(username, pageCurrent); return new JsonResult(pageObject);//没有谬误就返回 正确的值// } catch (Exception e) {//能够不必这个 认为这个当前如果还有异样怎么办哪? //所以 须要一个全局的解决异样;// return new JsonResult(e);//如果有谬误就返回状态就返回0 // TODO: handle exception } }
这个就写js函数吧 当前 在欠缺吧!<script type="text/javascript"> //这个是管制分页 总分页 反正都有用 function doSetPagination(page) { //1.始化数据 $(".rowCount").html("总记录数(" + page.rowCount + ")"); $(".pageCount").html("总页数(" + page.pageCount + ")"); $(".pageCurrent").html("当前页(" + page.pageCurrent + ")"); //存储以后页码值 data函数用于在指定dom对象上存储数据去数据其根本语法为data(key,[value]); $("#pageId").data("pageCurrent", page.pageCurrent);//如果只有k则示意取值 data 属性必须 有值 能力用data $("#pageId").data("pageCount", page.pageCount); } //事件注册 //在pageId对应的对象上技能型click事件注册点击妻子元素first....等等执行doJUmpToPage $(function() {//on应用中央动静按键 $("#pageId").on("click", ".first,.pre,.next,.last", doJumpToPage); });//on语法 click //定义doJumpToPage办法通过此办法实现以后数据查问 function doJumpToPage() { //1.获取点击对象的class值 //prop是jquery中的一个操作属性的函数即泵语法prop(属性名【属性值】) var cls = $(this).prop("class");//prop用于获取dom对象属性值或赋值prop只取规范属性如class,id 或者 java有的语言值 //2.基于点击的对象执行pageCurrent值的批改 //2.1获取pageCurrent,pageCount的以后值 这个值最好还是不要用 全局变量 var pageCurrent = $("#pageId").data("pageCurrent"); //当前页 var pageCount = $("#pageId").data("pageCount");//总页数 //2.2批改pageCurrent的值 if (cls == "first") {//首页 pageCurrent = 1; } else if (cls == "pre" && pageCurrent > 1) {//上一页 pageCurrent--; } else if (cls == "next" && pageCurrent < pageCount) {//下一页 pageCurrent++; } else if (cls == "last") {//最初一页 pageCurrent = pageCount; } else { return;//其余状况什么也不做 } //3.对pageCurrent值进行从新绑定 $("#pageId").data("pageCurrent", pageCurrent);//重洗刷新页面 doGetObjects();//此函数定义在了类标页面 }
分页加查问语句。。。<!-- load加载办法注入办法 --><script type="text/javascript"> //第一步 分页页面加载实现 向服务端发动异步申请 $(function() {//此函数所有货色加载完最初执行;如果把js函数写在最上面也能够不写这个函数 $("#pageId").load("doPageUI")//把doPageUI加载到pageId doGetObjects();//刷新这个办法 //查询方法 查询方法 查询方法 $(".input-group-btn").on("click",".btn-search",doQueryObjects);//查问日志按钮进行注册 }) //查询方法 function doQueryObjects(){ //如果这里不初始化 为1如果在某个页面 就会搜寻不进去后果 忘了能够删除试试 //以后页码初始化 $("#pageId").data("pageCurrent",1); //为什么要调用doGetObjects函数? //重用js代码,简化jS代码编写。 doGetObjects(); } //第二步定义异步申请处理函数 function doGetObjects() { //定义url和参数 var url = "log/doFindPageObjects" var pageCurrent=$("#pageId").data("pageCurrent"); if(!pageCurrent) pageCurrent=1;//默认值 var params = {"pageCurrent" :pageCurrent};//默认页码值 是第一页 //基于用户名查问试获取用户名这个参数值 var username=$("#searchNameId").val(); //这个值肯定和数据库里的值一样 不能乱写 if(username) params.username=username;//查问时须要 //2.发动异步申请 //ajax申请的回调函数参数名能够是任意吗?能够必须合乎示意符的标准 $.getJSON(url, params, function(result) { //请问result是一个字符串还是json格局的js对象?对象 doHandleQueryResponseResult(result); });//非凡的ajax函数 } //第三步 定义回调函数解决服务端的响应后果 function doHandleQueryResponseResult(result) {//JsonResult if (result.state == 1) {//定义状态信息 //更新table中tbody外部的数据 // records当前页记录 //这个其实也相当于调用办法 doSetTableBodyRows(result.data.records);//将数据出现在页面上这个也算刷新数据了 //更新页面page.html分页数据 doSetPagination(result.data); //将这个函数读取到page.html中 }else{ alert(result.message); } } function doSetTableBodyRows(records){ //1.获取tbody对象 ,并清空原有内容 var tBody=$("#tbodyId"); tBody.empty();//清空原有的内容 //2迭代 result,将流动信息追加到tbody中 records.forEach((item)=>{//代表数组的某个元素 //将原有的数据替换掉更新新的数据 //应用了模板字符拼接办法 tBody.append( `<tr> <td><input type='checkbox'value=${item.id}></td>/*模板字符拼接 */ <td>${item.username}</td> <td>${item.operation}</td> <td>${item.method}</td> <td>${item.params}</td> <td>${item.time}</td> <td>${item.ip}</td> </tr>` ); }); }
删除操作单删除今天在改.on("click",".btn-delete",doDeleteObjects);//这个函数还能够这样写 }) //input-group-btn查问事件 //btn-delete 删除事件 //btn-search 这个是分页事件 //删除操作事件处理 function doDeleteObjects(){ //1.获取选中的id值 var ids=doGetCheckedIds(); if(ids.length==0){ alert("至多抉择一个");//弹出一个框 return; } var url="log/doDeleteObjects"; var params={"ids":ids.toString()}; $.post(url,params,function(result){//post提交形式 if(result.state==1){ alert(result.message);//弹框 doGetObjects(); }else{ alert(result.message);//弹框 } }); } function doGetCheckedIds(){ //定义一个数组,用于存储选中的checkbox的id值 var array=[]; //获取tbody中所有类型为checkbox的input元素 $("#tbodyId input[type=checkbox]"). each(function(){ //假如此元素的checked属性的值为true if($(this).prop("checked")){ //调用数组对象的push办法将选中的值存储到数组中 array.push($(this).val()); } }); return array;//返回