深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
http://twitterbootstrap3buttons.w3masters.nl/
以下为增加一个紫色按钮的示例
-
创建一个.css文件
-
将下方的css复制到css文件中
-
页面引入该css文件
-
页面创建个按钮
-
.btn-sample {
color: #FFFFFF;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
background-color: #611BBD;
*background-color: #611BBD;
background-image: -moz-linear-gradient(top, #AF4CE8, #611BBD);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#AF4CE8), to(#611BBD));
background-image: -webkit-linear-gradient(top, #AF4CE8, #611BBD);
background-image: -o-linear-gradient(top, #AF4CE8, #611BBD);
background-image: linear-gradient(to bottom, #AF4CE8, #611BBD);
background-repeat: repeat-x;
border-color: #611BBD;
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#AF4CE8', endColorstr='#611BBD', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-sample:hover,
.btn-sample:focus,
.btn-sample:active,
.btn-sample.active,
.btn-sample.disabled,
.btn-sample[disabled] {
color: #FFFFFF;
background-color: #611BBD;
*background-color: #003bb3;
}
按钮大小
<div class="container">
<button class="btn btn-primary">btn-primary</button>
<button class="btn btn-warning btn-xs">btn-warning</button>
<button class="btn btn-success btn-sm">btn-success</button>
<button class="btn btn-info btn-lg">btn-info</button>
</div>
关于徽章
参考文章
https://www.cnblogs.com/xiaohuochai/p/7113645.html
http://www.360doc.com/content/19/0429/22/59156820_832398875.shtml
格式化时间
/\*\* 合同创建日期 \*/
@JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
private Date contractCreateTime;
前端
th:value="*{#dates.format(reserveTime,'yyyy-MM-dd HH:mm:ss')}"
设置默认排序列
sortName: 'createTime',
sortOrder: "desc",
例:
表格匹配字典值
var userType = [[${@dict.getType('sys\_user\_user\_type')}]];
// 在table相关属性字段的操作
{
field: 'userType',
title: '类型',
align: "left",
formatter: function (value, item, index) {
return $.table.selectDictLabel(userType, value);
}
},
表格增加.减少功能项
单页
若依的table是用BootstarpTable 而且若依也BootStarpTable简单封装了 如果想要去掉 table右上角的 下载 列表刷新搜索 几个按钮该怎么做呢?也很简单 增加这几个的属性该并为false即可:
全局
找到 ry-ui.js 将这几个属性设置为false即可
表格初始化完成后执行的回调
其实就是BootstarpTable的回调函数 网上有很多介绍 这里直接放怎么使用就不介绍了
onLoadSuccess: function (data) {
}
用法:
<script th:inline="javascript">
$(function () {
var options = {
url: prefix + "/list",
createUrl: prefix + "/add",
updateUrl: prefix + "/edit/{id}",
removeUrl: prefix + "/remove",
exportUrl: prefix + "/export",
modalName: "车辆信息",
fixedColumns: true, // 是否启用冻结列(左侧)
fixedNumber: 7, // 列冻结的个数(左侧)
rightFixedColumns: false, // 是否启用冻结列(右侧)
rightFixedNumber: 1,
columns: [{
checkbox: true
},
{
field: 'id',
title: '车辆编号',
visible: false
},
],
onLoadSuccess: function (data) {
console.log("页面初始化完成后会调用一次本方法");
},
};
$.table.init(options);
});
</script>
表格固定左|右列后,滚动条被覆盖的bug以及解决
找到bootstrap-table-fixed-columns.js 的224行 heigth属性值减13就好了
更改后:
this.$fixedBody.css({
width: this.$fixedHeader.width(),
height: height-13,
top: top + 1
}).show();
其他
JS循环
添加个链接这个博主写的很详细
validator
来源:
$.validator.addMethod('PD\_password', function (value, element) {
var len = value.length;
if(len<6){
$(element).data('error-msg','长度不能少于6位');
return false;
}
if(len>15){
$(element).data('error-msg','长度不能大于15位');
return false;
}
return true;
}, function(params, element) {
return $(element).data('error-msg');
});
$("#form-consignor-add").validate().resetForm();
// 某个表单里的指定行
KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲form-xxx").vali…(“#xxx”))
5. ###### validate使用tooltip提示错误信息
$("#form-add").validate({
rules: {
},
// 下边这些是重要的
unhighlight: function (element, errorClass, validClass) { //验证通过
$(element).tooltip('destroy').removeClass(errorClass);
},
errorPlacement: function (error, element) {
if ($(element).next("div").hasClass("tooltip")) {
$(element).attr("data-original-title", $(error).text()).tooltip("show");
} else {
$(element).attr("title",
$(error).text()).tooltip("show");
}
},
});
6.
##### 放大图片
>
> 有时候为了页面美观显示的图片比较小 只能看到缩略图 但是在某些情况下又想看到放大后的图片 这时候就需要图片放大功能了 layui的就不介绍了 这里介绍两种其他的
>
>
> * 放大镜方法图片(鼠标悬浮在缩略图上就可以放大)
> * 弹出层放大图片(点击弹出遮罩层,放大图片)
>
>
>
**放大镜放大:**
>
> 使用 [jQuery Zoom Plugin](https://bbs.csdn.net/topics/618636735)插件
>
>
> github: https://github.com/elevateweb/elevatezoom
>
>
> 文档地址: https://www.myfreax.com/elevatezoom-image-zoom/
>
>
>
>
> **Html**
>
>
>
> ```
> <img id="zoom\_01" src='images/small/image1.png' data-zoom-image="images/large/image1.jpg"/>
> <!-- src 指向的是缩略图 data-zoom-image指向的是大图 (可以指向同一个图片 设置当前img的宽高缩小显示图片 当鼠标悬浮就会显示未缩小的图片了)-->
>
> ```
>
>
>
> **JQuery**
>
>
> 有六种显示效果 根据需要选择 推荐第一种 如果需要可以访问文档看它的其他属性
>
>
>
> ```
> $('#zoom\_01').elevateZoom({});//默认效果
>
> $('#zoom\_01').elevateZoom({ //内置镜头
> zoomType: "inner",//类型:内置镜头
> cursor: "crosshair", //光标:十字
> zoomWindowFadeIn: 500,//镜头窗口淡入速度
> zoomWindowFadeOut: 750 //镜头窗口淡出速度
> });
>
> $("#zoom\_01").elevateZoom({ //镜头聚焦
> zoomType: "lens",//类型:透镜效果
> lensShape: "round", //透镜形状:圆形
> lensSize: 200 //透镜尺寸:长和宽:200px
> });
>
> $("#zoom\_01").elevateZoom({ //淡入/淡出设置
> zoomWindowFadeIn: 500,//镜头窗口淡入速度
> zoomWindowFadeOut: 500,//镜头窗口淡出速度
> lensFadeIn: 500,//透镜淡入速度
> lensFadeOut: 500//透镜淡出速度
> });
>
> $("#zoom\_01").elevateZoom({ //动画
> easing: true //是否开启动画效果
> });
>
> $("#zoom\_01").elevateZoom({ //鼠标滚动
> scrollZoom: true //是否开启鼠标滚动
> });
>
> ```
>
>
**弹出层放大:**
>
> 这个就是弹出一个遮罩层 显示图片 没什么好说的直接是上代码吧
>
>
> 原文链接: https://blog.csdn.net/m0\_37865510/article/details/84636488
>
>
>
>
> **缩略图位置:**
>
>
>
> ```
> 注意class为:pimg 下边会用到
> <img src='images/image1.png' class="pimg"/>
>
> ```
>
>
>
> 在html最下边 添加下边这一段代码(**遮罩层**)
>
>
> 注意:**z-index:2;** 为遮罩层显示的高度如果想显示在最上层直接将2改为9999就行了
>
>
>
> ```
> <div id="outerdiv" style="position:fixed;top:0;left:0;background:rgba(0,0,0,0.7);z-index:2;width:100%;height:100%;display:none;">
> <div id="innerdiv" style="position:absolute;">
> <img id="bigimg" style="border:5px solid #fff;" src="" />
> </div>
> </div>
>
> ```
>
>
>
> JS:
>
>
>
> ```
> <script>
> $(function(){
> $(".pimg").click(function(){
> var _this = $(this);//将当前的pimg元素作为\_this传入函数
> imgShow("#outerdiv", "#innerdiv", "#bigimg", _this);
> });
> });
>
> function imgShow(outerdiv, innerdiv, bigimg, _this){
> var src = _this.attr("src");//获取当前点击的pimg元素中的src属性
> $(bigimg).attr("src", src);//设置#bigimg元素的src属性
>
> /\*获取当前点击图片的真实大小,并显示弹出层及大图\*/
> $("<img/>").attr("src", src).load(function(){
> var windowW = $(window).width();//获取当前窗口宽度
> var windowH = $(window).height();//获取当前窗口高度
> var realWidth = this.width;//获取图片真实宽度
> var realHeight = this.height;//获取图片真实高度
> var imgWidth, imgHeight;
> var scale = 0.8;//缩放尺寸,当图片真实宽度和高度大于窗口宽度和高度时进行缩放
>
> if(realHeight>windowH\*scale) {//判断图片高度
> imgHeight = windowH\*scale;//如大于窗口高度,图片高度进行缩放
> imgWidth = imgHeight/realHeight\*realWidth;//等比例缩放宽度
> if(imgWidth>windowW\*scale) {//如宽度扔大于窗口宽度
> imgWidth = windowW\*scale;//再对宽度进行缩放
> }
> } else if(realWidth>windowW\*scale) {//如图片高度合适,判断图片宽度
> imgWidth = windowW\*scale;//如大于窗口宽度,图片宽度进行缩放
> imgHeight = imgWidth/realWidth\*realHeight;//等比例缩放高度
> } else {//如果图片真实高度和宽度都符合要求,高宽不变
> imgWidth = realWidth;
> imgHeight = realHeight;
> }
> $(bigimg).css("width",imgWidth);//以最终的宽度对图片缩放
>
> var w = (windowW-imgWidth)/2;//计算图片与窗口左边距
> var h = (windowH-imgHeight)/2;//计算图片与窗口上边距
> $(innerdiv).css({"top":h, "left":w});//设置#innerdiv的top和left属性
> $(outerdiv).fadeIn("fast");//淡入显示#outerdiv及.pimg
> });
>
> $(outerdiv).click(function(){//再次点击淡出消失弹出层
> $(this).fadeOut("fast");
> });
> }
> </script>
>
> ```
>
>
##### 新建标签页
>
> 若依已经对创建新的标签页已经进行封装 JS方法为: createMenuItem()
>
>
>
1. $.modal.openTab()
现在 在ry-ui.js里已经又对新建菜单页(createMenuItem)进行了封装
// 方式1 打开新的选项卡
function dept() {
var url = ctx + “system/dept”;
$.modal.openTab(“部门管理”, url);
}
// 方式2 选卡页同一页签打开
function dept() {
var url = ctx + “system/dept”;
$.modal.parentTab(“部门管理”, url);
}
// 方式3 html创建
部门管理
2. createMenuItem
// 要打开的地址
var url=prefix+“/details?userId=”+userId;
// 调用createMenuItem()方法 1参:要打开的地址 ,2参:标签页名称
createMenuItem(url, “用户详情”);
>
> **注意**:
>
>
> 1. 如果提示调用 createMenuItem of undefined 那就记得引入 common.js 生成的代码里默认会引入
> 2. 提示random of undefined 就引入ry-ui.js
>
>
>
>
> **方法源代码:**
>
>
> 源代码就不贴出来了 贴出来也没什么意义 位置:
>
>
>
common.js --> createMenuItem(dataUrl, menuName)
##### 关闭标签页
// 源代码在index.js里
$(‘.tabCloseCurrent’).on(‘click’, function () {
$(‘.page-tabs-content’).find(‘.active i’).trigger(“click”);
});
##### 输入框锁定
>
> 这个相信大家都会 还是再写一下吧 这段话是从网站上直接复制过来的
>
>
> **disabled** 属性规定应该禁用 input 元素,被禁用的 input 元素,不可编辑,不可复制,不可选择,不能接收焦点,后台也不会接收到传值。设置后文字的颜色会变成灰色。disabled 属性无法与
>
>
>
//disabled 属性无法与 一起使用。
示例:
>
> **readonly** 属性规定输入字段为只读可复制,但是,用户可以使用Tab键切换到该字段,可选择,可以接收焦点,还可以选中或拷贝其文本。后台会接收到传值. readonly 属性可以防止用户对值进行修改。
>
>
>
// readonly 属性可与 或 配合使用。
示例:
>
> **readonly unselectable=“on”** 该属性跟disable类似,input 元素,不可编辑,不可复制,不可选择,不能接收焦点,设置后文字的颜色也会变成灰色,但是后台可以接收到传值。
>
>
>
示例:
##### 弹出某页面
>
> **弹窗**
>
>
>
// 弹出添加用户积分日志页面
function open_account_log(userId) {
// 调用方法弹出
$.modal.open(“用户积分修改”, ‘/system/accountDetailsLog/add’);
}
##### JS校验空值
function isEmpty(obj){
if(typeof obj == “undefined” || obj == null || obj == “”){
return true;
}else{
return false;
}
}
##### JS绑定input事件
>
> js绑定input事件而不是使用改变值的change事件
>
>
> 可以实现输入值后就做某些操作 而不是在输入完然后失去焦点再进行触发
>
>
>
// 输入框自动去空格 其中propertychange 是对ie9以下浏览器的支持
$(“.form-control”).bind(“input propertychange”, function () {
(
t
h
i
s
)
.
v
a
l
(
(this).val(
(this).val((this).val().replace(/\s*/g, “”));
}
);
##### 自定义AJAX
>
> 这里是使用解绑按钮来进行示例
>
>
> 解绑操作不需要弹窗 如果直接调用封装好的修改的方法或者操作成功处理操作成功的方法会关闭弹窗刷新父级页面 导致全局刷新 这样写就可以 既可以向后台执行想要执行的操作 也可以弹出消息提醒 又不导致全局刷新 只刷新Table表格
>
>
>
// 上传文件
function sendFile(file, obj) {
var data = new FormData();
data.append(“file”, file);
$.ajax({
type: “POST”,
url: ctx + “common/upload”,
data: data,
cache: false,
contentType: false,
processData: false,
dataType: ‘json’,
success: function (result) {
if (result.code == web_status.SUCCESS) {
$(obj).summernote(‘editor.insertImage’, result.url, result.fileName);
} else {
$.modal.alertError(result.msg);
}
},
error: function (error) {
$.modal.alertWarning(“图片上传失败。”);
}
});
}
##### 添加Class元素
.abc{
background: red;
}
test div
var div = document.getElementById(‘d1’);
div.classlist.add(“abc”); //添加
div.classlist.remove(“abc”); //删除
##### 操作结果提示
// 需要引入 ry-ui.js文件 content为提示文字
// 错误
$.modal.msg(content, modal_status.FAIL);
// 成功
$.modal.msg(content, modal_status.SUCCESS);
##### 回显选中图片
>
> 如果需要**放大回显图片**可以看
>
>
> 前端 --> 其他 --> 放大图片
>
>
>
>
> 回显浏览器选中的图片
>
>
> 如果在选择文件的时候,只想显示图片文件可以这样写
>
>
>
> ```
> <input type="file" accept="image/\*">
>
> ```
>
>
**HTML示例:**
<div class="form-group">
<label class="col-sm-3 control-label">主图:</label>
<div class="col-sm-8">
<input id="file" name="mainImageA" class="filepath" onchange="changepic(this)" type="file"><br>
<img src="" id="show" width="200">
</div>
</div>
**JS:**
function changepic(obj) {
var reads = new FileReader();
f = document.getElementById(‘file’).files[0];
reads.readAsDataURL(f);
reads.onload = function (e) {
document.getElementById(‘show’).src = this.result;
};
}
##### JS创建集合对象
// js中创建集合
var list=[];
// js中创建cs对象
var cs = {
id=1,
name=‘admin’,
password=‘admin’
}
//保存对象
list.push( cs );
##### 显示隐藏HTML
>
> 隐藏html代码块 分为两种方式隐藏
>
>
> 1. style=“visibility: hidden;” (隐藏但是位置会占用)
> 2. style=“display: none;” (隐藏并且位置会释放)
>
>
>
hello
// visibility: none
document.getElementById(“id”).style.visibility=“hidden”;//隐藏
document.getElementById(“id”).style.visibility=“visible”;//显示
// display: none
var userType =2;
if (userType == 2) {
//获取要显示的div对象
document.getElementById(‘id’).style.display = “block”; //显示
} else {
document.getElementById(‘id’).style.display = “none”; // 隐藏
}
**Js版本**
$(“#id”).hide();// 隐藏
$(“#id”).show();// 显示
##### 页面加载完成执行
>
> 页面加载完成执行有两种加载时机
>
>
> 1. 页面所有资源加载完成后执行 (包括图片或者其他资源)
> 2. 页面的Dom结构在家完成就开始执行
>
>
>
//1 资源加载完成才执行 (图片资源等等)
window.onload = function() {
};
//2 Dom加载完成就执行
$(document).ready(function() {
});
//2.1 简写
$(function() {
});
##### 默认全屏打开添加页
新增
### Thymeleaf
##### 标签
| **关键字** | **功能介绍** | **案例** |
| --- | --- | --- |
| th:id | 替换id | `<input th:id="'xxx' + ${collect.id}"/>` |
| th:text | 文本替换 | `<p th:text="${collect.description}">description</p>` |
| th:utext | 支持html的文本替换 | `<p th:utext="${htmlcontent}">content</p>` |
| th:object | 替换对象 | `<div th:object="${session.user}">` |
| th:value | 属性赋值 | `<input th:value = "${user.name}" />` |
| th:with | 变量赋值运算 | `<div th:with="isEvens = ${prodStat.count}%2 == 0"></div>` |
| th:style | 设置样式 | `<div th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''"></div>` |
| th:onclick | 点击事件 | `<td th:onclick = "'getCollect()'"></td>` |
| th:each | 属性赋值循环 | `<tr th:each = "user,userStat:${users}">` |
| th:if | 判断条件 | `<a th:if = "${userId == collect.userId}">` |
| th:unless | 和th:if判断相反 | `<a th:href="@{/login} th:unless=${session.user != null}">Login</a>` |
| th:href | 链接地址 | `<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>` |
| th:switch | 多路选择配合th:case使用 | `<div th:switch="${user.role}">` |
| th:fragment | th:switch的一个分支 | `<p th:case = "'admin'">User is an administrator</p>` |
| th:includ | 布局标签,替换内容到引入的文件 | `<head th:include="layout :: htmlhead" th:with="title='xx'"></head>` |
| th:replace | 布局标签,替换整个标签到引入的文件 | `<div th:replace="fragments/header :: title"></div>` |
| th:selectd | selected选择框选中 | `th:selected="(${xxx.id} == ${configObj.dd})"` |
| th:src | 图片类地址引入 | `<img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />` |
| th:inline | 定义js脚本可以使用变量 | `<script type="text/javascript" th:inline="javascript">` |
| th:action | 表单提交的地址 | `<form action="subscribe.html" th:action="@{/subscribe}">` |
| th:remove | 删除某个属性 | |
|
| th:attr | 设置标签属性,多个属性可以用逗号分隔 | 比如 th:attr=“src=@{/image/aa.jpg},title=#{logo}”,此标签不太优雅,一般用的比较少。 |
1.all:删除包含标签和所有的孩子。2.body:不包含标记删除,但删除其所有的孩子。3.tag:包含标记的删除,但不删除它的孩子。4.all-but-first:删除所有包含标签的孩子,除了第一个。5.none:什么也不做。这个值是有用的动态评估。
##### 循环
Onions test@test.com.cn yes 状态变量:index 状态变量:count 状态变量:size 状态变量:current 状态变量:even**** 状态变量:odd 状态变量:first 状态变量:last
##### 判断
<th:block th:if=“…”>
</th:block>
##### JS取值
// 注意script属性
##### th:onclick
>
> 传递单个参数
>
>
>
th:οnclick=“searchHot([[${hot.name}]])”
>
> 传递多个Model中参数
>
>
>
th:οnclick=“‘javascript:searchHot(’‘+KaTeX parse error: Expected group as argument to '\'' at position 18: …ot.name}+'\',\''̲+{hot.hotType}+’‘)’”
>
> 传递一个Model中参数 一个非Model中参数
>
>
>
th:οnclick=“‘javascript:searchHot(’‘+${hot.name}+’‘,’+this+‘)’”
##### 格式化时间
th:value=“*{#dates.format(reserveTime,‘yyyy-MM-dd HH:mm:ss’)}”
##### 截取字符串
msg.content为被截取的字符串 15为截取长度
###### 其他-网络文章
>
> <https://blog.csdn.net/zoubo0812/article/details/54906297#commentBox>
>
>
>
### JQuery相关
##### 返回上页
function goBack() {
window.history.go(-1);
}
## 后端
### 系统
#### 当前用户
>
> 对当前登录用户的操作已经进行了封装
>
>
> 有获取当前登陆用户 获取当前登录用户ID 等这里不贴源码了
>
>
> 该工具类位置:
>
>
> **com.ruoyi.framework.util.ShiroUtils**
>
>
>
#### 定时器
###### 关闭定时器
>
> 有时候定时器大家并不一定需要用到 又想把定时器阉割掉 时怎么做呢?
> 难道要删大量的定时器相关代码吗? 很显然不需要只需要将定时器在启动时初始化的注解注释掉就可以了
>
>
>
![输入图片说明](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMuZ2l0ZWUuY29tL3VwbG9hZHMvaW1hZ2VzLzIwMTkvMDgyMy8xNDExNTJfODM4MWE3MDJfMjIwMTc0MC5wbmc?x-oss-process=image/format,png)
###### 新增定时器
![输入图片说明](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMuZ2l0ZWUuY29tL3VwbG9hZHMvaW1hZ2VzLzIwMTkvMDkyNy8xMTEwNDNfYWRkNDM1YmFfMjIwMTc0MC5wbmclMjAlMjJUJExDN35JNFBbSDhfUVlEQltJMzNGNC5wbmclMjI?x-oss-process=image/format,png)
![输入图片说明](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMuZ2l0ZWUuY29tL3VwbG9hZHMvaW1hZ2VzLzIwMTkvMDkyNy8xMTE1MTJfMzY4YTZiZDJfMjIwMTc0MC5wbmclMjAlMjIlRTUlQjElOEYlRTUlQjklOTUlRTYlODglQUElRTUlOUIlQkUucG5nJTIy?x-oss-process=image/format,png)
**在系统监控 --> 定时任务 -->新增定时任务**
![输入图片说明](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMuZ2l0ZWUuY29tL3VwbG9hZHMvaW1hZ2VzLzIwMTkvMDkyNy8xMTE5NDJfODIwZDdjY2JfMjIwMTc0MC5wbmclMjAlMjIlRTUlQjElOEYlRTUlQjklOTUlRTYlODglQUElRTUlOUIlQkUucG5nJTIy?x-oss-process=image/format,png)
---
---
---
---
### Controller
#### 关于权限
>
> 若依框架使用的是Shiro来进行权限控制
>
>
> 下边介绍一下在Controller新增一个请求地址 然后使这个地址被管理需要做那些操作
>
>
>
1. 添加注解
2. 插入sql
3. 按钮控制
### Service
### Dao
### Mapper
##### 属性封装
>
> 发现一篇很有意思的关于封装返回的文章 大概看了一下 这里记录一下 有时间再看
>
>
> <https://www.cnblogs.com/stefanking/articles/5092474.html>
>
>
>
>
> 说到Mapper不得不说一下vo封装 之前都是写一个association然后再写相应的属性的result 然后导致mapper文件 全是result
>
>
> 这里介绍一下封装的时候引入本文件的其他 或**其他文件**里的
>
>
>
**POJO:**
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
![](https://img-blog.csdnimg.cn/direct/743b668910224b259a5ffe804fa6d0db.png)
![img](https://img-blog.csdnimg.cn/img_convert/434f8137f923561029004a619a57be81.png)
![img](https://img-blog.csdnimg.cn/img_convert/2a065a364f9b844cef79d418bb18e0bf.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**
UucG5nJTIy?x-oss-process=image/format,png)
**在系统监控 --> 定时任务 -->新增定时任务**
![输入图片说明](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMuZ2l0ZWUuY29tL3VwbG9hZHMvaW1hZ2VzLzIwMTkvMDkyNy8xMTE5NDJfODIwZDdjY2JfMjIwMTc0MC5wbmclMjAlMjIlRTUlQjElOEYlRTUlQjklOTUlRTYlODglQUElRTUlOUIlQkUucG5nJTIy?x-oss-process=image/format,png)
---
---
---
---
### Controller
#### 关于权限
>
> 若依框架使用的是Shiro来进行权限控制
>
>
> 下边介绍一下在Controller新增一个请求地址 然后使这个地址被管理需要做那些操作
>
>
>
1. 添加注解
2. 插入sql
3. 按钮控制
### Service
### Dao
### Mapper
##### 属性封装
>
> 发现一篇很有意思的关于封装返回的文章 大概看了一下 这里记录一下 有时间再看
>
>
> <https://www.cnblogs.com/stefanking/articles/5092474.html>
>
>
>
>
> 说到Mapper不得不说一下vo封装 之前都是写一个association然后再写相应的属性的result 然后导致mapper文件 全是result
>
>
> 这里介绍一下封装的时候引入本文件的其他 或**其他文件**里的
>
>
>
**POJO:**
**深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
![](https://img-blog.csdnimg.cn/direct/743b668910224b259a5ffe804fa6d0db.png)
[外链图片转存中...(img-S9OWlo5k-1715648966361)]
[外链图片转存中...(img-VJ7DFFQ8-1715648966361)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618636735)**