搜寻框含糊搜寻数据并判断如果是空则不执行 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 层业务 业务层 业务层
@Service
public 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;// 返回