From 8def9014e4e7c4a3b2736e3b9dcca83e882e7ec2 Mon Sep 17 00:00:00 2001
From: yuye <631941527@qq.com>
Date: Tue, 19 May 2020 16:38:04 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=A4=BA=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mars-example/README.md | 5 +
mars-example/pom.xml | 35 ++++++
.../src/main/java/com/mars/exp/ExpStart.java | 14 +++
.../main/java/com/mars/exp/api/ExpApi.java | 40 +++++++
.../com/mars/exp/api/inters/ExpInter.java | 57 ++++++++++
.../main/java/com/mars/exp/api/vo/ExpVO.java | 42 ++++++++
.../java/com/mars/exp/config/ExpConfig.java | 36 +++++++
.../java/com/mars/exp/core/aop/ExpAop.java | 37 +++++++
.../java/com/mars/exp/core/dao/ExpDAO.java | 100 ++++++++++++++++++
.../java/com/mars/exp/core/dto/ExpDTO.java | 15 +++
.../mars/exp/core/service/ExpApiService.java | 94 ++++++++++++++++
.../com/mars/exp/test/ExpApiServiceTest.java | 42 ++++++++
.../java/com/mars/exp/test/ExpTestConfig.java | 36 +++++++
13 files changed, 553 insertions(+)
create mode 100644 mars-example/README.md
create mode 100644 mars-example/pom.xml
create mode 100644 mars-example/src/main/java/com/mars/exp/ExpStart.java
create mode 100644 mars-example/src/main/java/com/mars/exp/api/ExpApi.java
create mode 100644 mars-example/src/main/java/com/mars/exp/api/inters/ExpInter.java
create mode 100644 mars-example/src/main/java/com/mars/exp/api/vo/ExpVO.java
create mode 100644 mars-example/src/main/java/com/mars/exp/config/ExpConfig.java
create mode 100644 mars-example/src/main/java/com/mars/exp/core/aop/ExpAop.java
create mode 100644 mars-example/src/main/java/com/mars/exp/core/dao/ExpDAO.java
create mode 100644 mars-example/src/main/java/com/mars/exp/core/dto/ExpDTO.java
create mode 100644 mars-example/src/main/java/com/mars/exp/core/service/ExpApiService.java
create mode 100644 mars-example/src/test/java/com/mars/exp/test/ExpApiServiceTest.java
create mode 100644 mars-example/src/test/java/com/mars/exp/test/ExpTestConfig.java
diff --git a/mars-example/README.md b/mars-example/README.md
new file mode 100644
index 0000000..1615ce9
--- /dev/null
+++ b/mars-example/README.md
@@ -0,0 +1,5 @@
+1. 这个模块是一个示例,跟本项目并无关系,只是用本框架开发一个示例,供大家参考。
+2. 由于是一个示例,所以模块的划分没有按照文档上推荐的来,而是用包来划分的模块,大家千万不要被带偏哦。
+
+1. This module is an example and has nothing to do with this project. It is just an example developed with this framework for your reference.
+2. Because it is an example, the division of the modules is not according to the recommendations in the documentation, but the modules divided by the package.
\ No newline at end of file
diff --git a/mars-example/pom.xml b/mars-example/pom.xml
new file mode 100644
index 0000000..e806ce0
--- /dev/null
+++ b/mars-example/pom.xml
@@ -0,0 +1,35 @@
+
+
+
+ 4.0.0
+ com.mars.example
+ mars-example
+ 3.0.19
+ jar
+
+
+
+ com.github.yuyenews
+ mars-starter
+ 3.0.19
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+ true
+
+
+
+
+
\ No newline at end of file
diff --git a/mars-example/src/main/java/com/mars/exp/ExpStart.java b/mars-example/src/main/java/com/mars/exp/ExpStart.java
new file mode 100644
index 0000000..2e35621
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/ExpStart.java
@@ -0,0 +1,14 @@
+package com.mars.exp;
+
+import com.mars.exp.config.ExpConfig;
+import com.mars.start.StartMars;
+
+/**
+ * 启动类
+ */
+public class ExpStart {
+
+ public static void main(String[] args) {
+ StartMars.start(ExpStart.class,new ExpConfig());
+ }
+}
diff --git a/mars-example/src/main/java/com/mars/exp/api/ExpApi.java b/mars-example/src/main/java/com/mars/exp/api/ExpApi.java
new file mode 100644
index 0000000..0dd161c
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/api/ExpApi.java
@@ -0,0 +1,40 @@
+package com.mars.exp.api;
+
+import com.mars.common.annotation.api.MarsApi;
+import com.mars.common.annotation.api.RequestMethod;
+import com.mars.common.annotation.enums.ReqMethod;
+import com.mars.exp.api.vo.ExpVO;
+
+import java.util.List;
+
+@MarsApi(refBean = "expApiService")
+public interface ExpApi {
+
+ /**
+ * get请求示例
+ * http://127.0.0.1:8080/expGetRequest?name=张三&names=王五&names=赵六
+ * @param expVO
+ * @return
+ */
+ List expGetRequest(ExpVO expVO);
+
+ /**
+ * post请求示例
+ * http://127.0.0.1:8080/expPostRequest
+ * 传参用表单,不支持json传参
+ * @param expVO
+ * @return
+ */
+ @RequestMethod(ReqMethod.POST)
+ List expPostRequest(ExpVO expVO);
+
+ /**
+ * 文件上传示例
+ * http://127.0.0.1:8080/expUploadRequest
+ * 传参用formData,不支持json传参
+ * @param expVO
+ * @return
+ */
+ @RequestMethod(ReqMethod.POST)
+ String expUploadRequest(ExpVO expVO);
+}
diff --git a/mars-example/src/main/java/com/mars/exp/api/inters/ExpInter.java b/mars-example/src/main/java/com/mars/exp/api/inters/ExpInter.java
new file mode 100644
index 0000000..299ca2c
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/api/inters/ExpInter.java
@@ -0,0 +1,57 @@
+package com.mars.exp.api.inters;
+
+import com.mars.common.annotation.api.MarsInterceptor;
+import com.mars.mvc.base.BaseInterceptor;
+import com.mars.server.server.request.HttpMarsRequest;
+import com.mars.server.server.request.HttpMarsResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 拦截所有exp开头的api
+ */
+@MarsInterceptor(pattern = "/exp*")
+public class ExpInter implements BaseInterceptor {
+
+ /**
+ * api执行前
+ * @param request
+ * @param response
+ * @return
+ */
+ @Override
+ public Object beforeRequest(HttpMarsRequest request, HttpMarsResponse response) {
+ System.out.println("开始执行拦截器");
+ // 返回SUCCESS表示通过,如果不通过的话,直接返回对象或者提示信息,前端会收到
+ return SUCCESS;
+ }
+
+ /**
+ * api执行后
+ * @param request
+ * @param response
+ * @param obj 控制层返回的数据
+ * @return
+ */
+ @Override
+ public Object afterRequest(HttpMarsRequest request, HttpMarsResponse response, Object obj) {
+ System.out.println("执行拦截器结束");
+ // 返回SUCCESS表示通过,如果不通过的话,直接返回对象或者提示信息,前端会收到
+ return SUCCESS;
+ }
+
+ /**
+ * 有些被拦截规则拦截了的api,但是这个拦截器又不打算处理,
+ * 可以添加到List中,并在这个方法里返回
+ * @return
+ */
+ @Override
+ public List exclude() {
+ // 这两个api直接通过,不拦截
+ List list = new ArrayList<>();
+ list.add("/expPostRequest");
+ list.add("/expUploadRequest");
+ return list;
+ }
+}
diff --git a/mars-example/src/main/java/com/mars/exp/api/vo/ExpVO.java b/mars-example/src/main/java/com/mars/exp/api/vo/ExpVO.java
new file mode 100644
index 0000000..755c554
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/api/vo/ExpVO.java
@@ -0,0 +1,42 @@
+package com.mars.exp.api.vo;
+
+import com.mars.common.annotation.api.MarsDataCheck;
+import com.mars.server.server.request.model.MarsFileUpLoad;
+
+/**
+ * 所有实体类都支持lombok,这里为了兼容所有的环境,就还是采用的原始的get,set
+ */
+public class ExpVO {
+
+ @MarsDataCheck(notNull = true, msg = "名称不可以为空")
+ private String name;
+
+ @MarsDataCheck(notNull = true, msg = "名称们不可以为空")
+ private String[] names;
+
+ private MarsFileUpLoad marsFileUpLoad;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String[] getNames() {
+ return names;
+ }
+
+ public void setNames(String[] names) {
+ this.names = names;
+ }
+
+ public MarsFileUpLoad getMarsFileUpLoad() {
+ return marsFileUpLoad;
+ }
+
+ public void setMarsFileUpLoad(MarsFileUpLoad marsFileUpLoad) {
+ this.marsFileUpLoad = marsFileUpLoad;
+ }
+}
diff --git a/mars-example/src/main/java/com/mars/exp/config/ExpConfig.java b/mars-example/src/main/java/com/mars/exp/config/ExpConfig.java
new file mode 100644
index 0000000..ad8c2f6
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/config/ExpConfig.java
@@ -0,0 +1,36 @@
+package com.mars.exp.config;
+
+import com.mars.common.base.config.MarsConfig;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * 更多配置项,请到官网查看官方文档
+ */
+public class ExpConfig extends MarsConfig {
+
+ /**
+ * 配置数据源
+ * @return
+ */
+ @Override
+ public List jdbcProperties() {
+ List list = new ArrayList<>();
+
+ // 用的是阿里巴巴的 druid数据源,其他属性可自行查阅
+ Properties properties = new Properties();
+ properties.put("name","dataSource");
+ properties.put("url","");
+ properties.put("username","");
+ properties.put("password","");
+ properties.put("driverClassName","com.mysql.jdbc.Driver");
+
+ list.add(properties);
+
+ // 如果要多个数据源,add多个到list即可
+
+ return list;
+ }
+}
diff --git a/mars-example/src/main/java/com/mars/exp/core/aop/ExpAop.java b/mars-example/src/main/java/com/mars/exp/core/aop/ExpAop.java
new file mode 100644
index 0000000..abaa0cd
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/core/aop/ExpAop.java
@@ -0,0 +1,37 @@
+package com.mars.exp.core.aop;
+
+import com.mars.aop.base.BaseAop;
+
+/**
+ * AOP示例
+ */
+public class ExpAop implements BaseAop {
+
+ /**
+ * 被监听的方法执行前执行这个方法
+ * @param args 被监听的方法的参数
+ */
+ @Override
+ public void startMethod(Object[] args) {
+ System.out.println("开始执行AOP");
+ }
+
+ /**
+ * 被监听的方法执行结束后执行这个方法
+ * @param args 被监听的方法的参数
+ * @param result 被监听方法的返回值
+ */
+ @Override
+ public void endMethod(Object[] args, Object result) {
+ System.out.println("执行AOP结束");
+ }
+
+ /**
+ * 被监听的方法出异常了,执行这个方法
+ * @param e 异常
+ */
+ @Override
+ public void exp(Throwable e) {
+ System.out.println("方法出异常了");
+ }
+}
diff --git a/mars-example/src/main/java/com/mars/exp/core/dao/ExpDAO.java b/mars-example/src/main/java/com/mars/exp/core/dao/ExpDAO.java
new file mode 100644
index 0000000..2ae4422
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/core/dao/ExpDAO.java
@@ -0,0 +1,100 @@
+package com.mars.exp.core.dao;
+
+import com.mars.common.annotation.jdbc.MarsDao;
+import com.mars.exp.core.dto.ExpDTO;
+import com.mars.jdbc.annotation.DataSource;
+import com.mars.jdbc.annotation.MarsGet;
+import com.mars.jdbc.annotation.MarsSelect;
+import com.mars.jdbc.annotation.MarsUpdate;
+import com.mars.jdbc.annotation.enums.OperType;
+import com.mars.jdbc.helper.model.PageModel;
+import com.mars.jdbc.helper.model.PageParamModel;
+import com.mars.jdbc.helper.templete.JdbcTemplate;
+
+import java.util.List;
+
+@MarsDao
+public abstract class ExpDAO {
+
+ /**
+ * 根据主键查询一条数据
+ * @param id
+ * @return
+ */
+ @MarsGet(tableName = "数据库表名",primaryKey = "id")
+ public abstract ExpDTO selectById(int id);
+
+ /**
+ * 插入一条数据
+ * @param expDTO
+ * @return
+ */
+ @MarsUpdate(tableName = "数据库表名",operType = OperType.INSERT)
+ public abstract int insert(ExpDTO expDTO);
+
+ /**
+ * 根据主键删除一条数据
+ * @param id
+ * @return
+ */
+ @MarsUpdate(tableName = "数据库表名",operType = OperType.DELETE,primaryKey = "id")
+ public abstract int delete(int id);
+
+ /**
+ * 根据主键更新一条数据
+ * @param expDTO
+ * @return
+ */
+ @MarsUpdate(tableName = "数据库表名",operType = OperType.UPDATE,primaryKey = "id")
+ public abstract int update(ExpDTO expDTO);
+
+ /**
+ * sql语句固定的查询
+ * #{} 占位符,无sql注入风险
+ * ${} 字符串拼接,有sql注入风险
+ * @param expDTO
+ * @return
+ */
+ @DataSource("数据源name,不传默认采用第一个")//如果要采用默认数据源的话,这个注解可以不配
+ @MarsSelect(sql = "select a,b,c from 表名 where a=#{a} and b=${b}",resultType = ExpDTO.class)
+ public abstract List selectList(ExpDTO expDTO);
+
+ /**
+ * sql语句固定的分页查询
+ * @param pageParamModel
+ * @return
+ */
+ @MarsSelect(sql = "select a,b,c from 表名 where a=#{a} and b=${b}",resultType = ExpDTO.class,page = true)
+ public abstract PageModel selectPageList(PageParamModel pageParamModel);
+
+ /**
+ * sql语句不固定的查询
+ * @param expDTO
+ * @return
+ * @throws Exception
+ */
+ public List selectList2(ExpDTO expDTO) throws Exception {
+ StringBuffer sql = new StringBuffer();
+
+ // 这里根据expDTO里的参数,判断,然后拼接sql就好了
+
+ return JdbcTemplate.get("数据源name,不传默认采用第一个").selectList(sql.toString(),expDTO,ExpDTO.class);
+ }
+
+ /**
+ * sql语句不固定的分页查询
+ * @param expDTO
+ * @return
+ * @throws Exception
+ */
+ public PageModel selectPageList2(ExpDTO expDTO) throws Exception {
+ StringBuffer sql = new StringBuffer();
+
+ // 这里根据expDTO里的参数,判断,然后拼接sql就好了
+
+ // 创建传参,实际开发中,这个对象需要从外面传进来,因为page和pageSize是活的,不能写死
+ PageParamModel pageParamModel = PageParamModel.getPageParamModel(1,100);
+ pageParamModel.setParam(expDTO);
+ return JdbcTemplate.get().selectPageList(sql.toString(),pageParamModel,ExpDTO.class);
+ }
+}
diff --git a/mars-example/src/main/java/com/mars/exp/core/dto/ExpDTO.java b/mars-example/src/main/java/com/mars/exp/core/dto/ExpDTO.java
new file mode 100644
index 0000000..cdd28b1
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/core/dto/ExpDTO.java
@@ -0,0 +1,15 @@
+package com.mars.exp.core.dto;
+
+/**
+ * 这里面尽量用包装器类型,比如用Integer不用int,
+ * 因为包装器类型可以赋值为null,这样如果不需要被sql用到的时候,可以赋值为null,免被带入到sql
+ */
+public class ExpDTO {
+
+ /**
+ * 这里的字段名必须跟查询语句中的字段名 一模一样(如果取了别名就跟别名一样)
+ * 如果是增删改操作,并且你用的是框架自带的方法,那么必须跟数据表的字段名一模一样
+ * 如果数据库是user_name 那么这里也必须是user_name,不可以是userName
+ */
+ private Integer id;
+}
diff --git a/mars-example/src/main/java/com/mars/exp/core/service/ExpApiService.java b/mars-example/src/main/java/com/mars/exp/core/service/ExpApiService.java
new file mode 100644
index 0000000..024db85
--- /dev/null
+++ b/mars-example/src/main/java/com/mars/exp/core/service/ExpApiService.java
@@ -0,0 +1,94 @@
+package com.mars.exp.core.service;
+
+import com.alibaba.fastjson.JSON;
+import com.mars.common.annotation.bean.MarsAop;
+import com.mars.common.annotation.bean.MarsBean;
+import com.mars.common.annotation.bean.MarsWrite;
+import com.mars.exp.api.ExpApi;
+import com.mars.exp.api.vo.ExpVO;
+import com.mars.exp.core.aop.ExpAop;
+import com.mars.exp.core.dao.ExpDAO;
+import com.mars.server.server.request.model.MarsFileUpLoad;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * service层
+ */
+@MarsBean("expApiService")
+public class ExpApiService implements ExpApi {
+
+ /**
+ * 为了让大家可以快速的跑起来,所以本示例没有连接数据库
+ * 所以自然也就不会调用dao的方法了,这里注入进来的,只是为了演示IOC的用法
+ */
+ @MarsWrite
+ private ExpDAO expDAO;
+
+ /**
+ * 这个方法上加了aop监听
+ * @param expVO
+ * @return
+ */
+ @Override
+ @MarsAop(className = ExpAop.class)
+ public List expGetRequest(ExpVO expVO) {
+ // 打印expDAO,如果不为null就说明已经注入了
+ System.out.println(expDAO);
+
+ // 打印接收到的参数,看是否接收成功
+ System.out.println(expVO.getName());
+ System.out.println(JSON.toJSONString(expVO.getNames()));
+
+ // 返回数据
+ return getExpResultData();
+ }
+
+ @Override
+ public List expPostRequest(ExpVO expVO) {
+ // 打印expDAO,如果不为null就说明已经注入了
+ System.out.println(expDAO);
+
+ // 打印接收到的参数,看是否接收成功
+ System.out.println(expVO.getName());
+ System.out.println(JSON.toJSONString(expVO.getNames()));
+
+ // 返回数据
+ return getExpResultData();
+ }
+
+ @Override
+ public String expUploadRequest(ExpVO expVO) {
+ // 打印expDAO,如果不为null就说明已经注入了
+ System.out.println(expDAO);
+
+ // 打印接收到的参数,看是否接收成功
+ MarsFileUpLoad marsFileUpLoad = expVO.getMarsFileUpLoad();
+ if(marsFileUpLoad == null){
+ return "上传失败";
+ }
+ System.out.println(marsFileUpLoad.getFileName());
+ System.out.println(marsFileUpLoad.getInputStream());
+
+ return "上传成功";
+ }
+
+ /**
+ * 这是把返回数据写死了,不然你们还得搭环境,连接数据库
+ * @return
+ */
+ private List getExpResultData(){
+ List list = new ArrayList<>();
+
+ ExpVO exp = new ExpVO();
+ exp.setName("hello world");
+ list.add(exp);
+
+ exp = new ExpVO();
+ exp.setName("The world dies");
+ list.add(exp);
+
+ return list;
+ }
+}
diff --git a/mars-example/src/test/java/com/mars/exp/test/ExpApiServiceTest.java b/mars-example/src/test/java/com/mars/exp/test/ExpApiServiceTest.java
new file mode 100644
index 0000000..5f40bfa
--- /dev/null
+++ b/mars-example/src/test/java/com/mars/exp/test/ExpApiServiceTest.java
@@ -0,0 +1,42 @@
+package com.mars.exp.test;
+
+import com.mars.common.annotation.bean.MarsWrite;
+import com.mars.common.annotation.junit.MarsTest;
+import com.mars.common.base.config.MarsConfig;
+import com.mars.exp.ExpStart;
+import com.mars.exp.api.vo.ExpVO;
+import com.mars.exp.core.service.ExpApiService;
+import com.mars.junit.MarsJunit;
+import org.junit.Test;
+
+import java.util.List;
+
+/**
+ * 单元测试
+ */
+@MarsTest(startClass = ExpStart.class)
+public class ExpApiServiceTest extends MarsJunit {
+
+ @MarsWrite("expApiService")
+ private ExpApiService expApiService;
+
+ /**
+ * 返回配置文件
+ * @return
+ */
+ @Override
+ public MarsConfig getMarsConfig() {
+ return new ExpTestConfig();
+ }
+
+ @Test
+ public void testExpPostRequest(){
+ ExpVO expVO = new ExpVO();
+ expVO.setName("单测");
+ expVO.setNames(new String[]{"单测1","单测2"});
+ List list = expApiService.expPostRequest(expVO);
+
+ // 这只是一个示例,演示一下单测怎么用,所以就偷个懒直接打印了,实际是要对返回值做校验的
+ System.out.println(list);
+ }
+}
diff --git a/mars-example/src/test/java/com/mars/exp/test/ExpTestConfig.java b/mars-example/src/test/java/com/mars/exp/test/ExpTestConfig.java
new file mode 100644
index 0000000..e060582
--- /dev/null
+++ b/mars-example/src/test/java/com/mars/exp/test/ExpTestConfig.java
@@ -0,0 +1,36 @@
+package com.mars.exp.test;
+
+import com.mars.common.base.config.MarsConfig;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * 更多配置项,请到官网查看官方文档
+ */
+public class ExpTestConfig extends MarsConfig {
+
+ /**
+ * 配置数据源
+ * @return
+ */
+ @Override
+ public List jdbcProperties() {
+ List list = new ArrayList<>();
+
+ // 用的是阿里巴巴的 druid数据源,其他属性可自行查阅
+ Properties properties = new Properties();
+ properties.put("name","dataSource");
+ properties.put("url","");
+ properties.put("username","");
+ properties.put("password","");
+ properties.put("driverClassName","com.mysql.jdbc.Driver");
+
+ list.add(properties);
+
+ // 如果要多个数据源,add多个到list即可
+
+ return list;
+ }
+}