`
leeqq
  • 浏览: 138179 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

@Query简单使用

阅读更多

项目上在与数据库之间的交互采用的是@Query,和entityManager,下面做个简单记述

 

先说@Query,项目上做如下编码即可从数据库查询数据

@Query("select mu from MUser mu")
public List<MUser> findUser();

 调用findUser方法即可执行注解@Query中的SQL,下面看如何配置使方法生效

package lee.spring.jpa.query.dao;

import ....

public interface MUserDao extends JpaRepository<MUser, Long>{

	@Query("select mu from MUser mu")
	public List<MUser> findUser();
}

 这时MUserDao接口定义,注意继承JpaRepository,其中MUser是和数据库表映射的实体类,至于实体类文件如何编写,不作介绍了

下面进行配置了,spring配置文件中加入dataSource的配置

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName">
        <value>java:comp/env/jdbc/MySqlDS</value>
    </property>
</bean>

 

 

 这里采用JNDI方式,在web.xml文件中加入

<resource-ref> 
    <description>DBConnection</description> 
    <res-ref-name>jdbc/MySqlDS</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref>

 我用的服务器是Tomcat,在context .xml中加入

 

<Resource name="jdbc/MySqlDS" auth="Container" type="javax.sql.DataSource"
     maxIdle="30" maxActive="10" maxWait="10000" username="root" password="lijiejqq"
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/school"/>

 注意name和web.xml,spring配置文件的对应,driver和url根据不同数据库不一样,以上是配置数据库信息

 

下面在spring配置文件中加入

 

<jpa:repositories base-package="lee.spring.jpa.query.dao"
    entity-manager-factory-ref="entityManagerFactory"   />

 base-pack所配置是上文MUserDao 文件所在包路径

配置中用到了entityManagerFactory,所以还要添加entityManagerFactory的配置

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="persistenceUnitName" value="users" />
    <property name="persistenceXmlLocation" value="/WEB-INF/persistence.xml" />
    <property name="jpaVendorAdapter">
        <bean
            class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="database" value="MYSQL" />
            <property name="generateDdl" value="false" />
            <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
        </bean>
    </property>
</bean>

 在entityManager中用到的persistenceUnitName和persistenceXmlLocation是配置persistence.xml文件

这个文件是配置持久单元,负责定义应用中的一组实体如何进行管理和持久性。

下面是

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="users" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>lee.spring.jpa.query.model.MUser</class>

    </persistence-unit>
</persistence>

 下面看代码中怎么使用

@Autowired
private MUserDao mUserDao;

public void queryFind(){
	List<MUser> list = mUserDao.findUser();
}

 成员变量mUserDao和查询方法

至此调用queryFind方法即可查到数据。这里仅仅简单技术一下用法,所以没有service类了。方法也不设返回值。

 

另一种方法。使用entityManager。

在spring配置文件中加入

<bean id="entityManager" class="org.springframework.orm.jpa.support.SharedEntityManagerBean">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

 在使用的地方

@Autowired
private EntityManager em;

 这时类成员变量,采用自动注入方式

在某个方法中,如刚才的queryFind方法中加入

StringBuffer sql = new StringBuffer();
sql.append("SELECT * FROM USERS U");
Query query = em.createNativeQuery(sql.toString());
SQLQuery qe = (SQLQuery)((HibernateQuery)query).getHibernateQuery();
qe.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List<Map<String,Object>> result = query.getResultList();

 倒数第二行第三行是为了把查询结果以map形式返回。当然还可以以其他形式返回,如直接返回实体类对象。还可以设置参数,设置查询条数,相关内容不详述了。

分享到:
评论

相关推荐

    使用JPA时@Query中的insert语句之对象传参

    对于简单操作,应优先考虑使用JPA的默认行为,比如`save()`方法,它会自动处理INSERT或UPDATE操作。 4. **错误处理**:当INSERT操作失败时,如违反唯一性约束,JPA通常会抛出异常。你需要捕获并处理这些异常,以...

    SpringData @Query和@Modifying注解原理解析

    - 当你需要使用数据库特定的SQL查询时,可以设置`@Query`的`nativeQuery`属性为`true`。这样,你就可以在查询字符串中写入原生的SQL语句,例如`@Query(value = "SELECT count(id) FROM jpa_persons", nativeQuery =...

    SAP Query 使用说明

    以下是对SAP Query使用的一些关键知识点的详细解释: 1. **SAP Query的基本概念**: - **查询(Query)**:SAP Query中的核心元素,它定义了从哪些数据库表中提取数据,以及如何组合和展示这些数据。 - **数据源...

    SimpleQuery 简易查询 分析器 数据库 Table

    SimpleQuery简易查询分析器是一款专为数据库操作设计的工具,它简化了对数据库表的查询和分析过程。本文将深入探讨SimpleQuery的主要功能和使用方法,以及它如何帮助用户高效地管理和理解数据库中的表格。 ### ...

    MySQL Query Browser 图文说明

    MySQL Query Browser是一款强大的数据库管理工具,专为MySQL数据库设计,提供了直观的图形用户界面,使得数据库操作变得简单易行。本教程将详细讲解其主要功能和使用方法。 1. **安装与启动** - 安装MySQL Query ...

    sap abap query高级功能

    总的来说,SAP ABAP Query 不仅仅是一个简单的查询工具,它实际上是一个功能齐全的报表开发平台。通过其高级特性,用户可以构建出满足各种需求的复杂报表,而且无需具备深厚的 ABAP 编程技能。尽管有时可能需要借助 ...

    mybatis-plus QueryWrapper条件查询器

    下面我们将深入探讨QueryWrapper的使用方法以及它在实际开发中的应用。 首先,QueryWrapper是MyBatis-Plus提供的一种条件构造器,它通过链式编程的方式来创建SQL查询条件。例如,我们可以根据实体类的属性来设置...

    node-pg-query, 使用 node postgres运行查询的简单 helper.zip

    node-pg-query, 使用 node postgres运行查询的简单 helper 查询在节点postgres中使用较少的样板运行查询。 节点Posgres的设计和比较详细。这是我在大多数项目中实现类似于 MODULE的简单抽象之后的一个简单抽象。安装...

    phpQuery下载

    总的来说,phpQuery是PHP开发者的强大工具,它带来了jQuery的便利性,使得服务器端的HTML处理变得更加简单直观。通过深入理解和熟练使用phpQuery,可以大大提高PHP项目中与HTML处理相关的部分的工作效率。

    SAP bw更改query查询变量属性

    如果该变量尚未被任何查询使用,最简单的解决方案是删除它并创建一个新的包含所需处理属性的变量。但在大多数情况下,尤其是当该变量已被多个查询使用时,直接删除并重建新变量并非易选项。本文将介绍一种非标准但...

    plsql-ActiveQueryBuilder

    9. **文档和教程**:为了帮助用户更好地理解和使用,ActiveQueryBuilder 提供详尽的文档和教程,帮助初学者快速上手。 10. **性能优化**:通过分析查询结构和建议改进,ActiveQueryBuilder 可以帮助优化查询性能,...

    AQuery 异步调用

    **一、AQuery的基本使用** 1. **引入依赖** 在项目中引入AQuery库,通常通过Gradle添加依赖,或者手动导入jar包。例如,在build.gradle文件中添加: ```groovy dependencies { implementation '...

    Query 操作手册

    在SAP系统中,Query是一个强大的报表工具,专为不具备编程背景的用户提供简单易用的报表生成功能。通过图形化的界面,用户可以直观地拖拽字段来构建所需的报表。尽管它的易用性使得初学者也能快速上手,但Query实际...

    SAP中QUERY的介绍和制作

    SAP中的QUERY是一种简易的报表制作工具,设计用于让不具备编程背景的用户生成简单的查询报告。尽管其界面直观,允许用户通过拖放操作构建报表,但本质上,QUERY仍然是基于代码的,与ABAP开发报表并无本质区别。在...

    Query.js文件

    Query.js 文件是一个...它的单文件结构使得引入和使用变得简单,而对jQuery的潜在依赖则意味着它可能继承了jQuery的许多强大特性。在实际项目中,根据具体需求选择引入Query.js,可以有效地提高前端开发的效率。

    SAP_Query_Reproting的制作(简单范例)

    通过学习本文提供的简单范例,用户可以逐步掌握 SAP Query 的基本操作,从而在实际工作中有效利用这一工具进行数据管理和报告生成。在 SAP Query 资源有限的情况下,深入理解和实践这些步骤将对提升工作效率大有裨益...

    在SAP Query中添加双击事件

    总的来说,通过在SAP Query中添加双击事件,我们可以增强系统的用户交互性和功能性,使得查询不仅是一个简单的数据展示工具,还可以成为业务流程中的一个交互节点。这种定制化的能力是SAP Query作为强大报表工具的一...

    AS400 QUERY MANAGER

    ### AS400 QUERY MANAGER 知识点详解 #### 一、Query Manager 概述 **Query Manager** 是随 **OS/400**...对于使用 **iSeries** 或 **IBM i** 的企业和开发者来说,掌握 **Query Manager** 的使用方法是非常必要的。

    phpQuery.php

    phpQuery,一个非常简单方便的PHP页面内容爬取方法。详细用法请百度 require("phpQuery.php");//导入phpQuery库 $html = phpQuery::newDocumentFile("https://segmentfault.com/tags"); $hrefList = pq(".tag")...

    Query Object模式Demo

    在实践中,Query Object可以是简单的静态方法,也可以是具有复杂行为的类。它们接收参数以构建查询条件,然后返回查询结果。这种模式特别适用于大型项目,因为它允许开发人员在不修改原有业务逻辑的情况下,添加、...

Global site tag (gtag.js) - Google Analytics