Hibernate根据查询内容封装成对象(DTO)

List<SpacesDTO> list=session.createQuery("select new dto.SpacesDTO(s.id, s.num, s.state, s.type, o.name) from Spaces s inner join s.owner o").list();


SpacesDTO属性必须和查询信息一致 (s.id, s.num, s.state, s.type, o.name) 


package dto;

public class SpacesDTO {

	private int id;
	private String num;
	private String state;
	private String type;
	private String name;

	public SpacesDTO(int id, String num, String state, String type, String name) {
		super();
		this.id = id;
		this.num = num;
		this.state = state;
		this.type = type;
		this.name = name;
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}

	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

注意:在SpacesDTO中必须根据属性(与查询内容对应)创建构造函数,否则会抛异常:[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: dto.SpacesDTO].

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用Hibernate Native Query查询并返回DTO的步骤如下: 1. 创建一个DTO类,它包含你想要返回的字段的属性。 ```java public class UserDTO { private int id; private String username; private String email; // getters and setters } ``` 2. 编写一个SQL查询,使用Hibernate Native Query执行查询,并将结果映射到DTO对象中。 ```java String sql = "SELECT id, username, email FROM users WHERE id = :id"; Query query = session.createNativeQuery(sql) .setParameter("id", id) .setResultTransformer(Transformers.aliasToBean(UserDTO.class)); UserDTO user = (UserDTO) query.uniqueResult(); ``` 在这个例子中,我们编写了一个SQL查询,并使用Hibernate Native Query执行查询。我们使用setParameter方法设置查询参数,并使用setResultTransformer方法将查询结果映射到UserDTO对象中。 Transformers.aliasToBean方法是一个Transformer实现,它可以将查询结果自动映射到一个JavaBean对象中。在这里,我们将UserDTO.class传递给这个方法,表示将查询结果映射到UserDTO对象中。 3. 在Java代码中,使用Hibernate Session执行查询。 ```java Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); UserDTO user = null; try { String sql = "SELECT id, username, email FROM users WHERE id = :id"; Query query = session.createNativeQuery(sql) .setParameter("id", id) .setResultTransformer(Transformers.aliasToBean(UserDTO.class)); user = (UserDTO) query.uniqueResult(); tx.commit(); } catch (Exception e) { if (tx != null) { tx.rollback(); } e.printStackTrace(); } finally { session.close(); } ``` 在这个例子中,我们使用Hibernate Session打开一个数据库会话,并在try-catch-finally块中执行查询。我们使用createNativeQuery方法创建一个Hibernate Native Query对象,并使用setParameter和setResultTransformer方法设置查询参数和结果转换器。最后,我们使用uniqueResult方法获取查询结果,并提交或回滚事务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值