本文目录如下:
- 二、项目中细节实现 & 约束 & 注意事项
- 判断字符串是否为空?
- 入参 'Num' 字段转换为 'num' 的问题?
- 通过 Java 获取时间 (Date类型) 并插入数据库?
- 神坑: baseMapper.selectById(String str)之坑?
- AES 实现加密函数, 供模块调用?
- Java实体类 与 Map 相互转换的方法?
- 三、WebFlow (流程业务) 模块难点总结
- XML文档对象处理
二、项目中细节实现 & 约束 & 注意事项
判断字符串是否为空?
判断是否为
空
:StringUtils.isEmpty(str)
判断是否非空
:StringUtils.isNotEmpty(str)
// StringUtils.isEmpty(str) 内部实现
public static boolean isEmpty(String str) {return str == null || str.length() == 0;
}
入参 ‘Num’ 字段转换为 ‘num’ 的问题?
使用
@JsonProperty
对 字段 进行标注即可。
通过 Java 获取时间 (Date类型) 并插入数据库?
- java 获取当前时间的三种方法
- Java时间格式字符串与Date的相互转化
// 创建时间
Calendar calendar= Calendar.getInstance();
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
// calendar.add(Calendar.HOUR_OF_DAY, 8); // 在原时间上加 8 小时
try {Date date = dateFormat.parse(dateFormat.format(calendar.getTime()));// ...
} catch (ParseException e) {e.printStackTrace();
}
神坑: baseMapper.selectById(String str)之坑?
selectById()
只会根据表的 主键 查询数据, 传入的 参数 只是 字符串 (用于匹配值) 而已。- 如果需要根据 指定字段 进行查询, 需要使用
wrapper
- 使用
selectOne() + wrapper
和selectList() + wrapper
代替selectById()
。
AES 实现加密函数, 供模块调用?
@Component
public class AesUtil {private final static String keyStr = "xqzhao";public static String AesEncrypt(String data) throws Exception {SecretKeySpec secretKey = new SecretKeySpec(keyStr.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, secretKey);byte[] encryptedData = cipher.doFinal(data.getBytes());return Base64.getEncoder().encodeToString(encryptedData);}public static String AesDecrypt(String data) throws Exception {SecretKeySpec secretKey = new SecretKeySpec(keyStr.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, secretKey);byte[] decryptedData = cipher.doFinal(Base64.getDecoder().decode(data));return new String(decryptedData);}
}
Java实体类 与 Map 相互转换的方法?
点击查看: Java对象与Map转换,你了解几种?
public static void main(String[] args){Map<String, Object> map = new HashMap();map.put("name", "谢清照");map.put("age", 18);//map转java对象Student stu = JSONObject.parseObject(JSONObject.toJSONString(map), Student .class);// Map<String, Object> s = JSON.parseObject(JSON.toJSONString(user), new TypeReference<Map<String, Object>>() {});Student xqz= new Student ();user.setName("谢清照");user.setAge(18);//java对象转mapMap<String, Object> xqzhao = JSONObject.parseObject(JSONObject.toJSONString(xqz));
}
三、WebFlow (流程业务) 模块难点总结
一个崭新的业务流程, 通过XML字符串的格式保存在数据库中。
XML文档对象处理
- 点击查看: org.dom4j.Document的主要用法
- 分别使用 dom 和 dom4j 解析XML文档
- 0.XML 中 text、value 的区别
在下面的语句中, name 为 属性名
, “谢清照” 为该属性的 value
, XieQingZhao 为 Text
值。
<Student name="谢清照" age=18>XieQingZhao</Student>
- 1.通过
SAXReader
把字符串解析为 XML文档对象:Document
// Document 接口表示整个 HTML 或 XML 文档。从概念上讲,它是文档树的根,并提供对文档数据的基本访问。
Document xmlDoc = null;
try {if (StringUtils.isNotEmpty(xpdl)){xmlDoc = DocumentHelper.parseText(xpdl);}
} catch (DocumentException e) {e.printStackTrace();
}
- 2.
Document
中的方法
Element element = doucument.getRootElement(); // 获取根节点
// 获取路径下的单个根节点 输出匹配到的第一个, 下面的 path 中, 此时ItemName就是根节点
Node node = document.selectSingleNode("root/body/detail/StuItem/ItemName");
// 获取路径下的所有根节点
List<Node> nodes = document.selectNodes(path);
- 3.Node 中的方法
// 获取路径下的单个根节点 输出匹配到的第一个, 下面的 path 中, 此时ItemName就是根节点
Node node = node.selectSingleNode("root/body/detail/StuItem/ItemName");
// 获取路径下的所有根节点
List<Node> nodes = node.selectNodes(path);
- 4.
Eelement
中的方法
当要获得 XML节点 中的元素时就需要把,Node
类型 的数转化为 org.dom4j.Eelement
类型,然后运用 Eelement类 中的方法。
Element element = (Element)node; // 强制转换
Short type = element.getNodeType(); // 获取该节点类型
String name = element.getNodeTypeName(); // 获取该节点名称// 属性
Attribute isUseAttr = element.attribute("IsUse"); // 获取属性对象
String value = element.attributeValue("Name"); // 获取属性值 - Name为属性名称
element.setAttributeValue("HandleState", "1"); // 为某个属性设置值// 文本值
String text = element.getText(); // 获取该节点的文本值
element.setText("该节点的文本值"); // 为该节点设置新的文本值// 结点
// 获取路径下的单个根节点 输出匹配到的第一个, 下面的 path 中, 此时ItemName就是根节点
Node node = element.selectSingleNode("root/body/detail/StuItem/ItemName");
// 获取路径下的所有根节点
List<Node> nodes = element.selectNodes(path);
// 获取孩子结点
List<Element> childs = element.elements();
- 3.Element 和Node 的区别
Element 和 Node 都是 org.dom4j 包中的类,用于处理 XML 文档中的节点。它们两者之间的区别在于:
Node
是一个通用的节点类型,可以表示 任何类型 的节点 (如元素、文本、注释等)。Element
则是 Node 的一个子类,用于表示 XML 文档中的 元素节点。节点方法:
- Node 类型 提供了通用的节点方法,如 getNodeName、getText、getParent 等。
- Element 类型 除了通用方法外,还提供了一些专门处理元素节点的方法,如 getName、addAttribute、getNamespaceURI 等。
子结点:
- Node 的 getChildNodes() 方法返回所有子节点的列表。
- Element 的 elements() 方法返回指定名称的子元素节点列表。
总结:
- Element 类型 适用于处理 XML 文档中的 元素节点,它提供了一些专门处理元素节点的方法和属性访问方式。
- Node 类型 则更具通用性,可以用于表示任何类型的节点,但处理起来 相对复杂。