javabean有什么作用 编译器idea 测试srpingJDBC报错No bean named 'xxx' is defined

Spring 整合mybatis 出现错误,新手求老鸟帮忙
[问题点数:40分,结帖人y]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:23274
2013年1月 Java大版内专家分月排行榜第二
本版专家分:0
本版专家分:23274
2013年1月 Java大版内专家分月排行榜第二
本版专家分:2031
本版专家分:0
本版专家分:129
本版专家分:0
本版专家分:0
匿名用户不能发表回复!
其他相关推荐在学习spring过程中遇见了种种不同的异常错误,这里做了一下总结,希望遇见类似错误的同学们共勉一下。
这类错误是一般都是创建了一个的文件比如有创建了一个的文件,在中引用的中定义的名,导致的错误,疏忽是:写实现类的时候忘记了写对应的方法即所谓的依赖注入
private HelloDaohelloDao;
//set依赖注入很重要,不写会报错,不能读写helloDao这一属性
publicvoid setHelloDao(HelloDao helloDao) {
System.out
.println("控制反转:应用程序本身不在负责创建helloDao对象,而是由spring容器负责创建、管理、维护,这样控制权转移,称为反转。"
"可以通过依赖注入方式注入该HelloDao对象");
this.helloDao = helloD
这种错误是马虎的错误,在对应的的配置文件中,标签的属性忘了加引号,在配置文件中国不会报错,但是在运行的时候就会出这样的错,一般导致错误的原因是复制的时候疏忽了引号,直接将原来的引号覆盖了,导致了最后该属性没有引号。
id="helloDaoImpl"class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"&&/bean&
错误的写成:
id="helloDaoImpl"class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope=prototype&&/bean&
这种报错但是没有语句的错误一般都是使用的时候单词写错了,这里写错的地方是在类中,类中引用的时候写错了单词;比如这里的错,注意下面的红色文字:
",HelloServiceImpl.class);
&beanid="helloServiceImpl"class="www.csdn.spring.service.impl.HelloServiceImpl"scope="singleton"lazy-init="false"&
&propertyname="helloDao"ref="helloDaoImpl"/&
眼尖的哥们估计都看出来了这两个单词写的不一样,获取的方法中引用的少写了一个“”,导致容器在读取的时候不能识别。以后注意细心就好。
这种也是单词写错的情况,与上面不同的是这种情况给出了语句,让你更清楚错误发生的原因,英文还差不多的哥们或者有一定编程经验的人员一看语句就应该能判断出什么错误;这里错误原因明显才、指出每一个名字为的,或名字为的未定义,这种错也好好找,一般都是互相引用的配置文件马虎出的错,下面一个例子说明:比如引用的时候,还是如上面说的一样,重点再红色字体
配置文件中这么写:
&beanid="helloServiceImpl"class="www.csdn.spring.service.impl.HelloServiceImpl"scope="singleton"lazy-init="false"&
&propertyname="helloDao"ref="helloDaoImp"/&
但是配置文件中却这么写:
id="helloDaoImpl"class="www.csdn.spring.dao.impl.HelloDaoImpl"
scope="prototype"&&/bean&
写到这大家就清楚了吧,与上一个错误基本上一样,都是单词写错的错误,只不过不同的是上一个错误是在类中引用的时候写错单词出的错,而这一个错误是在配置文件中国引用出的错,万变不离其宗,错误的额原因都是单词写错,今后细心即可。
Cannot find class [www.csdn.spring.dao.imp.HelloDaoImpl] for bean with name 'helloDaoImpl' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception isjava.lang.ClassNotFoundException:www.csdn.spring.dao.imp.HelloDaoImpl
Caused by: java.lang.ClassNotFoundException:
错误原因:倒错包了,我的web项目HelloDaoImpl在dao.impl包下而不是dao包下。所以包这样的错,看一下spring配置文具店额classes标签的值导入的类包名是否正确
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'employeeBean' defined in class path resource [spring-constructor.xml]: Unsatisfied dependency expressed through constructor argument
with index 2 of type [double]: Ambiguous constructor argument types - did you specify the correct bean references as constructor arguments?
错误原因:bean实例类中的属性类型与spring配置文件中的构造器属性类型不对应所导致,这种情况多出在使用类型指定构造器参数;比如:
类中属性如下,重点注意红色部分:
private Stringname;
private Stringsex;
privatedoublesalary;
spring配置文件中的构造器标签
&constructor-arg type="java.lang.String" value="杨凯" /&
&constructor-arg type="java.lang.String" value="男" /&
&constructor-arg type=" java.lang.Double" value="5000.00" /&
这种错误是因为构造器中的type属性不会自动对应拆箱装箱属性类型,简单点说就是类中使用的是基本数据类型,配置文件中对应的type属性值就要是基本数据类型;类中使用的是类类型,配置文件中对应的type属性值就要是包名加上类类型;
还有一种原因就是不对应的原因,constructor-arg直接写错了,比如:privatedoublesalary;对应了&constructor-arg
type="Double" value="5000.00" /&
或者顺序不对的情况下回出现赋值错误,比如同时存在两个相同类型的属性,name应该为“杨凯”,如果sex在配置文件的位置与name的颠倒了,会出现name=“男”的情况
错误原因:这种情况是一个实例引用另一个实例对象,而引用的那个实例对象为空,但是在改实例的配置文件中又错误指明空值。举个例子说明:
&beanid="memberBean"class="www.csdn.spring.constructor.MemberBean"&
&!-- value="null" 这里给value赋的是一个空字符串,而不是一个null空值
&propertyname="name"value="null"/&
&property name="member"&
&/property&
关键看红色部分,红色部分是正确的写法,这样写引用空值对象才不会报错,但是如果你像上面引用nam属性那样指明value=“null”就会出现改错。
这两种错误原因:都是spring配置文件中自动装配按byType时出的问题,配置文件, 红色部分为错误的解释和导致错误的原因如下:
&beanid="compBean"class="www.csdn.spring.autowire.CompBean"&
&propertyname="name"value="DELL"/&
&beanid="deptBean"class="www.csdn.spring.autowire.DeptBean"&
&propertyname="name"value="销售部门"/&
这里只能出现一个deotBean,id名不一样但是类型一样,都是deptBean实体的;id="deptBean"或同类型的不同id都会抛异常
&bean id="deptBean1" class="www.csdn.spring.autowire.DeptBean"&
&property name="name" value="销售部门"/&
&/bean& --&
&!--使用autoWrie自动装配,改属性值byT
按类型自动装配,前提是同一个类型的只能有一个--&
&beanid="empBean"class="www.csdn.spring.autowire.EmpBean"autowire="byType"&
&propertyname="name"value="杨凯"/&
&property name="comp" ref="compBean"/&
&property name="dept" ref="deptBean"/& --&
错误原因: spring配置文件中自动装配按constructor时出的问题,配置文件, 红色部分为错误的解释和导致错误的原因如下:
&!--在spring3.2以上版本中:使用构造器自动装配时,如果有一个id与bean实例中的属性名相同的配置bean存在,虽然构造器自动装配是按类型自动装配的,
但是即使有多个相同类型的bean存在也不受影响;受影响的情况是:没有与bean实例中的属性名相同的配置bean存在,
又有多个相同类型的bean配置,就会抛异常--&
&beanid="deptBean"class="www.csdn.spring.autowire.DeptBean"&
&propertyname="name"value="销售部门"/&
&beanid="deptBean1"class="www.csdn.spring.autowire.DeptBean"&
&propertyname="name"value="销售部门"/&
&beanid="deptBean2"class="www.csdn.spring.autowire.DeptBean"&
&propertyname="name"value="销售部门"/&
&!--使用autoWrie自动装配,改属性值构造器自动装配就是按类型自动装配
beam实例中必须结合构造器使用,如果没有构造器自动装配后注入不进去值,取出为空值--&
&beanid="empBean"class="www.csdn.spring.autowire.EmpBean"autowire="constructor"&
&propertyname="name"value="杨凯"/&
&property name="comp" ref="compBean"/&
&property name="dept" ref="deptBean"/& --&
乍一看,有些许没有头脑,但是放下心仔细看看,提示说什么users属性怎么怎么滴;还有一点提示就是说是spring-collection.xml配置文件中的错误,这就好找,找到改配置中有关users的地方,
&beanid="u1"class="www.csdn.spring.collection.set.User"&
&propertyname="name"value="杨凯"/&
&propertyname="age"value="22"/&
。。。。。
这样的代码肯定不会出错了,如果是这里的错报的就不是这个错了,可能就是第一条或第二条错了;再找下一块有users的地方,找到了这里:
&!-- list集合 --&
&propertyname="users"&
&!-- &array&
&ref bean="u1" /&
&ref bean="u2" /&
&ref bean="u3" /&
&/array& --&
&!-- &list&
&ref bean="u1"/&
&ref bean="u2"/&
&ref bean="u3"/&
&/list& --&
&!--还可以通过spring自带的sehema约束中的util工具约束的list集合遍历--&
&util:list&
&ref bean="u1" /&
&ref bean="u2" /&
&ref bean="u3" /&
&/util:list&
&/property&
仔细一看真是这里的错,红色部分最开始忘了写,注释掉了上面的list注入值的方式,后面的uti标签注入值有没有写,这是在测试类中取值遍历的时候就会遍历一个空的users,这是因为是没有注入值的错,所以没有报空指针的错,报的是这种莫名其妙的错。
这种错误一般出在aop面向切面的编程中,spring面向切面的代理有两种,一种是jdk动态代理,一种是cglib代理;这是你在使用的的使用如果混合时候就会出现上面的错;这两种代理的区别是前者是接口代理,就是返回一个接口类型对象,而后者是类代理,不能返回接口类型对象只能返回类类型对象,如果返回接口了同样会出这样的错。
还有可能出错的地方就是对应的spring配置文件,这
里是最容易马虎出错的地方,仔细检查一下的你的目标对象,比如:&!--
目标对象 --&
&propertyname="target"&
&refbean="sayServiceImpls"/&
&/property&
这里在引用bean的时候可能引入错误,可能会引入jdk动态代理的目标类,也有可能你的目标类中实现了某些接口,不符合cglib代理的理念;还有可能马虎出错的地方:
&!-- 真实主题
目标对象 --&
&beanid="sayServiceImpls"class="www.csdn.spring.advice.SayServiceImpls"&&/bean&
真实对象的id和class属性设置错误的时候也会出错。
这个问题很好解决,最关键的问题出在红色部分,原因是在spring相关配置文件中设置抽象主题的时候,既然是抽象主题就应该设置成接口,而不应该是实现类。比如下面的代码,注意红色部分:
&!--抽象主题
实现接口 --&
&propertyname="proxyInterfaces"&
&value&www.csdn.spring.proxy.advice.SayServiceImpl&/value&
&/property&
正确的写法应该是:
&!--抽象主题
实现接口 --&
&propertyname="proxyInterfaces"&
&value&www.csdn.spring.proxy.advice.SayService&/value&
&/property&
:Advice object [www.csdn.spring.proxy.advice.AuditableImpl@1f758500]
is neither a supported subinterface of [org.aopalliance.aop.Advice] nor an [org.springframework.aop.Advisor]
这个错误即红色部分提示的错误,不知道advice类型的异常,说白了就是编写的spring通知的错误,这种错误比较常见,也是出于马虎的错误,比如前者通知、后置通知、环绕通知、异常通知、引入通知等这几个通知中的任何一个通知类忘了写继承的父类;以下列出这几个通知的类编写所继承的类:
前置通知:
后置通知:
环绕通知:
异常通知:
引入通知:
像以上这个出现$ProxyXX cannot be cast to www.csdn.spring.proxy.advice.A什么代理不能强转成某一个类型的错误,一般都是在使用JDK动态代理或cglib代理的时候出现的错误,错误原因有:
1).JDK动态代理与cglib代理混淆,比如使用cglib代理时不能实现接口,你可能在使用的时候使用了cglib代理,但是却实现了接口,如果你在spring配置文件中使用aspectjs来进行通知,又想使用cglib接口那么你需要做的是目标类不实现接口,spring配置文件中配置aop的时候加上下面红色部分。
&aop:aspectj-autoproxyproxy-target-class="true"/&
2)同样是使用aspectjs通知的时候,尤其是使用引入通知的时候,一定不要忘了让引用通知的业务类加上注解@Aspect;还要注意的是你使用的引入目标类和其实现接口的类路径一定要正确,我这里就范了一个小错误,到错包的错:
package www.csdn.spring.proxy.advice.
import org.aspectj.lang.annotation.A
import org.aspectj.lang.annotation.DeclareP
publicclass AuditableService {
@DeclareParents(value="*..*Service*", defaultImpl = AuditableImpl.class)
public Auditableauditable;
我在使用Auditable接口的时候倒错了包,这里其实类都在同一包下,根本不用倒包,但是我从上一个包中复制代码的时候自动给我引入了上一个包的Auditable类;以后一定要注意了
这个错误顾名思义,这里已经提示的很清了,这里列出这个错误是对那些对pojo-xml配置通知不太熟悉的同学而言;这个错误就是在对应的spring配置文件中使用aop切面的时候忘写了一个ref熟悉的错,具体案例代码如下,注意下面的红色部分,错误就出在红色部分忘了写ref="adviceService":
&!--使用pojo-xml aspectjs配置自动代理 --&
&aop:config&
&!--配置切面 --&
&aop:aspect&
&!--引入通知 --&
&aop:declare-parentstypes-matching="*..*Service*"
implement-interface="www.csdn.spring.proxy.advice.aspectjs.pojoxml.Auditable"
default-impl="www.csdn.spring.proxy.advice.aspectjs.pojoxml.AuditableImpl"/&
&!--切面切入的位置切入点,可以同时写多个不同的切入点
&aop:pointcutexpression="execution(*
www.csdn..UserServiceImpl.save(..))"
id="myPcut"/&
&aop:pointcutexpression="execution(*
www.csdn..UserServiceImpl.update(..))"
id="myPcuts"/&
&!--织入通知 method:指明方法; pointcut-ref引入切入点
&aop:beforemethod="beforeMethod"pointcut-ref="myPcut"/&
&aop:aftermethod="afterMethod"pointcut-ref="myPcut"/&
&aop:aroundmethod="aroundMethod"pointcut-ref="myPcuts"/&
&/aop:aspect&
&/aop:config&
(hint: specify index/type/name arguments for simple parameters to avoid type ambiguities)
关键是蓝色部分,蓝色部分已经给出了提示:不匹配的构造器,这种错误出在spring配置中,使用namedParameterJdbcTemplate时出的错,错误出在下面:
&beanid="namedParameterJdbcTemplate"
class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"&
&propertyname="namedParameterJdbcTemplate"ref="namedParameterJdbcTemplate"/&
&beanid="deptDaoImpl"class="www.csdn.spring.jdbc.DeptDaoImpl"&
propertyname="namedParameterJdbcTemplate"ref="namedParameterJdbcTemplate"/&
由于对该类不理解或者复制时容易出这样的错误
这里根据提示说错误的原因是当数据库不能连接的时候,需要配置hibernate.dialect'就是hibernate配置的方言,原因出在驱动类的配置,比如:properties文件中的:hibernate.driverClassName=oracle.jdbc.driver.OracleDriver
这里如果写错了就会出现不能连接的情况,驱动的名字一定要正确,配置文件中的其他属性也一定要正确,据我本人测试如果在改配置文件中直接写的driverClassName=oracle.jdbc.driver.OracleDriver
在spring配置文件这样取值时:&property name="driverClassName" value="${driverClassName}" /&就会错误,但是如果这样写就对:&property name="driverClassName" value="${hibernate.driverClassName}" /&
解决方法:通常此类错误都是由于HQL语句写的不正确,例如from写成了form,或者set A = 1 and B = 2,其中set不同字段用逗号","分离而不是用and.总之仔细检查HQL语句,看看有没有语法错误即可.
org.springframework.beans.MethodInvocationException: Property 'cacheManager' neste
Caused by: org.springframework.beans.PropertyBatchUpdateE nested PropertyAccessExceptions (...
java开源框架集成常见错误之Context initialization failed
错误描述:Context initialization failedorg.springframework.beans.factory.BeanCreationException: Error cre...
org.springframework.beans.factory.UnsatisfiedDependencyException
1、错误描述org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with nam...
启动报如下异常:无法创建Mybatis的映射接口Bean类Related cause: org.springframework.beans.factory.UnsatisfiedDependencyE...
SSM中关于service中mapper注入失败org.springframework.beans.factory.UnsatisfiedDependencyException: Error crea
报错:org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name '...
org.springframework.beans.factory.UnsatisfiedDependencyException异常
这个异常是由于Spring在applicationContext.xml中bean的autowirte装配类型时出现问题。
在类型byName,byType,constructor三种类型中,可能会...
org.springframework.beans.factory.UnsatisfiedDependencyException解决方案
一、报错提示
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with n...
SpringMVC+Mybatis+Spring整合中org.springframework.beans.factory.BeanCreationException错误分析
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userControll...
关于Spring中org.springframework.beans.factory.UnsatisfiedDependencyException异常
关于Spring中org.springframework.beans.factory.UnsatisfiedDependencyException异常
这个异常是由于在applica...
spring 和mybatis整合时 使用context:property-placeholder载不进属性 还报org.springframework.beans.factory.BeanCrea
在spring核心配置文件(applicationContext.xml)中配置
问题:在spring 和mybatis组合时 使用该...
没有更多推荐了,Spring4 MVC Hibernate4集成
一、&&& 本文所用环境
Spring4.0.3.RELEASE
Hibernate4.3.5.Final
二、&&& 工程目录
三、&&& Maven添加依赖
用Maven创建项目,pom.xml如下:
&project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"&
&modelVersion&4.0.0&/modelVersion&
&groupId&com.lei.demo&/groupId&
&artifactId&spring3-mvc-hibernate&/artifactId&
&packaging&war&/packaging&
&version&0.0.1-SNAPSHOT&/version&
&name&spring3-mvc-hibernate Maven Webapp&/name&
&url&http://maven.apache.org&/url&
&dependencies&
&dependency&
&groupId&junit&/groupId&
&artifactId&junit&/artifactId&
&version&3.8.1&/version&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&javax.servlet&/groupId&
&artifactId&servlet-api&/artifactId&
&version&2.5&/version&
&/dependency&
&!-- Spring --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-core&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-web&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-webmvc&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-orm&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-tx&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-test&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-jdbc&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-expression&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-aop&/artifactId&
&version&4.0.3.RELEASE&/version&
&/dependency&
&!-- AspectJ --&
&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjrt&/artifactId&
&version&1.7.4&/version&
&/dependency&
&dependency&
&groupId&org.aspectj&/groupId&
&artifactId&aspectjweaver&/artifactId&
&version&1.7.4&/version&
&/dependency&
&!-- Mysql --&
&dependency&
&groupId&mysql&/groupId&
&artifactId&mysql-connector-java&/artifactId&
&version&5.1.29&/version&
&/dependency&
&!-- Hibernate4 --&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-core&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&!-- for JPA, use hibernate-entitymanager instead of hibernate-core --&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-entitymanager&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&!-- 以下可选 --&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-envers&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-c3p0&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-proxool&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-infinispan&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-ehcache&/artifactId&
&version&4.3.5.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate&/groupId&
&artifactId&hibernate-commons-annotations&/artifactId&
&version&4.0.4.Final&/version&
&/dependency&
&dependency&
&groupId&org.hibernate.javax.persistence&/groupId&
&artifactId&hibernate-jpa-2.1-api&/artifactId&
&version&1.0.0.Final&/version&
&/dependency&
&dependency&
&groupId&org.jboss&/groupId&
&artifactId&jandex&/artifactId&
&version&1.1.0.Final&/version&
&/dependency&
&!-- 为了让Hibernate使用代理模式,需要javassist --&
&dependency&
&groupId&org.javassist&/groupId&
&artifactId&javassist&/artifactId&
&version&3.18.1-GA&/version&
&/dependency&
&dependency&
&groupId&org.jboss.logging&/groupId&
&artifactId&jboss-logging&/artifactId&
&version&3.1.3.GA&/version&
&/dependency&
&dependency&
&groupId&org.jboss.spec.javax.annotation&/groupId&
&artifactId&jboss-annotations-api_1.2_spec&/artifactId&
&version&1.0.0.Final&/version&
&/dependency&
&dependency&
&groupId&antlr&/groupId&
&artifactId&antlr&/artifactId&
&version&2.7.7&/version&
&/dependency&
&dependency&
&groupId&dom4j&/groupId&
&artifactId&dom4j&/artifactId&
&version&1.6.1&/version&
&/dependency&
&dependency&
&groupId&commons-collections&/groupId&
&artifactId&commons-collections&/artifactId&
&version&3.1&/version&
&/dependency&
&dependency&
&groupId&commons-dbcp&/groupId&
&artifactId&commons-dbcp&/artifactId&
&version&1.4&/version&
&/dependency&
&dependency&
&groupId&commons-pool&/groupId&
&artifactId&commons-pool&/artifactId&
&version&1.4&/version&
&/dependency&
&dependency&
&groupId&javax.transaction&/groupId&
&artifactId&jta&/artifactId&
&version&1.1&/version&
&/dependency&
&dependency&
&groupId&org.slf4j&/groupId&
&artifactId&slf4j-api&/artifactId&
&version&1.6.1&/version&
&/dependency&
&dependency&
&groupId&org.hibernate.javax.persistence&/groupId&
&artifactId&hibernate-jpa-2.0-api&/artifactId&
&version&1.0.0.Final&/version&
&/dependency&
&!-- tomcat7.0.35 数据库连接池 --&
&dependency&
&groupId&org.apache.tomcat&/groupId&
&artifactId&tomcat-dbcp&/artifactId&
&version&7.0.35&/version&
&/dependency&
&/dependencies&
&finalName&spring3-mvc-hibernate&/finalName&
&/project&
四、&&& 新建数据库表
数据库采用Mysql,新建users表,我们演示操作此表
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` int(11) DEFAULT NULL,
`nice_name` varchar(32) DEFAULT NULL,
`user_name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
创建Entity类Users.java见下
package com.lei.demo.
import javax.persistence.*;
@Entity(name="users")
public class Users {
public Users(){
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
@Column(name="user_name",length=32)
private String user_
@Column(name="age")
@Column(name="nice_name",length=32)
private String nice_
public Integer getId() {
public void setId(Integer id) {
public String getUser_name() {
return user_
public void setUser_name(String user_name) {
this.user_name = user_
public Integer getAge() {
public void setAge(Integer age) {
this.age =
public String getNice_name() {
return nice_
public void setNice_name(String nice_name) {
this.nice_name = nice_
五、&&& 配置文件
1.&&&&&&& 首先看一下Web.xml
&?xml version="1.0" encoding="UTF-8"?&
&web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0"&
&display-name&Archetype Created Web Application&/display-name&
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:/spring-*.xml&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!-- 定义DispatcherServlet --&
&servlet-name&lei-dispatcher&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&!-- 默认/WEB-INF/[servlet名字]-servlet.xml加载上下文,
如果配置了contextConfigLocation参数,
将使用classpath:/lei-dispatcher-servlet.xml加载上下文
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:/lei-dispatcher-servlet.xml&/param-value&
&/init-param&
&load-on-startup&1&/load-on-startup&
&/servlet&
&!-- 拦截匹配的请求,这里所有请求采用名字为lei-dispatcher的DispatcherServlet处理 --&
&servlet-mapping&
&servlet-name&lei-dispatcher&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&/web-app&
2.&&&&&&& lei-dispatcher-servlet.xml
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
&!-- 启动自动扫描该包下所有的Bean(例如@Controller) --&
&context:component-scan base-package="com.lei.demo" /&
&!-- 定义视图解析器 --&
&bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix"&
&value&/WEB-INF/user/&/value&
&/property&
&property name="suffix"&
&value&.jsp&/value&
&/property&
3.&&&&&&& Spring-hibernate的整合
spring-hibernate.xml文件
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
&!-- Hibernate4 --&
&!-- 加载资源文件
其中包含变量信息,必须在Spring配置文件的最前面加载,即第一个加载--&
&context:property-placeholder location="classpath:persistence-mysql.properties" /&
&bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&
&property name="dataSource" ref="dataSource" /&
&property name="packagesToScan"&
&!-- 可以加多个包 --&
&value&com.lei.demo.entity&/value&
&/property&
&property name="hibernateProperties"&
&prop key="hibernate.hbm2ddl.auto"&${hibernate.hbm2ddl.auto}&/prop&
&prop key="hibernate.dialect"&${hibernate.dialect}&/prop&
&prop key="hibernate.show_sql"&${hibernate.show_sql}&/prop&
&prop key="hibernate.current_session_context_class"&thread&/prop& --&
&/property&
&!-- 数据库映射 --&
class="org.apache.tomcat.dbcp.dbcp.BasicDataSource" --&
class="org.springframework.jdbc.datasource.DriverManagerDataSource" --&
&bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&
&property name="driverClassName" value="${jdbc.driverClassName}" /&
&property name="url" value="${jdbc.url}" /&
&property name="username" value="${jdbc.user}" /&
&property name="password" value="${jdbc.pass}" /&
&!-- 配置Hibernate事务管理器 --&
&bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager"&
&property name="sessionFactory" ref="sessionFactory" /&
&!-- 配置事务异常封装 --&
&bean id="persistenceExceptionTranslationPostProcessor"
class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /&
声明式容器事务管理 ,transaction-manager指定事务管理器为transactionManager --&
&tx:advice id="txAdvice" transaction-manager="transactionManager"&
&tx:attributes&
&tx:method name="add*" propagation="REQUIRED" /&
&tx:method name="get*" propagation="REQUIRED" /&
&tx:method name="*" read-only="true" /&
&/tx:attributes&
&/tx:advice&
&aop:config expose-proxy="true"&
&!-- 只对业务逻辑层实施事务 --&
&aop:pointcut id="txPointcut" expression="execution(* com.lei.demo.service..*.*(..))" /&
&!-- Advisor定义,切入点和通知分别为txPointcut、txAdvice --&
&aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice"/&
&/aop:config&
事务采用tx:advice和aop:config的xml配置方式实现。事务的其他实现方式见
资源文件persistence-mysql.properties如下:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://yourServerIP:3306/yourDatabase?createDatabaseIfNotExist=true
jdbc.user=user
jdbc.pass=password
# hibernate.X
hibernate.connection.driverClass=org.gjt.mm.mysql.Driver
hibernate.connection.url=jdbc:mysql:// yourServerIP:3306/yourDatabase
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.connection.username=user
hibernate.connection.password=password
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create-drop
六、&&& DAO、Service
UsersDAO.java如下:
package com.lei.demo.
import java.util.L
import org.hibernate.Q
import org.hibernate.S
import org.hibernate.SessionF
import com.lei.demo.entity.U
public class UsersDAO {
private SessionFactory sessionF
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionF
public SessionFactory getSessionFactory() {
return sessionF
public List&Users& getAllUser(){
String hsql="from users";
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery(hsql);
return query.list();
UserService.java如下:
package com.lei.demo.
import com.lei.demo.dao.*;
public class UserService {
private UsersDAO userD
public int userCount(){
return userDao.getAllUser().size();
public UsersDAO getUserDao() {
return userD
public void setUserDao(UsersDAO userDao) {
this.userDao = userD
七、&&& 加载Bean配置文件
这里主要是加载上边的dao、service
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd"&
&bean id="usersDAO" class="com.lei.demo.dao.UsersDAO"&
&property name="sessionFactory" ref="sessionFactory"&&/property&
&bean id="userService" class="com.lei.demo.service.UserService"&
&property name="userDao" ref="usersDAO"&&/property&
当然你也可以不采用xml配置bean,采用注释加载bean,见、
八、&&& JSP页面和Controller
WEB-INF/user/users.jsp如下:
&%@ page language="java" contentType="text/ charset=UTF-8"
pageEncoding="UTF-8"%&
&!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&
&meta http-equiv="Content-Type" content="text/ charset=UTF-8"&
&title&Insert title here&/title&
&h1&Message : ${message}&/h1&
写Controller访问上边的jsp
package com.lei.demo.
import javax.annotation.R
import com.lei.demo.service.*;
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.servlet.ModelAndV
@Controller
@RequestMapping("/user")
public class UserController {
@Resource(name="userService")
private UserS
@RequestMapping(value="/manager",method=RequestMethod.GET)
public ModelAndView hello2(){
ModelAndView mv = new ModelAndView();
mv.addObject("message", "HelloMVC");
mv.setViewName("users");
@RequestMapping(value="/count",method=RequestMethod.GET)
public ModelAndView count(){
int c = service.userCount();
ModelAndView mv = new ModelAndView();
mv.addObject("message", c);
mv.setViewName("users");
上边的controller定义了两个路径
http://localhost:8080/spring4-mvc-hibernate4/user/manager
http://localhost:8080/spring4-mvc-hibernate4/user/count
以上两个路径都调用WEB-INF/user/users.jsp
参考资料《Spring3系列13-Controller和@RequestMapping》
九、&&& 运行结果
&源代码下载:
如果您喜欢此文,感觉对您工作有帮助,预期领导会给您涨工资,不妨小额赞助一下,让我有动力继续努力。
赞助方式1:打开支付宝App,使用&扫一扫&付款,付款码见下图,别忘了付款留言哦!
&赞助方式2:支付宝扫一下,领取我的的大红包,并花掉,双方受益
&赞助方式3:&如果您有微信钱包,请打开微信,使用&扫一扫&付款,付款码见下图
转载请注明出处!
阅读(...) 评论()

我要回帖

更多关于 javabean有什么作用 的文章

 

随机推荐