最近我开始听说"POJO"(Plain Old Java Objects).我用Google搜索,但仍然不理解这个概念.任何人都可以给我一个明确的POJO描述吗?
考虑具有变量"id,name,address,salary"的类"Person" - 我将如何为此场景创建POJO?代码是否低于POJO?
public class Person {
//variables
People people = new People();
private int id;
private String name;
private String address;
private int salary;
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public int getSalary() {
return salary;
}
public void setId() {
this.id = id;
}
public void setName() {
this.name = name;
}
public void setAddress() {
this.address = address; …Run Code Online (Sandbox Code Playgroud) 我和杰克逊有一个问题,我觉得应该很容易解决,但这让我很伤心.
假设我有一个看起来像这样的java POJO类(假设Getters和Setters对我来说):
class User {
private String name;
private Integer age;
}
Run Code Online (Sandbox Code Playgroud)
我想将看起来像这样的JSON反序列化为User对象:
{
"user":
{
"name":"Sam Smith",
"age":1
}
}
Run Code Online (Sandbox Code Playgroud)
杰克逊给了我一些问题,因为用户不是JSON中的第一级对象.我显然可以创建一个具有单个User对象的UserWrapper类,然后使用它进行反序列化,但我知道必须有一个更优雅的解决方案.
我该怎么做?
在我工作的公司中,我们有一个关于是否应该更好地使用基元的包装类(java.lang.Integer,java.lang.Long)或是否直接在映射的POJO中使用基元类型的讨论Hibernate中表的实体.
我们的想法是,我们希望这些值在数据库中不为空.
支持使用原语的论据:
支持使用包装器对象的参数:
我有一些Customer存储在ArrayList中的对象.我的Customer班级有2个数据成员:Name和Email.现在我想修改Emailfor Customer"Doe".
现在,如果"Doe"位于列表中的索引3,我知道我可以写下这一行:
myList.set( 3, new Customer( "Doe", "j.doe@supermail.com" ) );
Run Code Online (Sandbox Code Playgroud)
但这意味着要创建一个新对象.如果我有一个非常大的列表,我想这个过程会很慢.有没有其他方法直接访问存储在ArrayList中的Object的数据成员,可能使用另一种Collection而不是ArrayList?
我试图使用带@ConstructorResult的@SqlResultSetMapping将Native查询的结果映射到POJO.这是我的代码:
@SqlResultSetMapping(name="foo",
classes = {
@ConstructorResult(
targetClass = Bar.class,
columns = {
@ColumnResult(name = "barId", type = Long.class),
@ColumnResult(name = "barName", type = String.class),
@ColumnResult(name = "barTotal", type = Long.class)
})
})
public class Bar {
private Long barId;
private String barName;
private Long barTotal;
...
Run Code Online (Sandbox Code Playgroud)
然后在我的DAO中:
Query query = em.createNativeQueryBar(QUERY, "foo");
... set some parameters ...
List<Bar> list = (List<Bar>) query.getResultList();
Run Code Online (Sandbox Code Playgroud)
我已经读过这个功能仅在JPA 2.1中受支持,但这正是我正在使用的.这是我的依赖:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我发现了一些资源,包括这一个:jpa 2.1中的@ConstructorResult映射.但我仍然没有运气.
我错过了什么?为什么不能找到SqlResultSetMapping?
javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown SqlResultSetMapping [foo]
Run Code Online (Sandbox Code Playgroud) 我通常倾向于使用POJO定义我的应用程序的模型层,例如文章,评论等.
我准备在我的一个ListViews的适配器中实现AlphabetIndexer.现在这个适配器接受一个文章集合,我通常从我的包装器中获取SQLiteDatabase.
AlphabetIndexer构造函数的签名如下:
public AlphabetIndexer (Cursor cursor, int sortedColumnIndex, CharSequence alphabet)
Run Code Online (Sandbox Code Playgroud)
由于这不接受Collection或类似的东西,只是一个Cursor,它让我想知道:也许我不应该为我的模型创建对象,只是使用从数据库返回的Cursors?
所以问题是,我猜:我应该怎么做,用POJO的集合表示数据,或者只是在我的应用程序中使用游标?
有什么输入?
我正在使用snakeYaml将某些配置/属性值解析为Configuration对象.
我的yaml文件看起来像这样 -
#Thread
batchLimit: 1000
threadCountLimit: 2
#Some More Config
key: value
#MAP
keyMapping: <What goes here?>
Run Code Online (Sandbox Code Playgroud)
我的Configuration类看起来像这样 -
public class Configuration{
int batchlimit;
int threadCountLimit;
...
Map<String,String> keyMapping;
}
Run Code Online (Sandbox Code Playgroud)
如何keyMapping在YAML文件中定义它以便直接通过SnakeYAML读取?
我想为Kotlin创建POJO类,因为我们知道www.jsonschema2pojo.org将JSON转换为POJO,因此我们可以将它与gson一起使用.
任何人都知道如何快速为Kotlin创建Gson POJO ?
编辑:
我知道它使用数据类,但有没有最简单的方法来创建它?
我正在寻找一种方法将一些POJO直接转换为Jackson TreeModel.我知道存在从POJO到JSON-String的转换,并且支持TreeModel到JSON-String - hovewer我正在寻找POJO到TreeModel的转换.有办法吗?
用例如下:
理想情况下,这涉及两个序列化步骤.但是,在我的解决方法中,我目前正在使用三个 - 您可以在此处看到:
map = // a map of pojos with jackson annotations
//pojo >> JSON
StringWriter w = new StringWriter();
objectmapper.writeValue(new JsonFactory().createJsonGenerator(w), map);
String json = w.toString();
w.close();
//JSON >> Treemodel
JsonNode tree = GenericJcrDTO.mapper.readTree(json);
//filter tree here
//treemodel >>JSON
StringWriter w = new StringWriter();
GenericJcrDTO.mapper.writeValue(new JsonFactory().createJsonGenerator(w), tree);
json = w.toString();
w.close();
Run Code Online (Sandbox Code Playgroud)
任何人?