这是一个spring-boot的starter依赖,目前包含了一个解析GET请求的参数成结构化对象的,在请求时解析后放入threadlocal中,响应结束后清空threadlocal的。
另外还包含了一个通用型CRUD的脚手架,用于但表的restful的增删改查。CRUD是基于数据库持久层框架的,目前提供了Jpa和Mybatis-plus两种。
目前maven私库(nexus)放在192.168.50.34上 通过https://192.168.50.34:8081 访问
<distributionManagement>
<repository>
<id>liangjian-192.168.50.34</id>
<url>http://192.168.50.34:8081/repository/liangjian-host/</url>
</repository>
</distributionManagement>
<dependencies>
<dependency>
<groupId>com.liangjian</groupId>
<artifactId>web-common-starter</artifactId>
<version>0.0.2-SNAPSHOT</version>
</dependency>
</dependencies>
请求方式 | url及path参数 | 说明 |
---|---|---|
GET | /crud/api/{model}/{id} |
根据id获取单个数据库对象 |
GET | /crud/api/{model}/page |
根据查询条件分页查询(关于查询条件后面介绍) |
GET | /crud/api/{model}/list |
根据查询条件获取列表(关于查询条件后面介绍) |
POST | /crud/api/{model} |
新增对象,提交json |
PUT | /crud/api/{model} |
更新对象,提交json |
DELETE | /crud/api/{model}/{id} |
根据id删除对象 |
类目 | query key | 示例 |
---|---|---|
字段条件 | 直接字段名(默认等于 逻辑) |
?name=jacky&age=20 |
比较逻辑 | 直接字段名 + Operate (种类后面介绍) | ?age=20&ageOperate=LessEqual |
分页 | page 、size |
?page=1&size=10 |
排序方式 | sortDirection |
?sortField=id&sortDirection=DESC |
排序字段 | sortField |
?sortField=id&sortDirection=DESC |
操作类型 | 说明 |
---|---|
Equal | 等于(默认) |
NotEqual | 不等于 |
Less | (数字类型)小于 |
LessEqual | (数字类型)不大于 |
Greater | (数字类型)大于 |
GreaterEqual | (数字类型)不小于 |
Contains | (字符串)包含 |
StartWith | (字符串)以开头 |
EndWith | (字符串)以结尾 |
在包com.liangjian.web.common.threadlocal.DynamicParamGetter
中可以通过threadlocal获取到到DynamiParams
DynamicParams params = DynamicParamGetter.DynamicParams.get()
@Entity
@Table(name = "my_entity")
public class MyEntity {
@Id
@GeneratedValue(generator = "metaRelGenerator")
@GenericGenerator(name = "metaRelGenerator",strategy = "uuid")
private String id;
@Column(name = "crt_date")
private Date crtDate;
@Column(name = "last_update")
private Date lastUpdate;
private Integer version;
private String name;
private Integer balance;
//...省略其他getter、setter
}
public interface MyEntityRepository extends
JpaRepository<MyEntity, Serializable>,
JpaSpecificationExecutor<MyEntity> {
}
DynamicApiService
):public interface IMyEntityService extends
DynamicApiService<MyEntity> {
}
JpaDynamicApiService
):@Service
public class MyEntityService
extends JpaDynamicApiService<MyEntity>
implements IMyEntityService {
@Autowired
private MyEntityRepository myEntityRepository;
@Override
public JpaRepository<MyEntity, Serializable> getJpaRepository() {
return myEntityRepository;
}
@Override
public Class<MyEntity> getModelClass() {
return MyEntity.class;
}
@Override
public JpaSpecificationExecutor<MyEntity> getJpaSpecificationExecutor() {
return myEntityRepository;
}
@Override
public String getMappedName() {
return "myEntity";
}
}
完成上述编码即可以实现自动动态crud。
mybatis-plus大致上与jpa的相同。
Mapper
规则)public interface IMyEntityService2 extends
IService<MyEntity>,
DynamicApiService<MyEntity> {
}
@Service
public class MyEntityService2
extends MpDynamicApiService<MyEntityMapper, MyEntity>
implements IMyEntityService2 {
@Override
public Class<MyEntity> getModelClass() {
return MyEntity.class;
}
@Override
public String getMappedName() {
return "myEntity";
}
}
com.liangjian.web.common.entity
中,可以直接通过Tuple.of(...)
来使用EntityHelper
的接口和EntityHelperBuilder
的单例,作用是通过class
对象获取其字段类型(Java类型), 后期应该会添加上「动态获取对象的值」或是「动态生成Map」。可以通过实现EntityHelper
接口来实现,目前EntityHelperBuild
是通过反射来实现的。(维护一个LRU缓存,反射一次后放入缓存)com.liangjian.web.common.util
中