# dolphin **Repository Path**: gitxiaofei/dolphin ## Basic Information - **Project Name**: dolphin - **Description**: 海豚框架【dolphin】 --- 持续优化中 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-10-24 - **Last Updated**: 2022-10-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: 框架 ## README # 海豚框架 dolphin 作者by:961463643@qq.com ## 目录 [toc] --- ## 使用 ### 开放API - 说明 > 使用`WebMvcConfigurer`做访问授权可使用`@OpenApi`注解 controller 具体方法 即表示该接口为开放API - 示例 ```java @OpenApi @RequestMapping(value = "signIn", method = RequestMethod.POST) ResponseMessage signIn(@RequestBody User user) { return userSvc.signIn(user); } ``` ### Spring Boot 异步 - 说明 > 使用`@Async`注解时需要开启Spring Boot异步 - 示例 1.Spring Boot 配置文件 ```yaml async: corePoolSize: 5 #线程池维护线程的最少数量 keepAliveSeconds: 200 #允许的空闲时间 maxPoolSize: 10 #线程池维护线程的最大数量 queueCapacity: 20 #缓存队列 ``` 2.Spring Boot的主程序中配置`@EnableAsync` ```java @SpringBootApplication @EnableAsync public class Application { public static void main(String[] args){ SpringApplication.run(Application.class,args); } } ``` 3.在方法或类上注解`@Async` ```java @Async public void asyncTest() { ... } ``` - tips:Spring Boot 配置文件(示例1)为可选项 若不配置则使用默认值 即示例1的值 ### 阿里巴巴Druid连接池 - 说明 > 该项默认开启 - 示例 1.Spring Boot 配置文件 (具体每项含义可以百度阿里巴巴Druid连接池配置) ```yaml spring: ### jdbc datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/dbName?autoReconnect=true&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true username: root password: 123456 # 初始化大小,最小,最大 initialSize: 3 minIdle: 3 maxActive: 5 maxWait: 9000 timeBetweenEvictionRunsMillis: 90000 minEvictableIdleTimeMillis: 1800000 testWhileIdle: true testOnBorrow: false testOnReturn: false poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 filters: wall,stat,slf4j connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 useGlobalDataSourceStat: true ``` ### Redis - 说明 > 如果需要使用Redis 则在Spring Boot配置文件配置redis 连接信息 > 使用`Redisson`连接 - 示例 1.Spring Boot 配置文件 ```yaml redis: database: 0 host: localhost port: 6379 password: 123456 ``` 2.注入`RedisService` ```java @Autowired private RedissonClient redissonClient; ``` tips: 更多用法访问官方文档 > https://github.com/redisson/redisson/wiki ### 通用方法(CRUD) - 配置 > https://github.com/abel533/Mapper/wiki ```yaml mapper: style: camelhump identity: MYSQL ``` - 说明 > 继承`BaseService`后 将获得通用的crud 及一些常用方法 - 示例 1.Entity继承`BaseEntity` ```java @Data public class User extends BaseEntity {} ``` 2.EntityMapper接口继承`Mapper`并注入泛型 ```java public interface UserMapper extends Mapper {} ``` 3.Service继承`BaseService`并注入泛型 ```java @Service public class UserService extends BaseService {} ``` #### 方法描述 - `Mapper mapper()` 自动装入对象包装,如果需要使用特殊的对象包装即在之类重新该方法 - `ResponseMessage createEntity(T entity)` 保存一个实体,null的属性也会保存,不会使用数据库默认值 - `ResponseMessage createEntitySelective(T entity)` 保存一个实体,null的属性不会保存,会使用数据库默认值 - `ResponseMessage validateCreate(T entity)` 创建校验,异常将不创建 默认成功 - `void fillEntity(T entity)` - `ResponseMessage beforeCreate(T entity)` 创建之前,异常将不创建 默认成功 - `ResponseMessage afterCreate(T entity)` 创建之后 默认成功 - `ResponseMessage deleteEntity(T entity)` 根据实体属性作为条件进行删除,查询条件为全匹配 - `ResponseMessage deleteEntityByCondition(Object condition)` 根据Condition条件删除数据 该方法没有前后置处理 - `ResponseMessage deleteEntityByPrimary(Object key)` 根据主键字段进行删除,方法参数必须包含完整的主键属性 - `ResponseMessage validateDelete(T entity)` 删除校验异常将不删除 默认成功 - `ResponseMessage beforeDelete(T entity)` 删除之前,异常不删除 默认成功 - `ResponseMessage afterDelete(T entity)` 删除之后,异常不删除 默认成功 - `ResponseMessage updateEntity(T entity)` 根据主键更新属性不为null的值 - `ResponseMessage updateEntityByPrimary(T entity)` 根据主键更新实体全部字段,null值会被更新 - `ResponseMessage validateUpdate(T entity)` 更新校验,异常将不更新 默认成功 - `void fillUpdateEntity(T entity)` - `ResponseMessage beforeUpdate(T entity)` 更新之前,异常将不更新 默认成功 - `ResponseMessage afterUpdate(T entity)` 更新之后 默认成功 ### 分页查询 - 配置 > https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md ```yaml pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql ``` ### 邮件 - 说明 > 配置Spring Boot Email 注入`EmailService`即可使用 22端口不可用时,可以使用SSL方式发送邮件 - 示例 1.Spring Boot配置 ```yaml mail: host: port: 465 username: password: default-encoding: UTF-8 properties: mail.smtp: auth: true ssl.enable: true socketFactory.class: javax.net.ssl.SSLSocketFactory ``` 2.注入`EmailService`使用 ```java @Autowired private EmailService emailSvc; ``` #### 方法描述 - `void sendSimpleMail(Email email)` 发送简单的邮件 - `void sendHtmlMail(Email email)` 发送HTML格式邮件 - `void sendAttachmentsMail(Email email)` 发送带附件的邮件 - tips: 以上发送邮件方法均为异步 但前提是开启Spring Boot异步 否则将变为同步发送 ### Excel导入 - 说明 > 提供Excel导入数据解析的方法 - 示例 ```java @Autowired private ExcelService excelSvc; ``` #### 方法描述 - `List> readExcel(InputStream in, List fields)` real excel ### 接口消息对象 - 消息对象`ResponseMessage` - 属性 ```java @Getter boolean hasError //是否异常 @Getter String msg //消息 @Setter @Getter T data //数据 @Getter Integer code //异常编码 默认1异常 0正常 ``` - 示例 ```java public ResponseMessage xxx(String xxx){ //重载方法具体自行查看 return ResponseMessageFactory.success(); //return ResponseMessageFactory.error(); } ``` ### 接口授权 - 说明 > 没写完 --- ## 版本 ### 引入方式 ```xml org.star dolphin xxx ``` ### 1.1.0-RELEASE > 默认web容器更改为`jetty` > 更改`Redisson`编码集为默认编码已解决redis乱码问题 ### 1.0.0-RELEASE > 由`develop`分支延伸 --- ## 依赖第三方框架 ### Spring Boot Starter - spring-boot-starter-parent - spring-boot-starter-web - spring-boot-starter-test - spring-boot-starter-mail ### Redisson - redisson-spring-boot-starter ### TkMybatis - mapper-spring-boot-starter - pagehelper-spring-boot-starter ### DB - druid - mysql-connector-java ### POI - poi-ooxml - poi ### JWT - nimbus-jose-jwt - json-smart ### 其他 - lombok - commons-lang3 - slf4j-log4j12 - guava - fastjson - commons-codec - commons-beanutils - httpclient - jsoup --- ## spring boot瘦身 ### 排除依赖 ```xml org.springframework.boot spring-boot-maven-plugin ZIP org.springframework.boot, org.springframework, org.springframework.data, tk.mybatis, com.github.pagehelper, org.redisson, com.alibaba, mysql, org.projectlombok, org.slf4j, org.apache.commons, com.google.guava, com.nimbusds, net.minidev, commons-codec, commons-beanutils, org.jsoup, org.apache.poi, org.apache.poi, org.codehaus.mojo, net.bytebuddy, javax.cache, commons-logging, com.github.virtuald, com.google.errorprone, org.hdrhistogram, com.zaxxer, com.google.j2objc, com.fasterxml.jackson.core, com.sun.activation, jakarta.annotation, org.glassfish, com.sun.mail, org.jboss.marshalling, com.github.stephenc.jcip, org.eclipse.jetty, org.jodd, com.github.jsqlparser, org.latencyutils, org.apache.logging.log4j, ch.qos.logback, io.micrometer, org.mybatis, org.mybatis.spring.boot, io.netty, javax.persistence, org.reactivestreams, io.reactivex.rxjava2, org.yaml, org.apache.xmlbeans, com.fasterxml.jackson.dataformat, org.ow2.asm, com.fasterxml.jackson.datatype, com.fasterxml.jackson.module, jakarta.websocket, log4j, jakarta.servlet, org.eclipse.jetty.websocket, io.projectreactor, com.google.code.findbugs, commons-collections, ``` ### 启动 `java -Dloader.path=/lib -jar xxx.jar`