资源分享平台
项目地址GitHub地址:https://github.com/a6678696/InformationSharing
使用的技术本项目核心技术采用Spring Boot+Mybatis;开发工具idea;数据库MySQL5.6;模版引擎采用的是Thymeleaf;安全框架采用SpringSecurity;在线编辑器CKEditor;Lucene全文检索;Quartz定时任务;基于JavaMail实现用QQ邮箱发送邮件
功能介绍用户功能注册、登录、找回密码(通过邮箱获取验证码)、查看发布的资源、下载资源、Lucene全文搜索资源、发表评论、修改个人信息、管理个人资源、查看自己的资源下的评论、查看自己的下载信息、查看属于自己的消息
管理员功能用户管理(添加,修改,删除,查询,封禁或解禁用户,切换用户身份,给用户加积分和减积分)、资源类别管理(添加,修改,删除,查询)、资源管理(查看,删除,审核通过和不通过,设置热门与否,设置有效与否)、友情链接管理(添加,修改,删除,查询)、评论管理(删除,查询,审核通过和不通过)、下载信息管理(删除,查询)、消息管理(删除,查询,给用户发消息)、安全 ...
MySQL删除主表时删除从表的数据
概述有外键关联的两个表,要想实现删除主表的数据,然后删除从表中与之关联的数据,我们可以将两表的外键删除关系设置为CASCADE
设置CASCADE删除时:删除主表数据时自动删除从表数据;删除从表,主表不变
表结果及关系
设置删除关系双击上图中的线,然后设置删除时的关系为CASCADE
然后我们的需求就可以实现了!!
PS.我用的是SQLyog
List集合删除某个元素
创建List集合12345List<String> stringList = new ArrayList<>();stringList.add("a");stringList.add("a");stringList.add("b");stringList.add("c");
删除for循环
正向删除
每删除一次必须进行一次i--,因为stringList.size()在减少,否则List集合中连着的两个元素都相同的话,删除这个相同的元素时就只能删除一个。因为删除第一个元素时下一个以及之后的元素的索引会在原来的基础上-1,而i的值经过一次循环后就+1了,由于下一个元素的索引变成了被删除元素的索引,所以循环会跳过要删除的第二个元素,那么会出现等于要删除的值的元素删不完的情况
123456for (int i = 0; i < stringList.size(); i++) { if (stringList.get(i).equals("a") ...
遍历List集合的三种方法
创建List集合12345List<String> stringList = new ArrayList<>();stringList.add("1");stringList.add("2");stringList.add("3");stringList.add("4");
遍历for循环123for (int i = 0; i < stringList.size(); i++) { System.out.print(stringList.get(i)+" ");}
foreach循环123for (String s : stringList) { System.out.print(s+" ");}
迭代器1234Iterator iterator = stringList.iterator();while (iterator.hasNext()) { System.ou ...
Iterator的使用
方法hasNext()如果迭代具有更多的元素,则返回true
next()返回迭代中的下一个元素
remove()从底层集合中删除此迭代器返回的最后一个元素
Java代码12345678910111213141516171819202122public static void main(String[] args) { List<String> stringList = new ArrayList<>(); stringList.add("1"); stringList.add("2"); stringList.add("3"); stringList.add("4"); Iterator iterator = stringList.iterator(); while (iterator.hasNext()) { //获取下一个元素 String s = (String) iterator.n ...
MD5加密
Java代码12345678910111213141516171819202122232425262728293031323334353637383940package com; import java.math.BigInteger;import java.security.MessageDigest; /** * @author LeDao * @company * @create 2021-01-13 5:15 */public class Md5 { public static final String KEY_MD5 = "MD5"; public static String getResult(String inputStr) { System.out.println("=======加密前的数据:"+inputStr); BigInteger bigInteger=null; try { MessageDiges ...
jackson的配置属性
配置date-format指定日期格式,比如yyyy-MM-dd HH:mm:ss,或者具体的格式化类的全限定名
deserialization是否开启Jackson的反序列化
generator是否开启json的generators
joda-date-time-format指定Joda date/time的格式,比如yyyy-MM-ddHH:mm:ss). 如果没有配置的话,dateformat会作为backup
locale指定json使用的Locale
mapper是否开启Jackson通用的特性
parser是否开启jackson的parser特性
property-naming-strategy指定PropertyNamingStrategy(CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES)或者指定PropertyNamingStrategy子类的全限定类名
serialization是否开启jackson的序列化
serialization-inclusion指定序列化时属性的inclusion方式,具体查看JsonInclude.In ...
SQL里面的排序语句DESC和ASC
DESC用 DESC表示按倒序排序(即:从大到小排序)—降序排列
例如:
1ORDER BY DATE DESC
ACS用 ASC表示按正序排序(即:从小到大排序)—升序排列,由于ASC是默认的,所以可以省略
例如:
1ORDER BY DATE ASC
点击超链接时确认后再跳转
概述用户要删除某条数据时,先询问用户是否真的删除,用户确认后就马上删除
HTML代码1<a href="javascript:deleteArticle(id)">删除</a>
JavaScript代码123456function deleteArticle(id) { if (confirm("您确定要删除这个资源吗?")) { window.location.href = "/article/delete?id=" + id; alert("删除成功!"); }}
结果
form标签onsubmit事件
概述onsubmit 事件会在表单中的确认按钮被点击时发生,如果结果返回false就不提交
HTML代码123<form action="/user/save" method="post" enctype="multipart/form-data" onsubmit="return checkUpdateMessageValue()"> ....</form>
JavaScript代码12345678910111213function checkUpdateMessageValue() { var password = $("#passwordUpdateMessage").val(); var password2 = $("#password2UpdateMessage").val(); if (password.length < 6) { alert("密码长度要大于5! ...