若依框架文档开发手册----开发中常用功能模块(中):https://developer.aliyun.com/article/1418633
默认全屏打开添加页
<a class="btn btn-success" onclick="$.operate.addFull()" shiro:hasPermission="system:notice:add"> <i class="fa fa-plus"></i> 新增 </a>
Thymeleaf
标签
1.all:删除包含标签和所有的孩子。
2.body:不包含标记删除,但删除其所有的孩子。
3.tag:包含标记的删除,但不删除它的孩子。
4.all-but-first:删除所有包含标签的孩子,除了第一个。
5.none:什么也不做。这个值是有用的动态评估。
循环
<tr th:each="user,userStat : ${list}"> <td th:text="${user.userName}">Onions</td> <td th:text="${user.email}">test@test.com.cn</td> <td th:text="${user.isAdmin}">yes</td> <th th:text="${userStat.index}">状态变量:index</th> <th th:text="${userStat.count}">状态变量:count</th> <th th:text="${userStat.size}">状态变量:size</th> <th th:text="${userStat.current.userName}">状态变量:current</th> <th th:text="${userStat.even}">状态变量:even****</th> <th th:text="${userStat.odd}">状态变量:odd</th> <th th:text="${userStat.first}">状态变量:first</th> <th th:text="${userStat.last}">状态变量:last</th> </tr>
判断
<th:block th:if="..."> <div id="div1"> </div> <div id="div2"> </div> </th:block>
JS取值
// 注意script属性 <script th:inline="javascript"> var message = [[${message}]]; console.log(message); // 注意 这种也可以取值 并且取出的值为字符串类型 作用嘛 // 举例 比如在加载页面的icon的时候 如果直接取值fa fa-user-o 就会报错 但是如果在去之前外边加上''那取出的值就是字符串类型 // 设置icon图标 var one_icon = $('#one_icon'); // 正确赋值 one_icon.addClass('[[${oneIcon}]]'); // 报错 one_icon.addClass([[${oneIcon}]]); </script>
th:onclick
传递单个参数
th:οnclick="searchHot([[${hot.name}]])"
传递多个Model中参数
th:οnclick="'javascript:searchHot(\''+${hot.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为截取长度 <span th:utext="${#strings.abbreviate( msg.content,15)}"></span>
其他-网络文章
JQuery相关
返回上页
function goBack() { window.history.go(-1); }
后端
系统
当前用户
对当前登录用户的操作已经进行了封装 有获取当前登陆用户 获取当前登录用户ID 等这里不贴源码了 该工具类位置: com.ruoyi.framework.util.ShiroUtils
定时器
关闭定时器
有时候定时器大家并不一定需要用到 又想把定时器阉割掉 时怎么做呢? 难道要删大量的定时器相关代码吗? 很显然不需要只需要将定时器在启动时初始化的注解注释掉就可以了
新增定时器
在系统监控 --> 定时任务 -->新增定时任务
Controller
关于权限
若依框架使用的是Shiro来进行权限控制
下边介绍一下在Controller新增一个请求地址 然后使这个地址被管理需要做那些操作
- 添加注解
- 插入sql
- 按钮控制
Service
Dao
Mapper
属性封装
发现一篇很有意思的关于封装返回的文章 大概看了一下 这里记录一下 有时间再看
说到Mapper不得不说一下vo封装 之前都是写一个association然后再写相应的属性的result 然后导致mapper文件 全是result
这里介绍一下封装的时候引入本文件的其他 或其他文件里的
POJO:
// 继承原实体类得到原实体类的所有属性 @Data public class EquipmentVo extends Equipment implements Serializable { //增加两个属性 /** 供应商 */ private Supplier supplier; /** 所属用户 */ private SysUser sysUser; }
association 标签中的属性
property: vo中的属性名 column: 该属性id对应的的字段名[非必须] javaType: 该属性的Java类型 resultMap: 引入的本文件的话就是resultMap 的id resultMap的id 引入其他文件的resultMap 时是xml文件所对应的Dao的全路径加 resultMap的Id
例:
注意:
Association和Collection使用时机区别:
Association 在一对一,多对一时使用
Collection 在一对多,多对多时使用
在association标签中 javaType属性指向的是实体类的属性
在collection标签中 javaType属性指向的是集合的类型 ofType指向的是集合的泛型类型
Mapper:
<resultMap type="com.ruoyi.iot.domain.vo.EquipmentVo" id="EquipmentVoResult"> <result property="id" column="id"/> <result property="equipmentNumber" column="equipment_number"/> <result property="createTime" column="create_time"/> <!-- 供应商 引入其他文件的resultMap 路径dao层路径加resultMap 的id--> <association property="supplier" column="s.id" javaType="com.ruoyi.iot.domain.Supplier" resultMap="com.ruoyi.iot.mapper.SupplierMapper.SupplierResult"> <result property="createTime" column="screate_time"/> </association> <!--用户 引入当前文件resultMap--> <association property="sysUser" column="user_id" javaType="com.ruoyi.system.domain.SysUser" resultMap="SysUserResult"> </association> </resultMap> <!--用户--> <resultMap type="com.ruoyi.system.domain.SysUser" id="SysUserResult"> <id property="userId" column="user_id"/> <result property="deptId" column="dept_id"/> <result property="loginName" column="login_name"/> </resultMap>
集合遍历
单参数
Dao:
Integer selectEquipmentNumber(List<Integer> statusList);
XML:
<foreach collection="list" item="status" index="index" separator="or" open="(" close=")"> equipment_status = #{item} </foreach>
多参数:
Dao:
XML:
<!-- 多参数的 collection为参数的名称 -->
其他
MP忽略null值
// 修改时忽略null 和空值 @TableField(strategy = FieldStrategy.IGNORED) private BigDecimal discountPrice;
BigDecimal使用
直接复制过来的就不在重复写了
注意除法 divide 是重载的方法 如果直接 a.divide(b) 的话可能会出现该异常:
[ Non-terminating decimal expansion; no exact representable decimal result.]
相当于10/3 无法除尽 尽量指定小数长度和规则
BigDecimal bignum1 = new BigDecimal("10"); BigDecimal bignum2 = new BigDecimal("5"); BigDecimal bignum3 = null; // 加法 bignum3 = bignum1.add(bignum2); System.out.println("和 是:" + bignum3); // 减法 bignum3 = bignum1.subtract(bignum2); System.out.println("差 是:" + bignum3); // 乘法 bignum3 = bignum1.multiply(bignum2); System.out.println("积 是:" + bignum3); // 除法 bignum3 = bignum1.divide(bignum2); System.out.println("商 是:" + bignum3); // 除法2 // scale表示保留小数位数 roundingMode表示为小数模式 divide(BigDecimal divisor, int scale, RoundingMode roundingMode) ; BigDecimal bignum3 = bignum1.divide(bignum2,10,ROUND_HALF_DOWN);
小数模式常量
ROUND_CEILING=如果 BigDecimal 是正的,则做 ROUND_UP 操作;如果为负,则做 ROUND_DOWN 操作。
ROUND_DOWN=从不在舍弃(即截断)的小数之前增加数字。
ROUND_FLOOR=如果 BigDecimal 为正,则作 ROUND_UP ;如果为负,则作 ROUND_DOWN 。
ROUND_HALF_DOWN=若舍弃部分> .5,则作 ROUND_UP;否则,作 ROUND_DOWN 。
ROUND_HALF_EVEN=如果舍弃部分左边的数字为奇数,则作 ROUND_HALF_UP ;如果它为偶数,则作ROUND_HALF_DOWN 。
ROUND_HALF_UP=若舍弃部分>=.5,则作 ROUND_UP ;否则,作 ROUND_DOWN 。
ROUND_UNNECESSARY=该“伪舍入模式”实际是指明所要求的操作必须是精确的,因此不需要舍入操作。
ROUND_UP=总是在非 0 舍弃小数(即截断)之前增加数字。
正整数判断
BigDecimal bigDecimal = new BigDecimal(); int num = bigDecimal.signum(); // num是-1, 负数 // num是0, 零 // num是1,正数
比较大小
BigDecimal a = new BigDecimal (101); BigDecimal b = new BigDecimal (111); //使用compareTo方法比较 //注意:a、b均不能为null,否则会报空指针 if(a.compareTo(b) == -1){ System.out.println("a小于b"); } if(a.compareTo(b) == 0){ System.out.println("a等于b"); } if(a.compareTo(b) == 1){ System.out.println("a大于b"); } if(a.compareTo(b) > -1){ System.out.println("a大于等于b"); } if(a.compareTo(b) < 1){ System.out.println("a小于等于b"); }
转String
// 浮点数的打印 10000000000 System.out.println(new BigDecimal("10000000000").toString()); // 普通的数字字符串 100.000 System.out.println(new BigDecimal("100.000").toString()); // 去除末尾多余的0 1E+2 System.out.println(new BigDecimal("100.000").stripTrailingZeros().toString()); // 避免输出科学计数法 100 System.out.println(new BigDecimal("100.000").stripTrailingZeros().toPlainString());
MYSQL
获取时间
mysql查询当前系统时间不保留时分秒,保留时分秒,当前时间加一天,当前时间减少一天等
转发至CSDN 原文链接 :blog.csdn.net/liu_yulong/…
SELECT CURDATE( ), now( ), CURTIME( ), date_sub( CURDATE( ), INTERVAL 1 DAY ) yestorday, date_sub( CURDATE( ), INTERVAL 1 DAY ) today FROM DUAL;
SELECT CURDATE( ) date, now( ) dateTime, DATE_FORMAT( now( ), '%Y-%m-%d' ) dateFmt, DATE_FORMAT( now( ), '%Y-%m-%d' ) dateTimeFmt, DATE_FORMAT( now( ), '%Y-%m-%d %H:%i:%s' ) daymins, CURTIME( ) times, date_sub( CURDATE( ), INTERVAL 1 DAY ) Yesterday , date_sub( CURDATE( ), INTERVAL 0 DAY ) Today , date_sub( CURDATE( ), INTERVAL 1 DAY ) Tomorrow FROM DUAL;