首页 > 编程知识 正文

springboot返回json(jpa springboot)

时间:2023-05-03 19:18:38 阅读:91356 作者:1247

作者: yizhiwazi链接: https://www.Jian Shu.com/p/4931 FBC 52E a1

序言:如果直接调用本机Save方法,则null属性会复盖数据库,很难使用。 提供解决这个问题的方便方法。

核心思路

如果要保存当前的用户对象,请首先根据主键查询该用户的最新对象,然后将该用户对象的非空属性复盖为最新对象。

核心代码

直接更改通用JpaRepository的实现类,将该实现类标记为启动类即可。

一、通用CRUD实现类

publicclasssimplejparepositoryimplextendssimplejparepository {

私有JPaentityinformationentityinformation;

私有最终实体管理器em;

@自动无线

publicsimplejparepositoryimpl (jpaentityinformationentityinformation,实体管理器实体管理器) {

实体信息,实体管理器;

this .实体信息=实体信息;

this.em=实体管理器;

}

//*

* * *通用保存方法:更新添加/选项

*/

@Override

@Transactional

公共保存(敏感) {

获取//id

身份id=(id )实体信息. getid )实体;

可选t;

if (字符串实用程序. isempty (实体id ) )

字符串uuid=uuid.random uuid () .字符串);

防止uid重复

if (查找字符() id () uuid ).is预置) ) )

uuid=UUID.randomUUID ().toString );

}

//id为空时,设定为UUID

newbeanwrapperimpl (实体) .设置属性值)实体信息. getid属性).getName ),uuid );

//标记为新数据

可选t=可选.空(;

} else {

//id不为空时查询最新数据

可选t=查找实体(实体id;

}

//获取空属性并使其为空

string [ ]空属性=getnullproperties (实体;

//id的查询结果为空时

if (! 可选的t.is present (

永久(实体; //添加

返回实体;

} else {

//1 .获取最新对象

t target=可选的t.get (;

//2 .将非空属性复盖到最新对象

beanutils .复制属性(实体、目标、空属性);

//3 .更新非空属性

合并(目标);

返回实体;

}

}

//*

* *获取对象的空属性

*/

privatestaticstring [ ] getnullproperties {

//1 .获取bean

beanwrappersrcbean=newbeanwrapperimpl;

//2 .获取bean属性的说明

属性描述符[ ] PDS=src bean.getproperty描述符(;

//3 .获取bean的空属性

set properties=新hashset (;

for (属性描述符属性描述符: PDS0)

字符串属性名称=属性描述符. getname (;

对象属性值=src bean.getproperty值(属性名称;

if (字符串实用程序. isempty (属性值) )

src bean.set属性值(属性名称,空);

属性名称;

}

}

返回属性.到阵列(新字符串[0];

}

}

二、启动系统

@ enablejparepositories (value=' com.hehe.repository ',存储库类=简单的存储库类) )

@SpringBootApplication

公共类JPA应用程序{

publicstaticvoidmain (字符串[ ]数组) {

spring应用程序. run (JPA应用程序.类,args;

}

}

三、实体类和通用Save

@Entity

@ table (名称=' t _ user ' ) ) )。

@ jsonignoreproperties ((处理程序,) hibernateLazyInitializer'} ) )

公共类用户

@Id

专用字符串用户id;

私有字符串用户名;

私有字符串密码;

省略GET/SET

}

公共安全委员会资源仓库扩展数据库{

}

四、概要文件application.yml

spring:

数据源:

URL : JDBC : MySQL ://Localhost :3306/Socks? use SSL=假

用户名:超级用户

密码:路由

驱动器类-名称: com.MySQL.JDBC .驱动器

五、数据库脚本

drop表if exists t _用户;

创建表t _用户(

user _ id虚拟符号(50 )、

用户名虚拟人物(50岁)、

密码虚拟容器(50 ) )。

);

插入入-用户值(1、管理员、管理员);

插入用户值('2',' yizhiwazi ',' 123456 );

六、测试代码

@ rest控制器

公共类用户控制器

@自动无线

私有用户存储库存储库;

@ request映射((/) ) ) )。

公共用户获取()

用户资料档案库. save (新用户('1',',空);

returnuserrepository.find byid ('1' ).get );

}

}

整体结构图

在实际项目中,可以直接复制和使用SimpleJpaRepositoryImpl,而不会影响原始的其他API。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。