搜索框模糊搜索数据并判断如果是空则不执行 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;//返回
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。