# magic **Repository Path**: macrofei/magic ## Basic Information - **Project Name**: magic - **Description**: 基于spring-context,简化第三方类库引入主要包含:数据库操作、数据验证、数据转化、分布式等功能 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2020-05-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # magic #### 项目介绍 基于spring-context,简化第三方类库的引用主要包含:基础开发框架、数据持久化、数据验证、数据转写等功能 1. start.framework(基础开发框架) 2. start.magic.core.valid(数据验证) 3. start.magic.core.converter(数据转写) 4. start.magic.persistence(持久化框架包含jdbc、mongodb) 5. start.magic.spring(spring扩展) 6. start.magic.thirparty(codec、json、zip)(第三方扩展) #### 数据验证 1. @NotNull:不能为null 2. @NotEmpty:不能为'' 3. @Length:字符的长度 4. @Format:格式判断 5. @Equals:传入的数据是否等于其中的字符 6. @Enum:枚举类型 7. @Regex:正则表达式 9. @TimeFormat:时间日期格式 10. @Custom:自定义验证实现ValidCheckCustom接口 - 如果验证失败则抛ValidException异常,异常信息为设置的message值,验证调用入口:ValidContext.verifyField()方法 #### 数据转写 1. 重新定义的转写器继承自`AbstractConverterEditor`T为转写后输出的类型 2. 方法restore读取外部传入数据转写成最终字段的数据类型,通过setValue保存 3. 方法converter返回字段的数据getValue获取,转写输出想要的T类型数据,这个数据可供下次restore还原读取 4. 字段数据类型一般都配有默认的转写器如需重新定义可在字段上注解@PropertyConverter重写类型转写器 5. 转写器主要用于持久化层操作,Rest框架对象字符转写操作 #### 持久化实体类 1. 实体类可直接继承com.framework.entity.Base类 2. @Entity:注解的类为实体类需同时定义@Table,由Bean:PersistenceEntityRegistryPostProcessor读取 3. @Table:定义当前实体类对应的表名需同时定义@Entity 4. @MappedSuperclass:实体类基类注解,一般注解于Base类 5. @Id:定义主键字段 6. @Column:定义字段对应的数据表字段名 7. @Transient:处理操作时忽略当前字段 8. 配置持久化实体类读取器,读取注解@Entity的实体,配置如下 ``` ``` #### 框架属性文件定义,配置如下 ``` classpath*:config/properties/busines.properties classpath*:config/properties/config_base.properties file:/applications/app_data/config_debug.properties ``` #### JDBC 1. pom.xml ``` org.springframework spring-jdbc ${spring-framework.version} ``` 2. jdbc配置 ``` ``` 3. sql.xml映射配置标签说明 - sql标签(包含了需要执行的sql语句)id为读取的sqlId - if标签(用于判断某变量是否满足条件) - for标签(用于判断遍历对应List对象) - include标签(引入其它sql标签中的sql脚本) 4. @InsertRepeat:对应字段在调用entityJDBCManager.persist方法插入语句时可按照Insert Into %s(%s) Select %s From dual Where Not Exists (Select %s From %s Where %s)方式防重插入 5. QueryWrapper、UpdateWrapper、DeleteWrapper可自动生成对应SQL语句,Service、Dao可继承com.framework包下的接口实现 6. 自动生成数据表语句 - @TableDef定义于对应实体类上,可定义对应表相关信息:表类型、字符集、注释 - @ColumnDef定义于对应实体类字段上,可定义对应字段相关信息:索引、长度、注释 - @ScriptConverter可自定义当前字段对应的数据表字段类型长度相关信息 - 调用ScriptDelegate.buildTableScript可打印当前实体类对应的表DDL语句 - 调用ScriptDelegate.tableAnalysis可打印出当前实体类与数据表可修改的参考语句 - 属性配置文件中定义:start.framework.print.sqltablescript:true,可直接实现上述ScriptDelegate.tableAnalysis功能 #### MongoDB (未完善) 1. pom.xml ``` org.mongodb mongo-java-driver 3.8.2 ``` #### 代码模板生成 1. 直接调用如下代码 ``` public static void main(String[] args) { BuildCodeTemplates buildCodeTemplates = new BuildCodeTemplates("com/company(包名)", "system(模块)", "user(类名)"); buildCodeTemplates.buildCodeFile(); } ``` #### 启动Web服务(可在调试环境下使用无须安装Tomcat服务器) 1. pom.xml ``` org.apache.tomcat.embed tomcat-embed-jasper 8.5.5 provided ``` 2. 调用代码 ``` public class StartApplicationApi { public static void main(String[] args) throws Exception { EmbeddedTomcat.run(StartApplicationApi.class,args,new TomcatConfiguration() { @Override public String docBase() { //IDEA环境下需要重写路径外加工程名'Api/src/main/webapp/' return "src/main/webapp/"; } }); } } ```