js获取当前页面的地址
例1
// 地址:http://www.php230.com/fisker/post/0703/window.location.html?ver=1.0&id=6#imherewindow.location.host // URL 的主机部分:www.php230.com,如果没有域名会返回192.168.0.1:8080window.location.protocol// URL 的协议部分:http:window.location.pathname// URL 的路径部分(就是文件地址):/fisker/post/0703/window.location.htmlwindow.location.search// 查询(参数)部分:?ver=1.0&id=6
例2
window.location.href → 'https://www.jianshu.com/search?q=JS#comments' .origin → 'https://www.jianshu.com' ...
动态sql常用总结
动态 SQL 是 MyBatis 的强大特性之一。在 JDBC 或其它类似的框架中,开发人员通常需要手动拼接 SQL 语句。根据不同的条件拼接 SQL 语句是一件极其痛苦的工作。例如,拼接时要确保添加了必要的空格,还要注意去掉列表最后一个列名的逗号。而动态 SQL 恰好解决了这一问题,可以根据场景动态的构建查询。
动态SQL(code that is executed dynamically),它一般是根据用户输入或外部条件动态组合的SQL语句块。动态SQL能灵活的发挥SQL强大的功能、方便的解决一些其它方法难以解决的问题。相信使用过动态SQL的人都能体会到它带来的便利,然而动态SQL有时候在执行性能 (效率)上面不如静态SQL,而且使用不恰当,往往会在安全方面存在隐患 (SQL 注入式攻击)。
MyBatis动态 sql 的特性Mybatis 动态 sql 是做什么的?Mybatis 动态 sql 可以让我们在 Xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能。
Mybatis 的 9 种 动 态 sql 标 签有哪些?
动态 sql 的执行原 ...
event.path过期
起因是 chromium 开发团队认为 Event.path 属于非标准 API,会导致 Firefox 等其他浏览器的兼容性问题,于是他们决定将其删除。目前这个变更在 chrome 108 属于灰度阶段,在chrome 109 上会全面应用,webview 则是从 109 版本开始逐步禁用
在chrome浏览器中,event.path表示触发Dom事件的元素一路冒泡到window的所有元素但是在在Firefox、Safari、以及Chrome dev浏览器中,event中并没有path这个属性。在Firefox、Safari、以及Chrome dev浏览器中可以通过event.composedpath()获取
// 旧的写法let evt = event || window.event;let path = evt.path // 此时path为undefined// 新的写法(兼容所有主流浏览器)var evt = event || window.event;let path = evt.path || (evt.composedPath && evt.compos ...
GROUP_CONCAT()函数的说明
首先我们来建立一个测试的表和数据,代码如下
CREATE TABLE `per` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pname` varchar(50) DEFAULT NULL, `page` int(11) DEFAULT NULL, `psex` varchar(50) DEFAULT NULL, `paddr` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;INSERT INTO `per` VALUES ('1', '王小华', '30', '男', '北京');INSERT INTO `per` VALUES ('2', '张文军', '24', '男', '上海' ...
jQuery选择器赋值与取值
单选框radio<input type="radio" name="jclx" value="1" title="当前期次" checked><input type="radio" name="jclx" value="2" title="当前月份">
// 获取radio选中的值$("input[name='jclx']:checked").val()// 设置radio选中的值$("input[name='jclx'][value='1']").prop("checked", true)// 或者$("input[name=jclx]").attr("checked",'2');// 设置value=2的项目为当前选中项 / ...
table动态纵向合并单元格
需求:点击layui动态表格的某一行,给这行添加一个背景颜色,用来标识行已被点击
.table-tr-selected-bg { background-color: #6189a7 !important; color: #FFF;}
<table id="table1" lay-filter="table1"></table>
// 渲染表格table.render({ elem: '#table1' , height: 415 , page: false , url: Hussar.ctxPath + "/getData" , cols: [[ {field: 'field0', title: '字段0', align: "center",}, , {field: 'field1 ...
mysql的递归查询
本篇博客的目的旨在不用写存储过程,不用建数据库函数,一段sql实现递归查询功能
查询某个父节点下的所有层级的子节点SELECT ID.temp_level, DATA.* FROM ( SELECT @ids AS _ids, ( SELECT @ids := GROUP_CONCAT( region_id ) FROM region WHERE FIND_IN_SET( parent_id, @ids ) ) AS cids, @l := @l + 1 AS temp_level FROM region, ( SELECT @ids := 3, @l := 0 ) b WHERE @ids IS NOT NULL ) ID, region DATA WHERE FIND_IN_SET( DATA.region_id, ID._ids ) ORDER BYtemp_level
注意:
上面sql的两个region要替换为自己表名
上面sql的两个region_id要替换为自己的主键id
上面sql的一个parent_id要替 ...
linux上停止mysql报错的解决办法
linux上停止mysql报错,解决办法有:1、检查错误消息,根据信息提示解决问题;2、查看日志文件,找到导致停止失败的具体错误并解决;3、使用强制停止命令,终止所有与MySQL相关的进程;4、使用kill命令手动杀死MySQL进程;5、确保MySQL相关文件和目录的权限设置正确;6、尝试重启服务器来强制停止MySQL进程。
在 Linux 上停止 MySQL 时遇到错误,可以尝试以下步骤来解决问题:
检查错误消息:当你运行 sudo systemctl stop mysql 或 sudo service mysql stop 命令时,如果遇到错误,系统通常会输出相应的错误消息。请检查错误消息以获取更多信息,这可能有助于确定问题的原因。
查看日志文件:MySQL 通常会将错误和警告消息记录在日志文件中。你可以查看 MySQL 的错误日志文件,通常在 /var/log/mysql 目录下,比如 error.log。通过查看日志文件,你可以找到导致停止失败的具体错误。
使用强制停止命令:如果 MySQL 无法正常停止,你可以尝试使用强制停止命令。首先,使用管理员权限打开终端,并执行以 ...
linux的常用脚本
检测两台服务器指定目录下的文件一致性#!/bin/bash ###################################### 检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir=/data/web b_ip=192.168.88.10 #将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中 find $dir -type f|xargs md5sum > /tmp/md5_a.txt ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt" scp $b_ip:/tmp/md5_b.txt /tmp #将文件名作为遍历对象进行一一比对 for f in `awk '{print 2} /tmp/md5_a.txt'`do #以a机器为标 ...
Arrays.asList() 的坑
在Java中,我们经常需要将数组转换为List来方便地进行操作。Arrays.asList()方法是一种常见的方式,但是它存在一个不太常见但需要注意的坑。
Arrays.asList()方法介绍Arrays.asList()方法是将数组转换为List的方法,它返回一个List对象,但这个List对象并不是java.util.ArrayList对象,而是Arrays内部的ArrayList对象。
Arrays.ArrayList类继承自AbstractList,实现了List接口。它重写了add()、remove()等修改List结构的方法,并将它们直接抛出UnsupportedOperationException异常,从而禁止了对List结构的修改。
具体来说,Arrays.asList()方法返回的是Arrays类中的一个私有静态内部类ArrayList,它继承自AbstractList类,实现了List接口。
Arrays.asList()方法的使用非常简单,只需要将一个数组作为参数传递给该方法即可。例如:
String[] arr = new String[]{&quo ...
SpringBoot扫码登录
表这张表就是记录一下谁扫码了。谁登录了。
User_Token表
字段如下:
uuid : 用于确保唯一性
userId :谁登录的
loginTime :登录时间
createTime :创建时间 用于判断是否过期
state:是否二维码失效 0有效 1失效
角色扫码登录这个业务逻辑需要下面这些角色
android端 or 微信Web端 :扫码
PC端 :被扫。登录
服务端:掌控全局,提供接口。
接口接口有2个
生成二维码接口:生成一个二维码。二维码中有UUID。
确认身份接口:确定身份以及判断是否二维码过期等
步骤要把大象装冰箱一共分几步?
PC端打开。调用生成二维码接口 并与 服务端建立链接。链接使用uuid进行绑定
微信Web端进行扫码。获取二维码中的uuid。
微信Web端拿到uuid以后。显示是否登录页面。点击确定后 调用 确认身份接口。
确认身份接口通过以后。服务端给PC端发送信息。完成登录。此时链接断开。
代码二维码获取接口首先需要获取二维码
//获取登录二维码、放入Token @RequestMapping(value = "/getLog ...
随机图片api整理
随机图片api整理的博客收藏
【持续更新】36个二次元、三次元随机图API接口分享及预览
赵苦瓜のblog
SpringBoot开启gzip
在 SpringBoot 中启用 GZIP 压缩打开application.yml文件,添加如下配置
server: compression: enabled: true min-response-size: 1024 # 当返回数据超过这个大小,对返回数据压缩,单位Byte mime-types: application/javascript,text/css,application/json,application/xml,text/html,text/xml,text/plain
在tomcat中开启GZIP压缩打开 Tomcat 的 server.xml,在 Connector 标签中加入下面属性
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" compression="on" compressi ...
xml文件不在resource下时配置方法
在pom中添加build打包的配置
<build> <!--项目打包时会讲java目录中的*.xml文件也进行打包--> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/mapping/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources></build>
在application.properties文件中添加
#配置mapper xml文件寻找的路径#此时xml必须在mapping文件夹下mybatis-plus. ...
mybatis-plus无法使用BaseMapper的公用方法
报错原因:原本的mybatis里面再次引入mybatis-plus之后,使用公用的BaseMapper无法使用报错:也就是无法找到sql,但是可以使用自己编写的sql
解决办法:只需要在你配置数据源的地方,换一个类即可:
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
更改为:
MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
SpringBoot下最全的依赖注入方式
属性注入通过属性注入的方式非常常用,或者说是最常用的
@Servicepublic class UserService { @Autowired private Wolf1Bean wolf1Bean;//通过属性注入}
setter 方法注入除了通过属性注入,通过 setter 方法也可以实现注入:
@Servicepublic class UserService { private Wolf3Bean wolf3Bean; @Autowired //通过setter方法实现注入 public void setWolf3Bean(Wolf3Bean wolf3Bean) { this.wolf3Bean = wolf3Bean; }}
构造器注入当两个类属于强关联时,我们也可以通过构造器的方式来实现注入:
@Servicepublic class UserService { private Wolf2Bean wolf2Bean; @Au ...
mybatis的一些查询示例
建表所需的必须字段mysqlCREATE_TIME 创建时间 DATETIME,CREATE_BY 创建人 VARCHAR(100),UPDATE_TIME 更新时间 DATETIME,UPDATE_BY 更新人 VARCHAR(100),DEL_FLAG 删除标志(0未删除,1已删除) int(11) default 0
oracleCREATE_TIME 创建时间 DATE,CREATE_BY 创建人 VARCHAR2(100),UPDATE_TIME 更新时间 DATE,UPDATE_BY 更新人 VARCHAR2(100),DEL_FLAG 删除标志(0未删除,1已删除) NUMBER(1,0) default 0
like的写法mysql<select id="findByName" parameterType="String" resultType="YourEntityType"> SELECT * ...
RedisTemplate工具类整合
@Componentpublic class RedisUtils { private static RedisTemplate<String, Object> redisTemplate; public RedisUtils(RedisTemplate<String, Object> redisTemplate) { RedisUtils.redisTemplate = redisTemplate; } /** * 判断缓存是否存在 * @param key 缓存key * @return 缓存是否存在 */ public static Boolean hasKey(String key){ return redisTemplate.hasKey(key); } /** * 缓存数据 * @param key 缓存key * @param value 缓存值 */ pub ...
Springboot调用外部http接口的三种方式
https://blog.csdn.net/Chelsea__/article/details/126689495
多线程事务回滚
场景项目需要 导入一批数据,对数据进行切割,用多线程跑。
问题点方法上增加@Transactional,对多线程无效,发生异常,子线程不会回滚,即使在子线程中增加@Transactional。原因:线程不归spring容器管理,也就不指望通知回滚了。
代码将大数据进行切割 // apache自带切割api, num是对应想要切几段ListUtils.partition(list, num);
使用异常标志、发令枪控制各线程回滚@Transactional(rollbackFor = Exception.class)public Result<String> dealData(int sheetMergeCount) { // todo 业务逻辑... // 切割数据 List<List<Integer>> list = splitList(sheetMergeCount, 10); // 异常标志,AtomicBoolean保证线程安全 AtomicBoolean isError = new A ...