pojo类:Stuinfo.java
package com.lz.pojo;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Stuinfo entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name="stuinfo"
,catalog="student"
)public class Stuinfo implements java.io.Serializable {
// Fields private Integer id;
private String stuid;
private String sname;
private String sarea;
// Constructors /** default constructor */
public Stuinfo() {
}
/** full constructor */
public Stuinfo(String stuid, String sname, String sarea) {
this.stuid = stuid;
this.sname = sname;
this.sarea = sarea;
}
// Property accessors
@Id @GeneratedValue(strategy=IDENTITY)
@Column(name="id", unique=true, nullable=false) public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="stuid", nullable=false, length=12) public String getStuid() {
return this.stuid;
}
public void setStuid(String stuid) {
this.stuid = stuid;
}
@Column(name="sname", nullable=false, length=10) public String getSname() {
return this.sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Column(name="sarea", nullable=false, length=10) public String getSarea() {
return this.sarea;
}
public void setSarea(String sarea) {
this.sarea = sarea;
}}DAO接口:IStuDAO.javapackage com.lz.dao;import java.util.List;public interface IStuDAO {
public List findstu();}实现类接口:StuDAOImpl.javapackage com.lz.dao.impl;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.InstantiationStrategy;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.orm.jpa.support.JpaDaoSupport;import com.lz.dao.IStuDAO;public class StuDAOImpl extends JpaDaoSupport implements IStuDAO{ @SuppressWarnings("unchecked" )
public List findstu() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("springMVC");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();// 开启事务
// @PersistenceContext EntityManager em;
final String HQL = "select s.stuid,s.sname,s.sarea from Stuinfo s";
Query query = em.createQuery(HQL);
List list = query.getResultList();
return /*(List)getJpaTemplate().execute(new JpaCallback() {
public List doInJpa(EntityManager em) throws PersistenceException{
Query query = em.createQuery(HQL);
List list = query.getResultList();
return list;
}
});*/
list;
}}控制类:StuCtrl .javapackage com.lz.ctrl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.lz.dao.impl.StuDAOImpl;@Controller
public class StuCtrl {
@Autowired
private StuDAOImpl stuDAO;
public void setDAO(StuDAOImpl stuDAO){
this.stuDAO = stuDAO;
}
@RequestMapping("/findStu.do")
public String findStu(Model model){
List list = stuDAO.findstu();
System.out.println("进入控制器,查出的记录数为:"+list.size());
model.addAttribute("stuList",list);
return "springmvc";
}}JPA配置文件:persistence.xml<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="springMVC"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.lz.pojo.Stuinfo</class>
<!-- 是否显示生成的SQL语句 -->
<properties>
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>Spring配置文件:applicationContext.xml<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"
xmlns:tx="http://www.springframework.org/schema/tx"> <!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"> </property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/student?useUnicoode=true&characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- Hibernate配置 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
</props>
</property>
<property name="packagesToScan" value="org.javaee.base.entity" />
</bean>
<!-- 实体管理器:注入到dao类里面去管理实体,提供JPA、Hibernate提供的接口 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="persistenceUnitName" value="springMVC" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"></property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="stuDAO" class="com.lz.dao.impl.StuDAOImpl">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
package com.lz.pojo;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Stuinfo entity. @author MyEclipse Persistence Tools
*/
@Entity
@Table(name="stuinfo"
,catalog="student"
)public class Stuinfo implements java.io.Serializable {
// Fields private Integer id;
private String stuid;
private String sname;
private String sarea;
// Constructors /** default constructor */
public Stuinfo() {
}
/** full constructor */
public Stuinfo(String stuid, String sname, String sarea) {
this.stuid = stuid;
this.sname = sname;
this.sarea = sarea;
}
// Property accessors
@Id @GeneratedValue(strategy=IDENTITY)
@Column(name="id", unique=true, nullable=false) public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="stuid", nullable=false, length=12) public String getStuid() {
return this.stuid;
}
public void setStuid(String stuid) {
this.stuid = stuid;
}
@Column(name="sname", nullable=false, length=10) public String getSname() {
return this.sname;
}
public void setSname(String sname) {
this.sname = sname;
}
@Column(name="sarea", nullable=false, length=10) public String getSarea() {
return this.sarea;
}
public void setSarea(String sarea) {
this.sarea = sarea;
}}DAO接口:IStuDAO.javapackage com.lz.dao;import java.util.List;public interface IStuDAO {
public List findstu();}实现类接口:StuDAOImpl.javapackage com.lz.dao.impl;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.List;import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;
import javax.persistence.PersistenceUnit;
import javax.persistence.Query;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.InstantiationStrategy;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.orm.jpa.JpaCallback;
import org.springframework.orm.jpa.support.JpaDaoSupport;import com.lz.dao.IStuDAO;public class StuDAOImpl extends JpaDaoSupport implements IStuDAO{ @SuppressWarnings("unchecked" )
public List findstu() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("springMVC");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();// 开启事务
// @PersistenceContext EntityManager em;
final String HQL = "select s.stuid,s.sname,s.sarea from Stuinfo s";
Query query = em.createQuery(HQL);
List list = query.getResultList();
return /*(List)getJpaTemplate().execute(new JpaCallback() {
public List doInJpa(EntityManager em) throws PersistenceException{
Query query = em.createQuery(HQL);
List list = query.getResultList();
return list;
}
});*/
list;
}}控制类:StuCtrl .javapackage com.lz.ctrl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;import com.lz.dao.impl.StuDAOImpl;@Controller
public class StuCtrl {
@Autowired
private StuDAOImpl stuDAO;
public void setDAO(StuDAOImpl stuDAO){
this.stuDAO = stuDAO;
}
@RequestMapping("/findStu.do")
public String findStu(Model model){
List list = stuDAO.findstu();
System.out.println("进入控制器,查出的记录数为:"+list.size());
model.addAttribute("stuList",list);
return "springmvc";
}}JPA配置文件:persistence.xml<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="springMVC"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.lz.pojo.Stuinfo</class>
<!-- 是否显示生成的SQL语句 -->
<properties>
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>Spring配置文件:applicationContext.xml<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"
xmlns:tx="http://www.springframework.org/schema/tx"> <!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"> </property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/student?useUnicoode=true&characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<!-- Hibernate配置 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="namingStrategy">
<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
</props>
</property>
<property name="packagesToScan" value="org.javaee.base.entity" />
</bean>
<!-- 实体管理器:注入到dao类里面去管理实体,提供JPA、Hibernate提供的接口 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="persistenceUnitName" value="springMVC" />
<property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"></property>
</bean>
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory" />
</bean>
<bean id="stuDAO" class="com.lz.dao.impl.StuDAOImpl">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
org.hibernate.HibernateException: 'hibernate.dialect' must be set when no Connection avalable
at org.hibernate.dialect.resolver.DialectFactory.buildDialect(DialectFactory.java:107)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:138)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2119)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2115)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1339)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
at com.lz.dao.impl.StuDAOImpl.findstu(StuDAOImpl.java:35)
at com.lz.ctrl.StuCtrl.findStu(StuCtrl.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
dubug的时候发现 EntityManager 对象为null~求各路大侠指点迷津~
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 这段代码应该配置在persistence.xml中,否则,它无法识别是使用hibernate还是JPA