文档章节

JPA使用原生SQL查询

孟飞阳
 孟飞阳
发布于 2017/03/20 00:59
字数 314
阅读 339
收藏 0

一、Spring3.1之前版本的方法 

import org.springframework.context.ApplicationContext;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import java.util.*;
import javax.persistence.*;

public class CustomerCourseDAO extends JpaDaoSupport implements ICustomerCourseDAO {

public String findTeacherNameByCourseId(Integer courseid) {
        String sql = "select concat(c.Given_Name,' ',c.Family_Name) as teachername from customer c,customer_course cc"
                + " where c.Customer_ID = cc.Customer_ID and cc.Related_Code = 2 and  cc.Course_ID = " + courseid.intValue();
        try {
            EntityManagerFactory emf = getJpaTemplate().getEntityManagerFactory();
            EntityManager newEm = emf.createEntityManager();
            EntityTransaction newTx = newEm.getTransaction();
            newTx.begin();

            List result = newEm.createNativeQuery(sql).getResultList();
            String teachername = "";
            if(result.size()==1){
                teachername = (String)result.get(0);
            }
            newEm.getDelegate();
            newTx.commit();
            newEm.close();
            emf.close();
           
            return teachername;
        } catch (RuntimeException re) {
            logger.error("find Teacher's Name by courseId failed", re);

            throw re;
        }
    }

 
    //add by edwin, 2007-11-08 测试通过
    @SuppressWarnings(value = "unchecked")
    public List<CustomerCourse> findTeaStuByCourseId(Integer id) {
        String sql = "select model.*  from  customer_course model " + "where model.Related_Code = 1 and model.Course_ID = " + id.intValue();

        try {
            EntityManagerFactory emf = getJpaTemplate().getEntityManagerFactory();
            EntityManager newEm = emf.createEntityManager();
            EntityTransaction newTx = newEm.getTransaction();
            newTx.begin();

            @SuppressWarnings(value = "unchecked")
            List<CustomerCourse> stu = newEm.createNativeQuery(sql,CustomerCourse.class).getResultList();
            newTx.commit();
            newEm.close();
            emf.close();
           
            return stu;
        } catch (RuntimeException re) {
            logger.error("find Teacher's students by courseId failed", re);

            throw re;
        }
    }

}

二、Spring 3.1之后版本方法

1、在spring配置文件中配置entityManagerFactory

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.alimama.prism.model"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <!--<prop key="hibernate.show_sql">true</prop>-->
                <!--<prop key="hibernate.format_sql">true</prop>-->
                <!--<prop key="hibernate.use_sql_comments">true</prop>-->

            </props>
        </property>
    </bean>

2、以下测试方法测试通过

	@Override
	@SuppressWarnings("unchecked")
	public List<TaskModel> findByTaskName(String name) {
	 	EntityManagerFactory emf= (EntityManagerFactory) SpringUtils.getBean("entityManagerFactory");  //SpringUtils需要自己指定了....
	    EntityManager em=emf.createEntityManager();  
	    String querysql="select * from prism_task where taskname=?";  
	    Query query=em.createNativeQuery(querysql);  
	    query.setParameter(1, name);  
	    List<TaskModel> tasklist=(List<TaskModel>)query.getResultList();  
	    em.close();  
		return tasklist;
	}

 

© 著作权归作者所有

孟飞阳
粉丝 217
博文 1057
码字总数 566384
作品 5
朝阳
个人站长
私信 提问
jpa(二)----jpa @Query注解 原生insert\delete\update\select语句

-- 如果@Query注解加上nativeQuery=true 则查询语句使用原生sql,不加则使用HQL 一、jpa 原生insert的sql语句:

u010775025
2018/05/30
0
0
技术专题讨论:如何对 JPA 或者 MyBatis 进行技术选型

在我们平时的项目中,大家都知道可以使用 JPA 或者 Mybatis 作为 ORM 层。对 JPA 和 Mybatis 如何进行技术选型? 下面看看大精华总结如下: 最佳回答 首先表达个人观点,JPA必然是首选的。 ...

后海
2018/06/27
1K
0
【转载】纯干货,Spring-data-jpa(spring数据持久层解决规范)详解,全方位介绍。

本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring整合的环境中实现...

ZhangLG
04/16
92
0
jpa----spring-data-jpa 复杂查询,包括多表关联,分页,排序等

转载:由于此转载文章的出处也是转载的,所以原作者不详 本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求。这里不讲解JPA和Spring-data...

u010775025
2018/05/29
0
0
Spring Boot [组件学习-Spring Data JPA]

导读: 在上篇文章中对Spring MVC常用的一些注解做了简要的说明,在这篇文章中主要对Spring Data JPA 做一个简要的说明,并附有一个简单的例子,可以体会到Spring Data JPA 的强大之处。 Sp...

yangrd
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于java中变量的重名问题

在java语言中,变量的命名有很多规则和规范,但是有的地方可以使用相同的变量名,有的地方却不能使用,这是为什么呢? 下面是个人的一点见解,是从作用域和内存来分析的,目的是为了方便理解...

INEVITABLE
12分钟前
4
0
MySQL的COUNT语句,竟然都能被面试官虐的这么惨?

数据库查询相信很多人都不陌生,所有经常有人调侃程序员就是CRUD专员,这所谓的CRUD指的就是数据库的增删改查。 在数据库的增删改查操作中,使用最频繁的就是查询操作。而在所有查询操作中,...

程序员修BUG
14分钟前
3
0
PHP+Mysql统计文件下载次数实例

PHP+Mysql统计文件下载次数实例,实现的原理也很简单,是通过前台点击链接download.php传参id,来更新点击次数。 获取文件列表: <?php require 'conn.php'; $query = mysql_query("S...

ymkjs1990
15分钟前
3
0
一、环境变量及Jshell

一、环境变量: 作用: 可执行文件所在位置的链接。CLI输入命令时,通过环境变量指引找到命令所在位置 windows的环境变量名不区分大小写,Linux区分 Windows下的用户变量即只有当前用户生效 ...

清自以敬
16分钟前
3
0
微软改名部又出手:Office 365正在悄悄更名为Microsoft 365

然而让人疑惑的是Microsoft 365 是微软面向企业提供的服务,这项服务附带操作系统以及办公软件的订阅授权。 现在把面向家庭消费者的办公软件也换成Microsoft 365 是什么操作?没人知道因为微...

linuxCool
16分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部