最近想把家里的网站升级一下,这个 防火布 网站主要是把后台重新做一下,昨天写到了数据的显示,今天就写保存了。后台是用vue element写的,感觉这个框架非常好用,有兴趣的可以了解一下,这个tree支持拖拽的。

我的愿望是娶个媳妇帮着设计界面,因为我做出的界面太丑了,有意的可以留言,我还没谈过恋爱呢(用我爸爸的话说还是小雏鸡呢),妳要抓紧联系我呀。

分类对象:Category

package com.dcssn.weian.cms.entity;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
 * @author lihy
 * @version 2018/10/15
@Entity
public class Category {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
     * 关键词
    private String keywords;
    private String description;
    private Integer level;
    private Integer sequence;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "parent_id")
    @OrderBy("sequence asc")
    private List<Category> children = new ArrayList<>();
    public Long getId() {
        return id;
    public void setId(Long id) {
        this.id = id;
    public String getName() {
        return name;
    public void setName(String name) {
        this.name = name;
    public String getKeywords() {
        return keywords;
    public void setKeywords(String keywords) {
        this.keywords = keywords;
    public String getDescription() {
        return description;
    public void setDescription(String description) {
        this.description = description;
    public Integer getLevel() {
        return level;
    public void setLevel(Integer level) {
        this.level = level;
    public Integer getSequence() {
        return sequence;
    public void setSequence(Integer sequence) {
        this.sequence = sequence;
    public List<Category> getChildren() {
        return children;
    public void setChildren(List<Category> children) {
        this.children = children;

数据库中的内容:

keywords 和 description是我做seo优化用的
CategoryRepository
package com.dcssn.weian.cms.repository;
import com.dcssn.weian.cms.entity.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List;
 * @author lihy
 * @version 2018/10/16
public interface CategoryRepository extends JpaRepository<Category, Long> {
     * 根据层级查找
     * @param level 层级
     * @return java.util.List<com.dcssn.weian.cms.entity.Category>
     * @author lihy
    List<Category> findByLevel(Integer level);
     * 获取最新的id
     * @return java.lang.Long
     * @author lihy
    @Query(value = "select id from category order by id desc limit 1", nativeQuery = true)
    Long getLatestId();
findByLevel(1) 查出数据用于页面展示
"id": 1, "name": "蔬菜", "keywords": null, "description": null, "level": 1, "sequence": 0, "children": [{ "id": 3, "name": "萝卜", "keywords": null, "description": null, "level": 2, "sequence": 0, "children": [] "id": 2, "name": "白菜", "keywords": null, "description": null, "level": 2, "sequence": 1, "children": [] "id": 4, "name": "水果", "keywords": null, "description": null, "level": 1, "sequence": 1, "children": [{ "id": 5, "name": "苹果", "keywords": null, "description": null, "level": 2, "sequence": 0, "children": [{ "id": 6, "name": "青苹果", "keywords": null, "description": null, "level": 3, "sequence": 1, "children": [] "id": 7, "name": "红将军", "keywords": null, "description": null, "level": 3, "sequence": 2, "children": [] "id": 8, "name": "香蕉", "keywords": null, "description": null, "level": 2, "sequence": 1, "children": []

结构就是这样的,当我提交保存的时候也会提交上述格式的数据,返回的数据没有level和sequence信息,所以我们在遍历保存的时候为其赋值。

写个测试类

package com.dcssn.weian;
import com.dcssn.weian.cms.entity.Category;
import com.dcssn.weian.cms.repository.CategoryRepository;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class WeianApplicationTests {
    @Autowired
    CategoryRepository categoryRepository;
     * 添加数据
     * @author lihy
    @Test
    public void addData() {
        Category category = new Category();
        category.setName("蔬菜");
        Category categoryChild = new Category();
        categoryChild.setName("白菜");
        Category categoryChild2 = new Category();
        categoryChild2.setName("萝卜");
        category.setChildren(new ArrayList<Category>() {{
            add(categoryChild);
            add(categoryChild2);
        categoryRepository.save(category);
     * 读取数据
     * @author lihy
    @Test
    public void readData() {
        List<Category> categoryList = categoryRepository.findByLevel(1);
        for (int i = 0; i < categoryList.size(); i++) {
            recursion(categoryList.get(i), 1, i);
     * @param category 分类
     * @param level    层级
     * @param index    同级排序
     * @author lihy
    private void recursion(Category category, int level, int index) {
        System.out.printf("%" + level * 2 + "s\n", category.getName());
        // TODO: 设置 category的level和sequence 并保存
        Category categoryTemp;
        for (int i = 0; i < category.getChildren().size(); i++) {
            categoryTemp = category.getChildren().get(i);
            recursion(categoryTemp, level + 1, i);

项目地址 https://github.com/weiangongsi/tree

q群 806893930

最近想把家里的网站升级一下,这个防火布网站主要是把后台重新做一下,昨天写到了数据的显示,今天就写保存了。后台是用vue element写的,感觉这个框架非常好用,有兴趣的可以了解一下,这个tree支持拖拽的。我的愿望是娶个媳妇帮着设计界面,因为我做出的界面太丑了,有意的可以留言,我还没谈过恋爱呢(用我爸爸的话说还是小雏鸡呢),妳要抓紧联系我呀。分类对象:Categorypacka... 二、代码实现: 1.页面: <div data-options="region:'west',collapsible:false" style="width: 200px" title="商品类别" split=true> <ul id="tree" class="easyui-tree" style="padding: 10px"></ul&g... z_user(id,name,age),z_role(id,name),z_role_user(id,user_id,role_id); 其中z_role_user是关联表,user和role的关系是多对多,所以用到了@ManyToMany注解; 下面是三个实体: @Entity @Table(name = "z_user") public class UserX { @Id() @GeneratedValue(strategy = GenerationType.
这是一个Bug JPA我觉得是一个封装的很棒的框架,至于说很臃肿这个事,我觉得在需求需要很多复杂查询的时候,不适合用JPA。因为它的封装太棒了,以致于增强了表和实体类之间的耦合。不过在一些简单查询的部分,它真的太好用了。 而关于这个Bug,就不单单是JPA自身的问题了,究其原因是我在实体类中,使用了lombok框架的@Data,这是一个使用注解,在编译时修改语法并且自动生成Getter、Se...
@RequestMapping("ceshi") public Result ceshi(@RequestBody EquipmentParameter parameter) { log.info(" ============正在查询 "); //查询全部数据list List<EquipmentPar service层:业务层,存放业务逻辑处理,有接口和接口的实现,提供controller层调用方法 dao层:即mapper层,对数据库的持久化操作,定义对数据库操作的接口,具体的数据库操作存放在mapper.xml中 entity层:Domain或叫PO,存放与数据库一致的实体类,实现setter,getter方法 dto:数据传输对象,用于前后端的数据交互 config:配置各种配置信息 util:存放工具类
在Erlang语言中,为了提高运行效率,少占用系统资源,在编写递归调用的函数中,主要分为两类:非尾递归和尾递归。 尾递归是指在递归函数的内部进行递归调用时,在递归调用之后函数就结束了。以下以两个简单的例子作为说明: 1.使用非尾递归编写求0-X的数值之和 sum(0) -> sum(X) -> sum(X-1) + X.当传入3时,递归调用流程如下: sum(3-1)
一、向下递归:DROP FUNCTION IF EXISTS getAllChildren; CREATE FUNCTION queryChildrenAreaInfo(parentId INT) RETURNS VARCHAR(4000) BEGIN DECLARE sTemp VARCHAR(4000); DECLARE sTempChd VARCHAR(4000);SET sTemp='$';
Spring Boot是Spring框架中的一部分,它极大地简化了Spring的开发流程。使用Spring Boot可以非常容易地构建API,Web应用程序以及各种服务。Spring Boot提供了许多自动化配置和默认值,这使得开发人员可以专注于编写业务代码而不是配置框架。而Spring Boot JPA是Spring Boot中的一个模块,它提供了一个Java持久层API,可用于管理和操作Java对象到关系数据的映射。它是一种非常高效和灵活的ORM框架。 它不仅使查询和持久化数据变得轻松,而且相比于原始的JDBC方法而言具有更高的性能。 Spring Boot JPA的文档是非常详细和易于理解的。它解释了如何配置和使用JPA的所有方面,以及如何处理各种常见问题。随着阅读的深入,文档将逐渐介绍JPA的高级概念,例如事务管理,查询优化,复杂关系映射等。 Spring Boot JPA文档的其中一个主要优点是众多的示例代码。代码覆盖了许多常见的用例,从简单的查询和持久化对象到复杂查询和处理一对多及多对多关系。这些示例代码非常清晰,易于理解,并向开发人员展示了如何在Spring Boot应用程序中使用JPA。 综上所述,Spring Boot JPA文档提供了一种无与伦比的方式来学习和使用JPA。 它提供了全面的指南,带有丰富的示例代码,让开发人员更加轻松地掌握Spring Boot JPA