通过javax.persistence.Tuple原生SQL获取DTO数据

栏目: 数据库 · 发布时间: 5年前

内容简介:从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple原生SQL生成DTO。点击#DTO标签可获得更多生成DTO的方式。主要点:编制自己的Dao调用EntityManager.createNativeQuery(),返回java.persistence.Tuple类型:

从实体中获取DTO数据,也就是从DDD聚合中获取DDD值对象有多种方式,如果我们不使用DTO方式,直接返回完整实体聚合,容易导致性能损失,使用DTO可以让我们只提取所需的数据。在这个应用程序中,我们展示如何依赖于javax.persistence.Tuple原生 SQL 生成DTO。点击#DTO标签可获得更多生成DTO的方式。

主要点:

编制自己的Dao调用EntityManager.createNativeQuery(),返回java.persistence.Tuple类型:

假设Car实体:

@Entity
@Table(name = <font>"car"</font><font>)
<b>public</b> <b>class</b> Car implements Serializable {

    <b>private</b> <b>static</b> <b>final</b> <b>long</b> serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    <b>private</b> Long id;

    <b>private</b> String name;
    <b>private</b> String engine;
    <b>private</b> String color;
</font>

编制自己的DAO:

@Repository
@Transactional
<b>public</b> <b>class</b> Dao<T, ID <b>extends</b> Serializable> implements GenericDao<T, ID> {

    @PersistenceContext
    <b>private</b> EntityManager entityManager;

    @Override
    <b>public</b> <S <b>extends</b> T> S persist(S entity) {

        Objects.requireNonNull(entity, <font>"Cannot persist a null entity"</font><font>);

        entityManager.persist(entity);

        <b>return</b> entity;
    }

    @Transactional(readOnly = <b>true</b>)
    <b>public</b> List<Tuple> fetchCars() {
        List<Tuple> result = entityManager
                .createNativeQuery(
                        </font><font>"select name, color from car"</font><font>, Tuple.<b>class</b>
                ).getResultList();

        <b>return</b> result;
    }
</font>

Service调用:

@Service
<b>public</b> <b>class</b> CarService {

    <b>private</b> <b>final</b> Dao dao;

    <b>public</b> CarService(Dao dao) {
        <b>this</b>.dao = dao;
    }

    <b>public</b> List<Tuple> fetchCars() {
        <b>return</b> dao.fetchCars();
    }
}

最终Spring Boot中调用:

@SpringBootApplication
<b>public</b> <b>class</b> TupleAndSqlApplication {
    
    <b>private</b> <b>static</b> <b>final</b> Logger logger
            = Logger.getLogger(TupleAndSqlApplication.<b>class</b>.getName());
    
    @Autowired
    <b>private</b> CarService carService;
    
    <b>public</b> <b>static</b> <b>void</b> main(String[] args) {
        SpringApplication.run(TupleAndSqlApplication.<b>class</b>, args);
    }
    
    @Bean
    <b>public</b> ApplicationRunner init() {
        <b>return</b> args -> {
            
            carService.populateCars();
            List<Tuple> cars = carService.fetchCars();
            
            cars.forEach((e) -> logger.info(() -> <font>"Car: "</font><font> + e.get(</font><font>"name"</font><font>) + </font><font>","</font><font> + e.get(</font><font>"color"</font><font>)));
        };
    }
}
</font>

以上所述就是小编给大家介绍的《通过javax.persistence.Tuple原生SQL获取DTO数据》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法:python语言实现

数据结构与算法:python语言实现

迈克尔.·T·古德里奇、罗伯托·塔玛西亚、迈克尔·H·戈德瓦瑟 / 张晓、赵晓南 / 机械工业出版社 / 2018-9 / 109.00元

本书采用Python语言讨论数据结构和算法,详细讲解其设计、分析与实现过程,是一本内容全面且特色鲜明的教材。书中将面向对象视角贯穿始终,充分利用Python语言优美而简洁的特点,强调代码的健壮性和可重用性,关注各种抽象数据类型以及不同算法实现策略的权衡。一起来看看 《数据结构与算法:python语言实现》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具