mybatis-plus防止全表更新与删除
宁要好梨一个,不要烂梨一筐。积极肯干和忠心耿耿的人即使只有两三个,也比十个朝气沉沉的人强。——列宁
我们可以如下配置
@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL); // 阻止全表更新与删除 BlockAttackInnerInterceptor blockAttackInnerInterceptor = new BlockAttackInnerInterceptor(); // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false paginationInnerInterceptor.se ...
手动回滚、提交事务
再小的个子,也能给沙漠留下长长的身影;再小的人物,也能让历史吐出重重的叹息。——余秋雨《文化苦旅》
我们可以手动管理事务
首先需要引用两个Bean
@Resourceprivate TransactionDefinition transactionDefinition;@Resourceprivate IArticleEnclosureService articleEnclosureService;
然后是使用
PlatformTransactionManager transactionManager = Objects.requireNonNull(transactionTemplate.getTransactionManager()); TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition);if (逻辑执行正确) { //提交事务 transactionManager.commit(transactionSta ...
自用模板sql
真正的伟人,能在愚昧和喧嚣的物质世界中,静心倾听荒漠的声音。——深泉学院(美国)
自用sql,我建站时每张表必备如下字段:
DROP TABLE IF EXISTS `common_template`;CREATE TABLE `common_template` ( `id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', `is_deleted` tinyint(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '逻辑删除字段 0未删除 1已删除', `gmt_create` datetime(0) NOT NULL COMMENT '现在时表示主动式创建', `gmt_modified` datetime(0) NOT NULL COMMENT '过去分词表示被动式更新', PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET ...
thymeleaf调用springBean
没有经过战斗的舍弃,是虚伪的;没有经过苦难的超脱,是轻佻的。——傅雷
昨天写了一篇关于前端精度丢失的博客
今天发现还有个问题,如果我们需要使用thymeleaf在js中使用获取的数据是一个对象
并且里面的属性还是超出16位的Long类型的话,仍然会导致精度丢失
这里我们可以直接写一个JsonManager
/** * Json转换管理层 * * @author <achao1441470436@gmail.com> * @since 2021/7/7 11:12 */public interface JsonManager { /** * 序列化处理精度丢失 * * @param serializeObj 将要序列化的对象 * @return java.lang.Object * @author <achao1441470436@gmail.com> * @since 2021/7/7 11:16 */ Object browserCompatible(Object seriali ...
js精度丢失坑
飞蛾扑火时一定是极快乐幸福的。——三毛
我们在进行开发时可能会遇到这样一个坑,那就是js代码的精度丢失
可以看到16位以后就会出现精度丢失的问题
我们定义一个简单接口,这里用com.baomidou.mybatisplus.core.toolkit.IdWorker.getId()生成19位为Long类型的id
@GetMapping("json")@ResponseBodypublic Ruben json() { return new Ruben(IdWorker.getId());}
返回的Ruben对象
/** * @author <achao1441470436@gmail.com> * @since 2021/7/6 0006 21:37 */public class Ruben { private Long id; public Ruben(Long id) { this.id = id; } public Long getId() ...
在js中获取thymeleaf变量(二)
所谓天才,只不过是把别人喝咖啡的功夫都用在工作上了。——鲁迅
上回写过在js中获取thymeleaf变量
但比较繁琐
这次用简单的写法
<script> var id = [[${id}]] console.log(id)</script>
非常简单~
不过要注意一点,如果是对象格式的数据,需要在script标签上加th:inline="javascript"
<script th:inline="javascript"> var id = [[${id}]] console.log(id)</script>
在页面中也可以直接使用,可以代替th:text
<div> [[${id}]]</div>
效果如下
如果是字符串也支持的
<div> [[${id}]] [['id']]</div>
qq推广
在自己身上,克服这个时代。——尼采
我们接入QQ客服,可以让用户在网页上直接打开QQ窗口与号主交谈
进入网址
登录后刷新一下页面
选择想要的样式,复制下面的代码
然后我们复制到我们的网站上,点击打开,然后到“QQ在线状态”官网开启服务。
然后就可以使用QQ客服啦~
markdown转html插件
人不能象走兽那样活着,应该追求知识和美德。——但丁
商店页
使用方式很简单
直接右键选择markdown转换即可
然后就好了
redisson实现分布式锁
性格左右命运,气度影响格局。——余世雅博士
代码如下
public static int EXPIRE_SECONDS = 5 * 60; @Resource private RedissonClient redissonClient; /** * 加redisson分布式锁 * * @param lockName 锁名 * @param supplier 调用方法 * @return T * @author <achao1441470436@gmail.com> * @since 2021/7/2 17:42 */ @Override @Transactional(rollbackFor = Throwable.class, isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED) public <T> T lockByName(String lockName, Supplier<T& ...
新标签页打开
人民不仅有权爱国,而且爱国是个义务,是一种光荣。——徐特立
<a href="https://vampireachao.gitee.io/" target="_self">默认当前页面打开</a><a href="https://vampireachao.gitee.io/" target="_blank">新页面打开</a><a href="" target="ruben">在frame中打开</a><iframe src="" name="ruben"></iframe><a href="https://vampireachao.gitee.io/" target="_parent">如果是在iframe里,无视iframe直接当前外层页面打开</a><a ...