`

JPA: 如何从一个表里面拿想要的字段

    博客分类:
  • JPA
 
阅读更多
   使用JPA的时候,在使用它和手机端进行交互的时候常常遇到只要某几个字段,但是会全部拿到的情况, 如:

拿到某个用户的全部信息, 如果这个用户还有其他的相关内容都会被抓出来发给手机端
   
String jpql = "select admin from Admin admin where lower(admin.username) = lower(:username)";



考虑到和手机端的交互用JSON当然内容越少越好,提供二种解决办法:

1. 使用Tuple, 并将结果放入自己定义的AdminWrapper
public List<AdminWrapper> getAdminListByTuple() {
//1:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
//2: One of the JPA ways for getting only particular columns is to ask for a Tuple object.
CriteriaQuery<Tuple> criteriaQuery = criteriaBuilder.createTupleQuery();
//3:
Root<Admin> root = criteriaQuery.from(Admin.class);
//4:
criteriaQuery.multiselect( root.get("id"), root.get("username"), root.get("name") );

//5:条件
Predicate restrictions = criteriaBuilder.conjunction();
restrictions = criteriaBuilder.and(restrictions, criteriaBuilder.equal(root.get("id"), 1));
criteriaQuery.where(restrictions);	
criteriaQuery.orderBy(criteriaBuilder.desc(root.get("id")));

//5:
TypedQuery<Tuple> query = entityManager.createQuery(criteriaQuery).setFlushMode(FlushModeType.COMMIT);

//6
List<Tuple> tuples = query.getResultList();

AdminWrapper adminWrapper = null;
List<AdminWrapper> lists = new ArrayList<AdminWrapper>();
for (Tuple t : tuples) {
	adminWrapper = new AdminWrapper();
	adminWrapper.setId((Long)t.get(0));
	adminWrapper.setUsername((String)t.get(1));
	adminWrapper.setName((String)t.get(2));
	lists.add(adminWrapper);
}
return lists;
}


2. 直接使用AdminWrapper,前提是有构造方法
	public AdminWrapper() {
		
	}
	
	public AdminWrapper (Long id, String username, String name) {
		this.id = id;
		this.username = username;
		this.name = name;
	}

   然后
public List<AdminWrapper> getAdminListByT() {
//1:
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
//2: One of the JPA ways for getting only particular columns is to ask for a Tuple object.
CriteriaQuery<AdminWrapper> criteriaQuery = criteriaBuilder.createQuery(AdminWrapper.class);
//3
Root<Admin> root = criteriaQuery.from(Admin.class);
//4
criteriaQuery.multiselect( root.get("id"), root.get("username"), root.get("name") );

//5
TypedQuery<AdminWrapper> query = entityManager.createQuery(criteriaQuery).setFlushMode(FlushModeType.COMMIT);

List<AdminWrapper> lists = query.getResultList();

return lists;
}
分享到:
评论

相关推荐

    Dynamic-web-projet-with-JPA:使用ElipseLink进行数据持久化的动态Web项目

    这里提到的"Dynamic-web-projet-with-JPA"是一个基于Java的项目,它利用了Java Persistence API(JPA)来处理数据持久化,而ElipseLink是JPA的一个实现。 **Java Persistence API (JPA)** JPA是Java EE平台的一...

    解析entity里面的字段注释

    3. **字段注释的解析**:解析字段注释通常需要编写一个工具或者使用已有的库,例如通过反射机制获取类的Field对象,然后读取其JavaDoc注释内容。反射API包括Field类的getAnnotations()方法,用于获取所有注解,和...

    JPA实例,新手必备之佳品,记得查看ReadMe.txt

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它是Java Enterprise Edition(Java EE)和Java Standard Edition(Java SE)的一部分,提供了对象/关系映射(ORM)工具,使得...

    jpabook_byMark:JPA练习。 从https克隆

    Java Persistence API(JPA)是Java平台上的一个标准,用于对象关系映射(ORM),它允许开发人员使用Java对象来操作数据库中的数据,而无需编写大量的SQL代码。JPA通过提供一套接口和注解,简化了Java应用程序与...

    springdata示例

    1. **SpringData JPA**:在 Spring Data JPA 中,我们通常会创建一个对应的实体类(Entity)来映射数据库中的 User 表。实体类中定义了表的字段,如用户名(username)、密码(password)、电子邮件(email)等。...

    springbootssm.zip

    - 项目中应包含一个与数据库表对应的Java类,例如`User.java`,这个类的属性对应数据库表的字段,MyBatis会根据这些属性生成SQL语句。 4. **Mapper接口与XML映射文件**: - 创建一个Mapper接口,如`UserMapper....

    Java面试框架高频问题2019

    **问题十五:如果想在拦截的方法里面得到从前台传入的参数,怎么得到?** - 使用`@RequestParam`或`@ModelAttribute`注解。 **问题十六:如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到...

    hibernate API帮助文档 及hibernate学习笔记

    - **级联操作**: 可以设置级联属性,使得对一个实体的操作影响到与其关联的其他实体。 5. **缓存机制** - 第一级缓存:Session级别的缓存,每个Session都有自己的缓存,存储了最近访问过的对象。 - 第二级缓存:...

    springboot整合Mybatis小案例框架整合

    同时,为每个方法创建一个XML文件,里面包含具体的SQL语句。 4. **配置Mybatis**:在SpringBoot的配置类中,我们可以自定义Mybatis的配置,例如设置Mapper扫描路径,确保SpringBoot能发现我们的Mapper接口。 5. **...

    spring注解学习

    4. **@Configuration**和`@Bean`:`@Configuration`注解标记一个类为配置类,里面的方法可以通过`@Bean`注解来声明bean。这种方式提供了更灵活的bean定义方式,可以替代XML配置。 5. **@Scope**:此注解用于指定...

    毕业设计 试题生成和考试系统.zip

    这是一个基于Vue前端和Java后端开发的毕业设计项目,名为“试题生成和考试系统”。该项目旨在为教育领域提供一个高效、便捷的在线考试平台,它包括试题生成、考试管理、成绩统计等多个功能模块,适用于毕业设计、...

    数据库的类生成器

    然后,选择要生成类的数据库表,或者设置一个通配符来批量生成。最后,确定类的命名规则,如是否遵循驼峰命名,以及类的包路径等。执行生成后,类文件会自动保存到指定的目录下,可以直接引入到项目中使用。 对于...

    用Hibernate框架实现的网上书店系统

    例如,我们可以创建一个`Book`类,其中的`@Entity`注解标识该类为一个数据库实体,`@Table`注解指定对应的数据库表名,而`@Id`、`@Column`等注解则分别对应主键和普通字段。 接下来,我们要配置Hibernate,包括设置...

    EJB完美架构、简单开发(EJB 3[1].0开发演示)

    对于实体bean,可以定义一个Java类,加上`@Entity`注解,使用JPA的注解如`@Id`来标识主键,以及`@Column`来定义字段。最后,通过JPA的API来操作这些bean,如CRUD(Create, Read, Update, Delete)操作。 在提供的...

    spring-roo-1.1.5.RELEAS

    Spring Roo是Spring框架家族中的一个开发工具,它旨在加速Java应用程序的开发过程,特别是通过提供命令行接口和集成开发环境(IDE)插件来简化常见的编程任务。标题"spring-roo-1.1.5.RELEASE"指的是Spring Roo的一...

    springboot072基于JavaWeb技术的在线考试系统设计与实现.zip

    6. "springbootsu39z"根据命名规则,可能是Spring Boot项目的一部分,可能是一个压缩包或者源代码文件,里面包含了系统的具体实现,包括控制器、服务、模型、视图等组件。 综上所述,本项目利用Spring Boot的便利性...

    springMVC人员管理系统

    例如,可能会有一个UserController类,里面包含了如新增用户(@PostMapping("/users/new"))、删除用户(@GetMapping("/users/delete/{id}"))等方法。 数据库文件的提及意味着系统使用了持久化层来存储和检索用户数据...

    DAO_operate.rar_dao

    Set rs = db.OpenRecordset("SELECT * FROM Employees") ' 打开一个Recordset,查询Employees表所有记录 ' 遍历Recordset Do While Not rs.EOF Debug.Print rs!FirstName & " " & rs!LastName ' 假设FirstName和...

    springboot-utils.zip

    在SpringBoot中,我们可以创建一个`MD5Util`类,利用Java的`java.security.MessageDigest`类来计算字符串的MD5值,这对于密码存储、文件校验等场景十分有用。 Json序列化格式的设置直接影响到对象转换成JSON字符串...

Global site tag (gtag.js) - Google Analytics