包含mybatisplusjson的词条
本篇文章给大家谈谈mybatisplusjson,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、mybatis plus整合mysql json
- 2、mybatis-plus 实体json互相转化; typeHandler的使用
- 3、@JsonView的使用(使用自己的封装结果类)
- 4、updatewrapper批量更新null值问题
- 5、引迈低代码如何
- 6、实体类存什么属性对应数据库的json
mybatis plus整合mysql json
查询1:
select * from t_test where info-'$.address' = 'shanghai';
测试结果如下:
查询2:
select * from t_test where JSON_CONTAINS(info,JSON_OBJECT('major','math','height',1.87));
测试查询结果:
可以看到mybatis plus默认生成的info字段类型是string的,早期版本是 @TableField(el = "info,typeHandler = com.ccm.test.handler.ListTypeHandler") 试了下并族森不起作槐野用,并没有去深究,升级版本后
试了下是可以的,测试的结果是后面重新建了表省去了铅穗喊几个字段
[img]mybatis-plus 实体json互相转化; typeHandler的使用
环境:spring boot项目 mybatis-plus作为缺拦运衡凳持久层
注意事项
注:mybatis 会有所不伏梁同
@JsonView的使用(使用自己的封装结果类)
1.项目使用了springboot + mybatis-plus,在开发时需要指定封装需要的数据,但是由于使用了自定义的结果封装类,输出的结果为空
4.controller层数侍纳据展示
5.重点,由于我将数据封老仿没装了两层,所有每层需要展示的大友数据都要使用注解,这个时候统一抽取出来的BaseEntityView就有用了
6.同时,还有一层封装的数据
参考:
updatewrapper批量更新null值问题
问题背卜首景
使用mybatis-plus进行数据库交互,默认开启null不更新设置,在新增数据后,编辑页面将字段值清除后(date类型,int类型,为避免默认值传入,model全部使用包装类型初始化为null)无法将null值更新至数据库
单个解决方案雹含
通过UpdateWrapper的set方法强制字段为null值
通用解决方法
定义基础类BaseModel,增加属性updateFieldList,model继承此类
public class BaseModel {
@TableField(exist = false)
@JSONField(serialize = false)
private ListString updateFieldList;
public ListString getUpdateFieldList() {
return updateFieldList;
}
public void setUpdateFieldList(ListString updateFieldList) {
this.updateFieldList = updateFieldList;
}
}
自定自定义注解UpdateRequestBody替代RequestBody
@ResponseBody
@PostMapping("/update"型肆数)
public Object update(@UpdateRequestBody AccountDO entity) {
Result result = null;
try {
accountService.update(entity);
result = Result.okResult();
} catch (Exception e) {
result = Result.errorResult();
}
return result;
}
@ResponseBody
@PostMapping("/batchUpdate")
public Object batchUpdate(@UpdateRequestBody ListAccountDO entityList) {
Result result = null;
try {
accountService.batchUpdate(entityList);
result = Result.okResult();
} catch (Exception e) {
result = Result.errorResult();
}
return result;
}
自定义HandlerMethodArgumentResolver对前台json至后台Model转换的拦截,需要对List类型的Model集合进行支持,获取前台提交json对应定义Model中有同名属性的,进行加入打待更新字段列表updateFieldList
public class BaseModelMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter methodParameter) {
if (methodParameter.hasParameterAnnotation(UpdateRequestBody.class)) {
//集合
if(List.class.isAssignableFrom(methodParameter.getParameterType())){
ParameterizedType parameterizedType = (ParameterizedType) methodParameter.getGenericParameterType();
Class clazz = (Class)parameterizedType.getActualTypeArguments()[0];
//取出List中的真实对象类型
if(BaseModel.class.isAssignableFrom(clazz)){
return true;
}else{
return false;
}
}else{
//单个对象
if(BaseModel.class.isAssignableFrom(methodParameter.getParameterType())){
return true;
}else{
return false;
}
}
}
return false;
}
@Override
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {
String body = "";
try {
HttpServletRequest request = nativeWebRequest.getNativeRequest(HttpServletRequest.class);
body = CommonUtil.getBodyString(request);
} catch (Exception e) {
e.printStackTrace();
}
if(List.class.isAssignableFrom(methodParameter.getParameterType())){
List resultList = new ArrayList();
ParameterizedType parameterizedType = (ParameterizedType) methodParameter.getGenericParameterType();
Class clazz = (Class)parameterizedType.getActualTypeArguments()[0];
ListField fs = Arrays.asList(clazz.getDeclaredFields());
JSONArray array = JSONArray.parseArray(body);
for (Object temp:array) {
JSONObject obj = JSONObject.parseObject(temp.toString());
ListString updateFieldList = new ArrayList();
for (String key : obj.keySet()) {
for (Field filed : fs) {
if (key.toLowerCase().equals(filed.getName().toLowerCase())) {
updateFieldList.add(key.toLowerCase());
continue;
}
}
}
obj.put("updateFieldList",updateFieldList);
resultList.add(obj);
}
return JSONArray.parseArray(resultList.toString(),clazz);
}else{
Class clazz = methodParameter.getParameterType();
ListString updateFieldList = new ArrayList();
ListField fs = Arrays.asList(clazz.getDeclaredFields());
JSONObject obj = JSON.parseObject(body);
for (String key : obj.keySet()) {
for (Field filed : fs) {
if (key.toLowerCase().equals(filed.getName().toLowerCase())) {
updateFieldList.add(key.toLowerCase());
continue;
}
}
}
obj.put("updateFieldList",updateFieldList);
return JSON.parseObject(obj.toString(),clazz);
}
}
}
将自定义BaseModelMethodArgumentResolver 加入到配置中去
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(ListHandlerMethodArgumentResolver resolvers) {
resolvers.add(new BaseModelMethodArgumentResolver
引迈低代码如何
引迈低代码如何?怎么样?好不好用?
下面说说个人祥答所了解的。
引迈低代码,又称为JNPF,其前身是一家快速开发平台,后面逐渐转型成为低代码产品。由福建引迈信息技术有限公司研发而成,该公司成立于2019年,法定代表人佘赐雄,注册资本1000万,人员规模50人。是一款基于代码生成器的低代码开发平台,有着规范的开发流程和灵活的业务逻辑。采用的技术有2种,一种是NETCore,一种是JAVA开发,拥有可视化开发环境,拖拽式快速设计表单,PC、Pad、手机端适配,权限配置、SaaS服务,接口对接,工作流引擎,多端使用Web、Android、IOS、微信小程序,并且有以构建业务流程、逻辑和数据模型等所需的功能。为企业项目节省部分重复工作,让开发者将重心放在业务逻辑,不必烦恼底层架构设计。
引迈低代码功能:
1、零代码开发:无需代码,拖拽式操作,自册卜动生成可视化应用,灵活构建业务管理系统,加快业务部署。
2、低代码开发:基于代码生成器,代码自动生成后可以下载本地,进行二次开发,有效提高整体开发效率。
3、报表可视化:操作界面可视化,通过简易配置即可自动生成各种类型的报表,为企业节省大量的重复开发工作。
4、大屏可视化:丰富的交互控件和图表组件,提供智能图形推荐,报表图形任意切换,且不受维度、度量的限制。
5、工作流引擎:实现了界面化流程的建模,使得流程设计变得简单和可操作,用户通过拖、拉、点、拽即可快速实现流程设计。
6、移动端APP:移动端数据打通,可一键发布到APP、小程序、H5等移动平台上,实现互联互通、高效办公。
引迈低代码特点:
1、技术双引擎:采用.NET/JAVA技术
2、全源码交付:可二次开发的全源码交付
3、降低项目成本:90%基础代码无需编写
4、获得商业授权:保护客户的合法权益
5、提高开发效率:基础功能无需开发
引迈低代码技术栈:
主框架:Spring Boot + Spring Framework、持久层框架:Mybatis-plus、Hibernate Validation、Alibaba Druid、JSON序列化: Jackson、
数据缓存:Redis、项目构建:Maven、安全框架:Spring Security Oauth2+JWT、模板引擎:Velocity、即时通讯:spring-boot-starter-websocket、AOP: spring-boot-starter-aop等。
桌面操作系统:
Windows 7+、MacOS、Ubuntu Desktop(桌面版)、Deepin(深度操作系统)、统信UOS桌面(专业)版、中标麒麟桌面版、中科方德桌面版等。
国内还谨姿慧有哪些好用的低代码开发平台?
最近随着低代码的爆火,国内已经出现了很多低代码开发平台,而与JNPF低代码产品类似的低代码平台,国内也有很多,比如:钉钉宜搭、华为应用魔方、爱速搭、ClickPaaS、织信Informat等。
从数据安全角度考虑,还是私有化部署的低代码平台更靠谱,比如织信Informat企业级低代码平台,可以满足用户更多定制化需求,同时数据更安全。私有化部署可以为企业带来很多增益:
1、定制开发
私有化部署可以根据客户自己的需求和情况,定制使用功能。不同行业、不同类型的企业用户对软件需求是不一样的,通用软件并不能满足不同类型的管理需求。而对于一个企业来说,所处的发展阶段不一样,就存在了不一样的管理需求。很多企业对软件有于个性化定制的需求,需要开发专属功能,私有化部署平台可以更好地满足这类需求。
2、数据安全
一些对数据敏感的行业,比如政企单位、金融、军工等行业,无论是外包数据存储还是使用流行的云计算SaaS应用程序,都将使企业数据的安全性和隐密性难以保证,给企业带来无法预料的风险,私有化部署平台更安全。
3、对接已有系统
企业系统随着使用时间越长、复杂性越高,调整优化能力越来越差,但企业又不想重新整体开发以致于形成僵局,对此,可私有化部署的低代码开发平台可以利用开放的接口将新系统集成到企业已有系统中,以最小的调整成本实现对原有系统改造升级。同时,私有化部署的平台拓展性强,可在原有功能上二次开发进行自主升级,让产品更好的服务于企业,延长软件使用寿命。
实体类存什么属性对应数据库的json
实体类存List属性对应数据库的json。根据查询相关信息显示,实体类中有个属兆败并性是其他对象,或者是List,在数据库中存储时使用枯祥的族迹是mysql的json格式,此时可以用mybatisplus的一个注解TableField(typeHandler=JacksonTypeHandler.class。
关于mybatisplusjson和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。