搜寻框含糊搜寻数据并判断如果是空则不执行 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;//返回
发表回复