MyBatis 实现多级菜单

entity

package com.wgymt.jxc.entity;

import lombok.Data;

import java.util.List;

/**
 * 商品类别VO
 */
@Data
public class GoodsTypeVO {

    private Integer goodsTypeId;
    private String goodsTypeName;
    private Integer pId;
    private Integer goodsTypeState;

    private List<GoodsTypeVO> children;
}

Dao

package com.wgymt.jxc.dao;

import com.wgymt.jxc.entity.GoodsTypeVO;

import java.util.List;

public interface GoodsTypeDao {

    // 返回根目录
    List<GoodsTypeVO> selectGoodsTypeTree();

    // 根据父级菜单获取子菜单(二级.三级...)
    List<GoodsTypeVO> selectChildrenTree(Integer pId);
}

service

package com.wgymt.jxc.service;

/**
 * 商品类别
 */
public interface GoodsTypeService {

    // 商品分类树形展示
    String getGoodsTypeTree();
}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.wgymt.jxc.dao.GoodsTypeDao">

    <resultMap id="goodsTypeVOMap" type="com.atguigu.jxc.entity.GoodsTypeVO">
        <id column="goods_type_id" property="goodsTypeId"/>
        <result column="goods_type_name" property="goodsTypeName"/>
        <result column="p_id" property="pId"/>
        <result column="goods_type_state" property="goodsTypeState"/>
        <collection property="children" ofType="com.atguigu.jxc.entity.GoodsTypeVO" select="selectChildrenTree"
                    column="goods_type_id"/>
    </resultMap>
    <select id="selectGoodsTypeTree" resultMap="goodsTypeVOMap">
        SELECT goods_type_id,
               goods_type_name,
               p_id,
               goods_type_state
        FROM t_goods_type
        WHERE p_id = -1
    </select>

    <select id="selectChildrenTree" resultMap="goodsTypeVOMap">
        SELECT goods_type_id,
               goods_type_name,
               p_id,
               goods_type_state
        FROM t_goods_type
        WHERE p_id = #{goodsTypeId}
    </select>
</mapper>

Xpath 根据模糊属性值选择节点

有如下这样的情况:

//*[@id="normalthread_2766736"]

以上这种情况 id 属性值是变化的只能选择单一的一条, 那么可以使用下面这种模糊搜索的方法做一个普遍选择.

xpath='//table/tbody[contains(@id,"normalthread")]//h2/text()

Tomcat性能调优之JVM

Tomcat性能调优之JVM

Tomcat是一款Java应用,那么JVM的配置便于运行性能密切相关,而java优化重点则集中在内存分配和GC策略调整上,因为内存直接会影响服务器的运行效率及吞吐量,JVM垃圾回收机制则会不同程度导致程序运行中断。可以根据应用程序的特点,选择不同的垃圾回收策略,调整JVM垃圾回收策略,可以极大减少垃圾回收次数,提升垃圾回收效率改善程序运行性能。

1)内存优化参数

-server:启动server以服务端模式运行,启动服务较慢但是请求速度较快建议开启。

-Xms:最小堆内存,建议与-Xmx设置相同,设置相同避免在tomcat运行期间内对内存进行重新分配,造成资源浪费

-Xmx:最大堆内存,建议与-Xms设置相同,设置相同避免在tomcat运行期间内对内存进行重新分配,造成资源浪费

建议设置为可用内存的80%(可用内存指的是除去系统使用,及其它程序使用后剩余的内存)

-XX:MetaspaceSize 元空间初始值

-XX:MaxMetaspaceSize 元空间最大内存默认无限

-XX:MaxNewSize 新生代最大内存默认16M

-XX:NewRatio 年轻代和老年代大小比值,取值为整数默认为2不建议修改

-XX:SurvivorRatio Eden区与Survivor区大小的比值,取值为整数默认为8不建议修改

2)进行实际配置

windows下安装的tomcat配置文件为:catalina.bat (路径:tomcat-8.0.52/bin)

linux下安装的tomcat配置文件为:catalina.sh(路径:tomcat-8.0.52/bin)

在linux系统调优tomcat,关闭所有tomcat后看内存还剩余多少,将剩余内存的80%分配给服务器上面的tomcat

JAVA_OPTS="-server -Xms2048m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:SurvivorRatio=8"

大约在一百零几行的位置添加

配置完成重启tomcat

使用jmap查看是否变成了我们设置的2048

jmap -heap pid (pid 就是tomcat的进程号)

优化完成。

查看了一下某云服务器确实内存降低了。

去除夹杂在字符串中的数字

有时候想要把一串文本中的所有数字都去掉, 如果仅仅用字符串方法replace()就会很繁琐. 此时可以借助正则库的sub()来解决. 如下:

import re

content = '42ak54yr50ir422ix6l2g'
content = re.sub('\d+', '', content)
# 如果要去除字母或者符号等可以改变匹配内容
# 比如去字母 可以把\d+ 换成 [a-zA-Z]
print(content)