马府强
1 year ago
40 changed files with 988 additions and 0 deletions
@ -0,0 +1,8 @@ |
|||||
|
# Default ignored files |
||||
|
/shelf/ |
||||
|
/workspace.xml |
||||
|
# Datasource local storage ignored files |
||||
|
/../../../:\mybatisPlus\.idea/dataSources/ |
||||
|
/dataSources.local.xml |
||||
|
# Editor-based HTTP Client requests |
||||
|
/httpRequests/ |
@ -0,0 +1 @@ |
|||||
|
mp-demo |
@ -0,0 +1,18 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="CompilerConfiguration"> |
||||
|
<annotationProcessing> |
||||
|
<profile name="Maven default annotation processors profile" enabled="true"> |
||||
|
<sourceOutputDir name="target/generated-sources/annotations" /> |
||||
|
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" /> |
||||
|
<outputRelativeToContentRoot value="true" /> |
||||
|
<module name="mp-demo" /> |
||||
|
</profile> |
||||
|
</annotationProcessing> |
||||
|
</component> |
||||
|
<component name="JavacSettings"> |
||||
|
<option name="ADDITIONAL_OPTIONS_OVERRIDE"> |
||||
|
<module name="mp-demo" options="-parameters" /> |
||||
|
</option> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="Encoding"> |
||||
|
<file url="file://$PROJECT_DIR$/mp-demo/src/main/java" charset="UTF-8" /> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,25 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="RemoteRepositoriesConfiguration"> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Central Repository" /> |
||||
|
<option name="url" value="https://repo.maven.apache.org/maven2" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Maven Central repository" /> |
||||
|
<option name="url" value="https://repo1.maven.org/maven2" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="central" /> |
||||
|
<option name="name" value="Central Repository" /> |
||||
|
<option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" /> |
||||
|
</remote-repository> |
||||
|
<remote-repository> |
||||
|
<option name="id" value="jboss.community" /> |
||||
|
<option name="name" value="JBoss Community repository" /> |
||||
|
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" /> |
||||
|
</remote-repository> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,11 @@ |
|||||
|
<project version="4"> |
||||
|
<component name="ExternalStorageConfigurationManager" enabled="true" /> |
||||
|
<component name="MavenProjectsManager"> |
||||
|
<option name="originalFiles"> |
||||
|
<list> |
||||
|
<option value="$PROJECT_DIR$/mp-demo/pom.xml" /> |
||||
|
</list> |
||||
|
</option> |
||||
|
</component> |
||||
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> |
||||
|
</project> |
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="ProjectModuleManager"> |
||||
|
<modules> |
||||
|
<module fileurl="file://$PROJECT_DIR$/mp-demo/mp-demo.iml" filepath="$PROJECT_DIR$/mp-demo/mp-demo.iml" /> |
||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/mybatisPlus.iml" filepath="$PROJECT_DIR$/.idea/mybatisPlus.iml" /> |
||||
|
</modules> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,9 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<module type="JAVA_MODULE" version="4"> |
||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true"> |
||||
|
<exclude-output /> |
||||
|
<content url="file://$MODULE_DIR$" /> |
||||
|
<orderEntry type="inheritedJdk" /> |
||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||
|
</component> |
||||
|
</module> |
@ -0,0 +1,124 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="Palette2"> |
||||
|
<group name="Swing"> |
||||
|
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> |
||||
|
</item> |
||||
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="Button" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="RadioButton" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="CheckBox" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> |
||||
|
<initial-values> |
||||
|
<property name="text" value="Label" /> |
||||
|
</initial-values> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
|
<preferred-size width="150" height="-1" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
|
<preferred-size width="150" height="-1" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> |
||||
|
<preferred-size width="150" height="-1" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> |
||||
|
<preferred-size width="150" height="50" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
|
<preferred-size width="200" height="200" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> |
||||
|
<preferred-size width="200" height="200" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> |
||||
|
<preferred-size width="-1" height="20" /> |
||||
|
</default-constraints> |
||||
|
</item> |
||||
|
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> |
||||
|
</item> |
||||
|
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> |
||||
|
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> |
||||
|
</item> |
||||
|
</group> |
||||
|
</component> |
||||
|
</project> |
@ -0,0 +1,8 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<module version="4"> |
||||
|
<component name="FacetManager"> |
||||
|
<facet type="Spring" name="Spring"> |
||||
|
<configuration /> |
||||
|
</facet> |
||||
|
</component> |
||||
|
</module> |
@ -0,0 +1,110 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> |
||||
|
<modelVersion>4.0.0</modelVersion> |
||||
|
<parent> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-parent</artifactId> |
||||
|
<version>2.6.7</version> |
||||
|
<relativePath/> <!-- lookup parent from repository --> |
||||
|
</parent> |
||||
|
<groupId>com.woniu.mp</groupId> |
||||
|
<artifactId>mp-demo</artifactId> |
||||
|
<version>0.0.1-SNAPSHOT</version> |
||||
|
<name>mp-demo</name> |
||||
|
<description>Demo project for Spring Boot</description> |
||||
|
<properties> |
||||
|
<java.version>1.8</java.version> |
||||
|
<org.mapstruct.version>1.5.5.Final</org.mapstruct.version> |
||||
|
<org.projectlombok.version>1.18.30</org.projectlombok.version> |
||||
|
</properties> |
||||
|
<dependencies> |
||||
|
<dependency> |
||||
|
<groupId>org.mapstruct</groupId> |
||||
|
<artifactId>mapstruct</artifactId> |
||||
|
<version>${org.mapstruct.version}</version> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.mapstruct</groupId> |
||||
|
<artifactId>mapstruct-processor</artifactId> |
||||
|
<version>${org.mapstruct.version}</version> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.projectlombok</groupId> |
||||
|
<artifactId>lombok-mapstruct-binding</artifactId> |
||||
|
<version>0.2.0</version> |
||||
|
</dependency> |
||||
|
|
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>mysql</groupId> |
||||
|
<artifactId>mysql-connector-java</artifactId> |
||||
|
<version>8.0.30</version> |
||||
|
</dependency> |
||||
|
|
||||
|
|
||||
|
<!--Swagger 依赖--> |
||||
|
<dependency> |
||||
|
<groupId>io.springfox</groupId> |
||||
|
<artifactId>springfox-swagger2</artifactId> |
||||
|
<version>2.9.2</version> |
||||
|
</dependency> |
||||
|
<!--Swagger-ui 依赖--> |
||||
|
<dependency> |
||||
|
<groupId>io.springfox</groupId> |
||||
|
<artifactId>springfox-swagger-ui</artifactId> |
||||
|
<version>2.9.2</version> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.projectlombok</groupId> |
||||
|
<artifactId>lombok</artifactId> |
||||
|
<optional>true</optional> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-test</artifactId> |
||||
|
<scope>test</scope> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-web</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>com.baomidou</groupId> |
||||
|
<artifactId>mybatis-plus-boot-starter</artifactId> |
||||
|
<version>3.0.5</version> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>cn.hutool</groupId> |
||||
|
<artifactId>hutool-all</artifactId> |
||||
|
<version>5.8.11</version> |
||||
|
</dependency> |
||||
|
</dependencies> |
||||
|
|
||||
|
|
||||
|
<build> |
||||
|
<plugins> |
||||
|
<plugin> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-maven-plugin</artifactId> |
||||
|
<configuration> |
||||
|
<excludes> |
||||
|
<exclude> |
||||
|
<groupId>org.projectlombok</groupId> |
||||
|
<artifactId>lombok</artifactId> |
||||
|
</exclude> |
||||
|
</excludes> |
||||
|
</configuration> |
||||
|
</plugin> |
||||
|
</plugins> |
||||
|
</build> |
||||
|
|
||||
|
</project> |
@ -0,0 +1,21 @@ |
|||||
|
package com.woniu.mp; |
||||
|
|
||||
|
import org.springframework.boot.SpringApplication; |
||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
|
||||
|
/** |
||||
|
* <p> |
||||
|
* 基于mybatisPlus的代码生成器插件 |
||||
|
* </p> |
||||
|
* @author woniu |
||||
|
* @since 2023-09-24 |
||||
|
*/ |
||||
|
@SpringBootApplication |
||||
|
public class MpDemoApplication { |
||||
|
|
||||
|
public static void main(String[] args) { |
||||
|
SpringApplication.run(MpDemoApplication.class, args); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,30 @@ |
|||||
|
package com.woniu.mp.controller; |
||||
|
|
||||
|
import cn.hutool.core.lang.tree.Tree; |
||||
|
import com.woniu.mp.service.CategoryService; |
||||
|
import com.woniu.mp.util.R; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("product/category") |
||||
|
public class CategoryController { |
||||
|
@Autowired |
||||
|
private CategoryService categoryService; |
||||
|
|
||||
|
/** |
||||
|
* 查询出所有分类以及子分类,以树形结构组装起来列表 |
||||
|
*/ |
||||
|
@RequestMapping("/list/tree") |
||||
|
public R list(){ |
||||
|
List<Tree<Long>> trees = categoryService.listWithTree(); |
||||
|
return R.ok().put("data", trees); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,71 @@ |
|||||
|
package com.woniu.mp.entity; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableField; |
||||
|
import com.baomidou.mybatisplus.annotation.TableId; |
||||
|
import com.baomidou.mybatisplus.annotation.TableLogic; |
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.fasterxml.jackson.annotation.JsonInclude; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 商品三级分类 |
||||
|
* |
||||
|
* @author 夏沫止水 |
||||
|
* @email HeJieLin@gulimall.com |
||||
|
* @date 2020-05-22 19:00:18 |
||||
|
*/ |
||||
|
@Data |
||||
|
@TableName("pms_category") |
||||
|
public class CategoryEntity implements Serializable { |
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 分类id |
||||
|
*/ |
||||
|
@TableId |
||||
|
private Long catId; |
||||
|
/** |
||||
|
* 分类名称 |
||||
|
*/ |
||||
|
private String name; |
||||
|
/** |
||||
|
* 父分类id |
||||
|
*/ |
||||
|
private Long parentCid; |
||||
|
/** |
||||
|
* 层级 |
||||
|
*/ |
||||
|
private Integer catLevel; |
||||
|
/** |
||||
|
* 是否显示[0-不显示,1显示] |
||||
|
*/ |
||||
|
@TableLogic(value = "1",delval = "0") |
||||
|
private Integer showStatus; |
||||
|
/** |
||||
|
* 排序 |
||||
|
*/ |
||||
|
private Integer sort; |
||||
|
/** |
||||
|
* 图标地址 |
||||
|
*/ |
||||
|
private String icon; |
||||
|
/** |
||||
|
* 计量单位 |
||||
|
*/ |
||||
|
private String productUnit; |
||||
|
/** |
||||
|
* 商品数量 |
||||
|
*/ |
||||
|
private Integer productCount; |
||||
|
|
||||
|
/** |
||||
|
* 所有子分类 |
||||
|
*/ |
||||
|
@JsonInclude(JsonInclude.Include.NON_EMPTY) |
||||
|
@TableField(exist = false) |
||||
|
private List<CategoryEntity> children; |
||||
|
|
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
package com.woniu.mp.mapper; |
||||
|
|
||||
|
|
||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
||||
|
import com.woniu.mp.entity.CategoryEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
|
||||
|
|
||||
|
@Mapper |
||||
|
public interface CategoryDao extends BaseMapper<CategoryEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package com.woniu.mp.mapstruct.first; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class Source { |
||||
|
private String stringProp; |
||||
|
private Long longProp; |
||||
|
} |
||||
|
|
@ -0,0 +1,24 @@ |
|||||
|
package com.woniu.mp.mapstruct.first; |
||||
|
|
||||
|
import org.mapstruct.Mapper; |
||||
|
import org.mapstruct.Mapping; |
||||
|
import org.mapstruct.MappingConstants; |
||||
|
|
||||
|
/** |
||||
|
* mapstruct这么用,同事也纷纷模仿 |
||||
|
* mapstruct几个常用小技巧 |
||||
|
*/ |
||||
|
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) |
||||
|
public interface SourceTargetMapper { |
||||
|
/** |
||||
|
* 常量转换 |
||||
|
*/ |
||||
|
@Mapping(target = "stringProperty", source = "stringProp", defaultValue = "undefined") |
||||
|
@Mapping(target = "longProperty", source = "longProp", defaultValue = "-1l") |
||||
|
@Mapping(target = "stringConstant", constant = "Constant Value") |
||||
|
@Mapping(target = "integerConstant", constant = "14") |
||||
|
@Mapping(target = "longWrapperConstant", constant = "3001L") |
||||
|
@Mapping(target = "dateConstant", dateFormat = "yyyy-MM-dd", constant = "2023-09-01-") |
||||
|
Target sourceToTarget(Source s); |
||||
|
|
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package com.woniu.mp.mapstruct.first; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
|
||||
|
@Data |
||||
|
public class Target { |
||||
|
private String stringProperty; |
||||
|
private long longProperty; |
||||
|
private String stringConstant; |
||||
|
private Integer integerConstant; |
||||
|
private Long longWrapperConstant; |
||||
|
private Date dateConstant; |
||||
|
|
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package com.woniu.mp.mapstruct.four; |
||||
|
|
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
@Component |
||||
|
public class SimpleService { |
||||
|
public String formatName(String name) { |
||||
|
return "您的名字是:" + name; |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
package com.woniu.mp.mapstruct.four; |
||||
|
|
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class Student { |
||||
|
private String name; |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
package com.woniu.mp.mapstruct.four; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class StudentDto { |
||||
|
private String name; |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package com.woniu.mp.mapstruct.four; |
||||
|
|
||||
|
|
||||
|
import org.mapstruct.Mapper; |
||||
|
import org.mapstruct.Mapping; |
||||
|
import org.mapstruct.MappingConstants; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
|
||||
|
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) |
||||
|
public abstract class StudentMapper { |
||||
|
|
||||
|
@Autowired |
||||
|
protected SimpleService simpleService; |
||||
|
|
||||
|
/** |
||||
|
* 转换的时候,如何注入springBean |
||||
|
*/ |
||||
|
@Mapping(target = "name", expression = "java(simpleService.formatName(source.getName()))") |
||||
|
public abstract Student map(StudentDto source); |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
package com.woniu.mp.mapstruct.second; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class Customer { |
||||
|
private String id; |
||||
|
private String name; |
||||
|
private TimeAndFormat timeAndFormat; |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
package com.woniu.mp.mapstruct.second; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class CustomerDto { |
||||
|
public Long id; |
||||
|
public String customerName; |
||||
|
|
||||
|
private String format; |
||||
|
private Date time; |
||||
|
} |
||||
|
|
@ -0,0 +1,21 @@ |
|||||
|
package com.woniu.mp.mapstruct.second; |
||||
|
|
||||
|
import org.mapstruct.Mapper; |
||||
|
import org.mapstruct.Mapping; |
||||
|
import org.mapstruct.MappingConstants; |
||||
|
|
||||
|
import java.util.UUID; |
||||
|
|
||||
|
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, imports = UUID.class) |
||||
|
public interface CustomerMapper { |
||||
|
|
||||
|
/** |
||||
|
* 场景二:转换中调用表达式 |
||||
|
*/ |
||||
|
@Mapping(target = "timeAndFormat", |
||||
|
expression = "java( new TimeAndFormat( s.getTime(), s.getFormat() ) )") |
||||
|
@Mapping(target = "id", source = "id", defaultExpression = "java( UUID.randomUUID().toString() )") |
||||
|
Customer toCustomer(CustomerDto s); |
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,16 @@ |
|||||
|
package com.woniu.mp.mapstruct.second; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class TimeAndFormat { |
||||
|
private Date time; |
||||
|
private String format; |
||||
|
|
||||
|
public TimeAndFormat(Date time, String format) { |
||||
|
this.time = time; |
||||
|
this.format = format; |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
package com.woniu.mp.mapstruct.third; |
||||
|
|
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class Bike { |
||||
|
/** |
||||
|
* 唯一id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
private Date creationDate; |
||||
|
|
||||
|
/** |
||||
|
* 品牌 |
||||
|
*/ |
||||
|
private String brandName; |
||||
|
|
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
package com.woniu.mp.mapstruct.third; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class BikeDto { |
||||
|
|
||||
|
/** |
||||
|
* 唯一id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
private Date creationDate; |
||||
|
|
||||
|
/** |
||||
|
* 品牌 |
||||
|
*/ |
||||
|
private String brand; |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package com.woniu.mp.mapstruct.third; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class Car { |
||||
|
/** |
||||
|
* 唯一id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
private Date creationDate; |
||||
|
|
||||
|
private String otherName; |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package com.woniu.mp.mapstruct.third; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
@Data |
||||
|
public class CarDto { |
||||
|
/** |
||||
|
* 唯一id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
private Date creationDate; |
||||
|
|
||||
|
private String other; |
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
package com.woniu.mp.mapstruct.third; |
||||
|
|
||||
|
|
||||
|
import org.mapstruct.Mapping; |
||||
|
|
||||
|
import java.lang.annotation.Retention; |
||||
|
import java.lang.annotation.RetentionPolicy; |
||||
|
|
||||
|
//通用注解
|
||||
|
@Retention(RetentionPolicy.CLASS) |
||||
|
//自动生成当前日期
|
||||
|
@Mapping(target = "creationDate", expression = "java(new java.util.Date())") |
||||
|
//忽略id
|
||||
|
@Mapping(target = "id", ignore = true) |
||||
|
public @interface ToEntity { |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
package com.woniu.mp.mapstruct.third; |
||||
|
|
||||
|
import org.mapstruct.Mapper; |
||||
|
import org.mapstruct.Mapping; |
||||
|
import org.mapstruct.MappingConstants; |
||||
|
|
||||
|
|
||||
|
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING) |
||||
|
public interface TransportationMapper { |
||||
|
/** |
||||
|
* 类共用属性,如何复用 |
||||
|
*/ |
||||
|
@ToEntity |
||||
|
@Mapping( target = "brandName", source = "brand") |
||||
|
Bike map(BikeDto source); |
||||
|
|
||||
|
@ToEntity |
||||
|
@Mapping( target = "otherName", source = "other") |
||||
|
Car map(CarDto source); |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
package com.woniu.mp.service; |
||||
|
|
||||
|
|
||||
|
import cn.hutool.core.lang.tree.Tree; |
||||
|
import com.baomidou.mybatisplus.extension.service.IService; |
||||
|
import com.woniu.mp.entity.CategoryEntity; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
public interface CategoryService extends IService<CategoryEntity> { |
||||
|
|
||||
|
|
||||
|
|
||||
|
List<Tree<Long>> listWithTree(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
@ -0,0 +1,52 @@ |
|||||
|
package com.woniu.mp.service.impl; |
||||
|
|
||||
|
import cn.hutool.core.collection.CollectionUtil; |
||||
|
import cn.hutool.core.lang.tree.Tree; |
||||
|
import cn.hutool.core.lang.tree.TreeNode; |
||||
|
import cn.hutool.core.lang.tree.TreeUtil; |
||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
||||
|
import com.woniu.mp.entity.CategoryEntity; |
||||
|
import com.woniu.mp.mapper.CategoryDao; |
||||
|
import com.woniu.mp.service.CategoryService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.*; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
|
||||
|
@Service("categoryService") |
||||
|
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService { |
||||
|
|
||||
|
/** |
||||
|
* 树形数据还可以这样组装?真优雅! |
||||
|
*/ |
||||
|
public List<Tree<Long>> listWithTree() { |
||||
|
List<CategoryEntity> entities = baseMapper.selectList(null); |
||||
|
if (!CollectionUtil.isEmpty(entities)) { |
||||
|
List<TreeNode<Long>> list = entities. |
||||
|
stream(). |
||||
|
map(CategoryServiceImpl::getLongTreeNode). |
||||
|
collect(Collectors.toList()); |
||||
|
return TreeUtil.build(list, 0L); |
||||
|
} |
||||
|
return Collections.emptyList(); |
||||
|
} |
||||
|
|
||||
|
private static TreeNode<Long> getLongTreeNode(CategoryEntity item) { |
||||
|
TreeNode<Long> treeNode = new TreeNode<>(); |
||||
|
treeNode.setId(item.getCatId()); |
||||
|
treeNode.setParentId(item.getParentCid()); |
||||
|
treeNode.setName(item.getName()); |
||||
|
treeNode.setWeight(item.getSort()); |
||||
|
Map<String, Object> extra = new HashMap<>(); |
||||
|
extra.put("showStatus", item.getShowStatus()); |
||||
|
extra.put("catLevel", item.getCatLevel()); |
||||
|
extra.put("icon", item.getIcon()); |
||||
|
extra.put("productUnit", item.getProductUnit()); |
||||
|
extra.put("productCount", item.getProductCount()); |
||||
|
treeNode.setExtra(extra); |
||||
|
return treeNode; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
package com.woniu.mp.util; |
||||
|
|
||||
|
|
||||
|
import cn.hutool.core.bean.BeanUtil; |
||||
|
import cn.hutool.core.bean.copier.CopyOptions; |
||||
|
|
||||
|
public class MergeUtil { |
||||
|
private static final CopyOptions options = CopyOptions.create().setIgnoreNullValue(true).setOverride(false); |
||||
|
private static final CopyOptions optionsAllowOverride = CopyOptions.create().setIgnoreNullValue(true).setOverride(true); |
||||
|
|
||||
|
//将sourceBean中的属性合并到tagetBean,忽略Null值,非Null值不允许覆盖
|
||||
|
public static Object merge(Object sourceBean, Object targetBean) { |
||||
|
BeanUtil.copyProperties(sourceBean, targetBean, options); |
||||
|
|
||||
|
return targetBean; |
||||
|
} |
||||
|
|
||||
|
//将sourceBean中的属性合并到tagetBean,忽略Null值,非Null值允许覆盖
|
||||
|
public static Object mergeAllowOverride(Object sourceBean, Object targetBean) { |
||||
|
BeanUtil.copyProperties(sourceBean, targetBean, optionsAllowOverride); |
||||
|
|
||||
|
return targetBean; |
||||
|
} |
||||
|
} |
@ -0,0 +1,56 @@ |
|||||
|
|
||||
|
package com.woniu.mp.util; |
||||
|
|
||||
|
|
||||
|
import java.util.HashMap; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
|
||||
|
public class R extends HashMap<String, Object> { |
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
public R setData(Object data) { |
||||
|
put("data",data); |
||||
|
return this; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public R() { |
||||
|
put("code", 0); |
||||
|
put("msg", "success"); |
||||
|
} |
||||
|
|
||||
|
public static R error(int code, String msg) { |
||||
|
R r = new R(); |
||||
|
r.put("code", code); |
||||
|
r.put("msg", msg); |
||||
|
return r; |
||||
|
} |
||||
|
|
||||
|
public static R ok(String msg) { |
||||
|
R r = new R(); |
||||
|
r.put("msg", msg); |
||||
|
return r; |
||||
|
} |
||||
|
|
||||
|
public static R ok(Map<String, Object> map) { |
||||
|
R r = new R(); |
||||
|
r.putAll(map); |
||||
|
return r; |
||||
|
} |
||||
|
|
||||
|
public static R ok() { |
||||
|
return new R(); |
||||
|
} |
||||
|
|
||||
|
public R put(String key, Object value) { |
||||
|
super.put(key, value); |
||||
|
return this; |
||||
|
} |
||||
|
|
||||
|
public Integer getCode() { |
||||
|
|
||||
|
return (Integer) this.get("code"); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
spring: |
||||
|
datasource: |
||||
|
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai |
||||
|
driver-class-name: com.mysql.cj.jdbc.Driver |
||||
|
username: root |
||||
|
password: 123456 |
||||
|
hikari: |
||||
|
#最大连接数量,默认10 |
||||
|
maximum-pool-size: 1 |
||||
|
logging: |
||||
|
level: |
||||
|
com.itheima: debug |
||||
|
pattern: |
||||
|
dateformat: HH:mm:ss |
||||
|
mybatis: |
||||
|
mapper-locations: classpath*:mapper/*.xml |
@ -0,0 +1,5 @@ |
|||||
|
<?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.woniu.mp.mapper.UserMapper"> |
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,12 @@ |
|||||
|
package com.woniu.mp; |
||||
|
|
||||
|
import org.junit.jupiter.api.Test; |
||||
|
|
||||
|
class MpDemoApplicationTests { |
||||
|
|
||||
|
@Test |
||||
|
void contextLoads() { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,69 @@ |
|||||
|
package com.woniu.mp.mapper; |
||||
|
|
||||
|
|
||||
|
import com.woniu.mp.mapstruct.first.Source; |
||||
|
import com.woniu.mp.mapstruct.first.SourceTargetMapper; |
||||
|
import com.woniu.mp.mapstruct.first.Target; |
||||
|
|
||||
|
import com.woniu.mp.mapstruct.second.Customer; |
||||
|
import com.woniu.mp.mapstruct.second.CustomerDto; |
||||
|
import com.woniu.mp.mapstruct.second.CustomerMapper; |
||||
|
import org.junit.jupiter.api.Test; |
||||
|
import org.springframework.boot.test.context.SpringBootTest; |
||||
|
|
||||
|
import javax.annotation.Resource; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
@SpringBootTest |
||||
|
class TestTransactionTest { |
||||
|
@Resource |
||||
|
TestTransaction testTransaction; |
||||
|
|
||||
|
@Resource |
||||
|
SourceTargetMapper targetMapper; |
||||
|
|
||||
|
@Resource |
||||
|
CustomerMapper customerMapper; |
||||
|
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 常量转换 |
||||
|
*/ |
||||
|
@Test |
||||
|
void testFirst() { |
||||
|
Source source = new Source(); |
||||
|
source.setLongProp(1l); |
||||
|
source.setStringProp("woniu"); |
||||
|
Target target = targetMapper.sourceToTarget(source); |
||||
|
System.out.println(target); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 转换中调用表达式 |
||||
|
*/ |
||||
|
@Test |
||||
|
void testSecond() { |
||||
|
CustomerDto customerDto = new CustomerDto(); |
||||
|
customerDto.setId(1L); |
||||
|
customerDto.setTime(new Date()); |
||||
|
customerDto.setCustomerName("woniu"); |
||||
|
customerDto.setFormat("yyyy-MM"); |
||||
|
Customer customer = customerMapper.toCustomer(customerDto); |
||||
|
System.out.println(customer); |
||||
|
} |
||||
|
|
||||
|
@Test |
||||
|
void testThird() { |
||||
|
CustomerDto customerDto = new CustomerDto(); |
||||
|
customerDto.setId(1L); |
||||
|
customerDto.setTime(new Date()); |
||||
|
customerDto.setCustomerName("woniu"); |
||||
|
customerDto.setFormat("yyyy-MM"); |
||||
|
Customer customer = customerMapper.toCustomer(customerDto); |
||||
|
System.out.println(customer); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
} |
Loading…
Reference in new issue