日志与定时任务

日志与定时任务 一、权限管理 拦截器方式 自定义拦截器,判断是否得到凭证,没有,则拦截 //自定义拦截器类 public class MyHandler implements HandlerInterceptor { @Override //拦截器的拦截处理的handler public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object o = request.getSession().getAttribute("username"); if(o==null){ //没有登录凭证,则到达登录页面 response.sendRedirect("/login.html"); return false; } return true; } } 在mvc容器中配置拦截路径 <mvc:interceptors> <!-- 配置拦截路径 --> <mvc:interceptor> <mvc:mapping path="/customer/**"/> <mvc:mapping path="/app/**"/> <bean class="com.qf.handler.MyHandler"></bean> </mvc:interceptor> </mvc:interceptors> 登录用户模块的表设计 create table user( id int primary key auto_increment, username varchar(20), password varchar(20) ); insert into user(username,password) values('zs','123'); insert into user(username,password) values('ls','444'); 再创建controller,service,dao...

Oct 20, 2023 · 5 min · 橘子树谅

开放管理平台2

开放管理平台02 一、客户模块 批量删除 需要将动态的数据表显示每条的复选框,需要加入属性: {type: 'checkbox', fixed: 'left'} 前端选中匹配删除选项,发ajax请求到后端 layer.confirm('真的批量删除么', function(index) { //获取选中对象 var checkStatus = table.checkStatus("custom"); var data = checkStatus.data; //获取选中记录(容器) //循环变量data,然后取出每条记录的id var params = ""; $.each(data, function (i, obj) { params += "&ids=" + obj.id; //批量参数,后台使用数组获取参数 }) //发ajax请求 $.ajax({ type: "post", //批量删除为post请求 url: "/customer/batdel", data: params, success: function (res) { alert("批量删除:" + res); table.reload("custom"); //重新加载table } }) layer.close(index); //删除弹出窗口 }) 批量删除的动态SQL <delete id="deleteIds"> delete from customer where id in <foreach collection="array" item="id" open="(" close=")" separator=","> #{id} </foreach> </delete> 搜索 搜索的表单控件需要放置动态数据表最前面...

Oct 19, 2023 · 2 min · 橘子树谅

开放管理平台1

开放管理平台01 一、应用平台介绍 开放平台 前面学习过支付接口,就是通过支付宝平台,提供了一个支付接口,供第三方商城去使用;第三方商城可以很方便的使用支付功能,而无需自己再写一套类似的支付平台,减少了模块的开发,提升了效率。支付宝平台就是一个开放平台。 开放平台的好处:通过第三方软件扩充了开放平台的生态和能力 开放管理平台 开放管理平台,就是在开放平台的基础上,去管理开放平台产生的后台数据。 例如,客户管理,应用管理,充值管理,api 路由管理,网关参数管理,用户 Token 管理,日志搜索,权限管理,实现对服务的限流,熔断等动态配置,通过管理平台可以查看生成的数据,也可以通过管理平台将修改的数据同步到开放平台的网关系统中来实现实时更新功能 编码顺序 如果对接前端资源,根据提供的接口进行业务流程的开发,则需要从controller开始编写 如果从后端数据处理的角度进行开发,则从dao层开始编写并测试后台数据是否正常 二、表的设计原则 三大范式 1,列不可分 不能将字段拆分成多个子字段 例如: 用户表–字段:用户名: username first_name last_name 违背第一大范式 2,需要唯一标识的字段 要有主键,非主键字段依赖主键 一张表的职责单一,否则确定不了唯一主键 例如: 1. user表要有id表示主键 ​ 2. 学生表字段、课程表字段–学生课程表 ,违背第二大范式 3,不可存在传递依赖 字段不冗余,不会浪费磁盘空间 通过表关联查询,可以得到其他信息 例如: 订单表:订单id,价格,地址id ​ 地址表: 地址id,收货地址、收货人、电话 反范式设计 反第三范式,字段冗余,用空间换时间 表关联查询—>单表查询 例如: 订单表:订单id,价格,地址id(1,2,3),收货地址、收货人、电话 ​ 地址表: 地址id(1,2,3),收货地址、收货人、电话 物理外键与逻辑外键 之前二阶段项目,通过PowerDesigner设计出各表的外键关联,但有时并不需要有物理外键约束,因为外键有性能问题: 1.数据库需要维护外键的内部管理;(数据库压力大) 2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;(数据库额外控制事务) 3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;(服务器消耗大) 4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况(容易死锁) 所以,有时需要设计逻辑外键,也就是不需要数据库控制外键关联,通过程序方式约束好即可 例如:部门表(主表-did)与员工表(从表-外键did) 员工表添加数据,外键不能随意写,需要主表中存在;通过程序逻辑判断,主表中有字段才去添加从表的该外键。这种程序判断方式叫做逻辑外键。 三、SSM流程 DAO测试 创建web项目 导坐标 分层设计 表设计与实体类设计 配置bean容器及dao接口与mapper文件 进行dao测试 SSM框架 将SpringMVC的框架配置完成 结合layui前端进行设计 动态显示表格数据信息 layUI应用 列表状态的显示效果...

Oct 18, 2023 · 2 min · 橘子树谅

LayUI与SSM

LayUI与SSM 一、考卷与作业 修改功能 <a href="/user/selectOne/${u.id}">修改</a> @RequestMapping("/selectOne/{id}") public String selectOne(@PathVariable Integer id,HttpServletRequest request){ User user = userService.selectById(id); request.setAttribute("u",user); return "update"; } @RequestMapping("/update") public String update(User user){ int res = userService.updateUser(user); System.out.println("修改:"+res); return "redirect:/user/pages"; } 二、LayUI介绍 概述 类似于bootstrap的前端框架库,内部整合了css与js的用法 引入css外部样式,可以改变页面效果 引入js文件,可以动态使用js的触发及传值功能 应用: 导入文件后,即可使用layui 栅格系统 <!-- 引入css文件 --> <link rel="stylesheet" type="text/css" href="layui/css/layui.css"/> <!-- 引入js文件 jquery需要放前面,因为layui中会使用到jquery--> <script src="js/jquery-1.11.min.js"></script> <script src="layui/layui.js"></script> <style> .a{ background-color: red; } .b{ background-color: green; } .c{ background-color: blue; } .d{ background-color: yellow; } ....

Oct 17, 2023 · 5 min · 橘子树谅

框架相关面试题

框架相关面试题 说说spring的ioc和aop ​ ioc: 控制反转, 交给spring容器创建对象 ​ aop: 面向切面编程, 只关注核心业务, 辅助业务抽取通过代理注入 谈谈动态代理,及springaop中的动态代理 动态代理:可以灵活产生代理对象,去处理辅助业务, springaop的动态代理:通过后处理器中去动态产生的, 代理选择:默认如果有接口,则使用jdk动态代理; 没有接口则cglib Spring中通知(增强)有哪几种类型? 前置:核心功能前的代码执行 后置:核心功能后的代码执行 后置异常:出现异常后的代码执行 环绕:前置+后置 项目中用的什么框架? springboot还是ssm,谈谈用法 ​ 现在使用SSM, 分别是spingMVC-控制层操作, sping-业务层,但可以整合其他框架, mybatis-替代dao层实现 ​ springboot: 简化spring容器配置 mybatis和hibernate的区别 ​ mybatis: 半自动orm, 易上手 ​ hibernate: 全自动orm(无需了解sql语句), 功能强大,但较复杂 MyBatis中#{}和${}符号区别 #{}: 预编译的执行; 在sql中带’’ , 安全; 如果一个参数,可以省略@param注解 (推荐使用) ${}: 字符串的直接替换; 在sql中不带’’, 不安全; 不能省略@param注解 Mybatis解决了JDBC的哪些缺点? 解决了代码冗余; 2. 提高性能(因为mybatis中有缓存); 3. 只关注sql语句 谈谈MyBatis中的一级缓存和二级缓存 一级缓存: sqlSession级别缓存, 默认开启, 同一个sqlSession同构sql查询, 可从缓存中获取 二级缓存: sqlSessionFactory级别缓存; 手动开启; 通过一个工厂的同构sql查询,可从缓存中取值; ​ 应用场景: 用在读多写少的情况, 写的时候会清缓存...

Oct 17, 2023 · 2 min · 橘子树谅

SSM整合

SSM整合 一、跨域访问 概述 根据浏览器的同源策略,不同服务器之间是不能访问的,否则服务器不安全 只有加了相互信任的域才能狗进行访问。 应用 被访问的目标资源需要加入访问我的链接的信任域;例如,A访问B;在B处设置A可以访问我 @CrossOrigin("http://localhost:8080") //允许此域发请求访问 public class UserController { //... } Ajax访问时,需要进行配置: $("#btn").click(function () { $.ajax({ type: "POST", url: "http://localhost:8081/hello1", xhrFields: { // 跨域携带cookie withCredentials: true } }); }) 注意事项 1.需要两个工程,一个设置8081; 另一个设置8080端口;都配置SpringMVC 2.两个工程测试springMVC目标handler成功 3.必须处理静态资源的访问:<mvc:default-servlet-handler /> 二、SSM整合 DAO的SSM 先进行DAO测试,先结合DAO与mybatis进行处理。 Spring核心库的配置: <!-- 加载配置文件 --> <context:property-placeholder location="classpath:db.properties"></context:property-placeholder> <!-- 产生数据源的bean,将加载的数据库驱动注入 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!-- sqlSessionFactory工厂bean的产生;里面配置了数据源,注册mapper,别名,分页插件--> <bean class="org....

Oct 16, 2023 · 2 min · 橘子树谅