DTO-数据传输对象;pojo-最纯粹的java对象与数据库中的表一一对应。
简单讲:DTO起到业务数据的传递作用,pojo则与持久层数据库打交道。
有时候我们需要查询返回DTO对象,因为DTO封装我们操作此对象的业务方法;而这些业务方法从分层的思想上看不能封装到pojo中,因为这违背了hibernate编程规范,pojo(Plain Ordinary Java Object
)是一个简单的普通Java对象,它不包含业务逻辑或持久逻辑。
hibernate查询返回DTO对象,DTO可能封装了多个pojo对象的属性和自己的业务方法;比如一个购物车的DTO可能封装了与购物车添加商品、移除商品等的方法。
上代码:
public AccountDTO getAccountByUsernameAndPassword(AccountDTO accountDTO) {
String sql = "SELECT"
+ " SIGNON.USERNAME,"
+ " ACCOUNT.EMAIL,"
+ " ACCOUNT.FIRSTNAME,"
+ " ACCOUNT.LASTNAME,"
+ " ACCOUNT.STATUS,"
+ " ACCOUNT.ADDR1,"
+ " ACCOUNT.ADDR2,"
+ " ACCOUNT.CITY,"
+ " ACCOUNT.STATE,"
+ " ACCOUNT.ZIP,"
+ " ACCOUNT.COUNTRY,"
+ " ACCOUNT.PHONE,"
+ " PROFILE.LANGPREF,"
+ " PROFILE.FAVCATEGORY,"
+ " PROFILE.MYLISTOPT,"
+ " PROFILE.BANNEROPT,"
+ " BANNERDATA.BANNERNAME"
+ " FROM ACCOUNT, PROFILE, SIGNON, BANNERDATA"
+ " WHERE ACCOUNT.USERID = ?"
+ " AND SIGNON.PASSWORD = ?"
+ " AND SIGNON.USERNAME = ACCOUNT.USERID"
+ " AND PROFILE.USERID = ACCOUNT.USERID"
+ " AND PROFILE.FAVCATEGORY = BANNERDATA.FAVCATEGORY";
// Query query = this.getSession().createQuery(hql);
//此方法有transaction的异常,因为我这里不是手动管理hibernate的事物,hibernate事物交给spring管理,此问题没能解决
// Query query = this.getSessionFactory().getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(aDTO.class));
Query query = this.getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(AccountDTO.class));
query.setString(0, accountDTO.getUsername());
query.setString(1, accountDTO.getPassword());
return (AccountDTO) query.uniqueResult();
}
这里的重点方法:
Query query = this.getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(AccountDTO.class));
原生sql的查询,返回结果设置到DTO,hibernate给我们做了处理,类似与jdbc的查询这里可能用到了反射,所以要求DTO中的属性要与表字段名称相同,并且为全都小写。(我试图在sql中使用别名,而且DTO中属性使用了驼峰命名,但结果出错。网上有文章说:只需别名和属性名称一致即可;但我测试未成功。有经验的朋友请指教!)
搞完!
分享到:
相关推荐
MyBatisPlus自带了一个代码生成器mybatis-plus-generator,可基于数据库库表,结合模板技术,自动生成程序源码,不过默认情况下,只支持Entity、Mapper、Service、Controller这些层次。如果想生成未预置的代码,如vo...
eclipse插件,根据数据库表自动生成DTO(pojo)插件!eclipse插件,根据数据库表自动生成DTO(pojo)插件!
让繁琐的的数据集不需要开发者自己动手就可以封装的对应的bean中去
Java中 PO VO BO DTO DAO 和 POJO 关系图
DTO数据传输对象简介PPT
java DTO 详解 java DTO 详解 java DTO 详解 java DTO 详解
主要介绍了java实现相同属性名称及相似类型的pojo、dto、vo等互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Generate POJO-JPA-Swagger-DTO
简单的EntityFramework4.3+三层+DTO,如果需要简化版的,我的资源里有一个不含DTO的版本。 这个Demo的主要功能是: 1、实体类的创建、复杂类型的嵌套 2、实体类的配置(主键、外键、一对一、1对多,多对多) 3、...
$ composer require cblink/laravel-dto -vvv 生成DTO // 默认将创建到项目app/DTO目录 php artisan make:dto BaseDTO 贡献 您可以通过以下三种方式之一进行贡献: 使用归档错误报告。 回答问题或修复上的错误。 ...
简单的DTO 用于移动数据的简单 DTO 对象。 需要 PHP 5.4 ###Practical 用法当返回复杂数据时,可以返回 DTO 而不是返回数组。 class UserService{ public function getUsers() { $rows = $this->db->users->get(); ...
但是查询返回的是map,映射到具体的dto上就需要做bean拷贝,效率低下且复杂。 采用新方法,加注解,在返回时候直接映射到具体的DTO上,可以自动下划线转驼峰,忽略大小写,忽略类型,只要属性名和字段名一致就可以...
简单来说,当我们需要一个对象10个字段的内容,但这个对象总共有20个字段,我们不需要把整个PO对象全部字段传输到客户端,而是可以用DTO重新封装,传递到客户端。
把分页按钮写在dto里,其他dto继承他
DTO的共享数据传输对象。在本文中,我们将介绍在微服务之间共享DTO的方法。 使用微服务管理表示应用程序域的模型。域模型的关注点与DTO不同,我们将它们与DAO层中的数据模型分开。 这样做的主要原因是我们不想通过...
jsp上使用object[]看不懂吧?写vo太烦琐了?ok,都交给map吧、本工具类的使命就是让map代替所有的vo,让编程变得更美好。 附有详细的使用例子。 java精英团队十年编程精华。
mybatis 生成 pojo mapper dao 的工具包
java术语(PO/POJO/VO/BO/DAO/DTO)
modify the property file of the database path, driver, user name, password, enter CMD to the D drive is running java-jar kingdao.jar disk in D test folder under the root directory of DAO and DTO ...
登陆的dto.zip