乐趣区

关于springboot:动吧所有内容总结

搜寻框含糊搜寻数据并判断如果是空则不执行 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;// 返回
退出移动版