springmvc整合mybatis遇到的问题

来源:互联网 发布:辐射4导入捏脸数据 编辑:程序博客网 时间:2024/06/06 06:31

1.  Invalid bean definition with name 'dataSource' defined in ServletContext resource [/WEB-INF/classes/spring/applicationContext-dao.xml]: Could not resolve placeholder 'jdbc.driver' in string value "${jdbc.driver}"  

  (1).在*.properties 属性文件中,名称是否与applicationcontext.xml 中的文件名称是否一致(发现一致)

  (2).是否有properties 属性文件,存在该名称jdbc.driver

  发现不一致 少了个j, 比较难找到

  dbc.driver=oracle.jdbc.driver.OracleDriver
  jdbc.url=jdbc:oracle:thin:@192.168.0.82:1521:devdb
  jdbc.username=sgbom2
  jdbc.password=sgbom2

2. Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/classes/spring/applicationContext-dao.xml]: Invocation of init method failed; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/mybatis/sqlMapConfig.xml]

先看看框架结构


  日志报错: applicationContext-dao.xml中引用的文件sqlMapConfig.xm 找不到

  在我的applicationContext-dao.xml文件中是这么引入的:

   <!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据源,使用dbcp -->
<property name="dataSource"  ref="dataSource"></property>
   <!-- 加载mybatis的配置文件 -->
   <property name="configLocation"  value="mybatis/sqlMapConfig.xml"></property> 
</bean>

  应该是   <property name="configLocation"  value="mybatis/sqlMapConfig.xml"></property>  这行错误

 name没错, value可能错误, 然后加上classpath:就成功了

 

  <!-- 配置sqlSessionFactory -->
<bean id="sqlSessionFactory"  class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置数据源,使用dbcp -->
<property name="dataSource"  ref="dataSource"></property>

   <!-- 加载mybatis的配置文件 -->
   <property name="configLocation"  value="classpath:mybatis/sqlMapConfig.xml"></property> 
</bean>


  进一步理解classpath: 

    classpath就是代表  /WEB-INF /classes/  这个路径

   

它是tomcat将javaweb项目编译后, src下面源码文件会生成classes文件夹, 我的项目结构中不仅有src根目录,还有config根目录, 所以classes显示的是所有的源文件根目录下的文件。


  

classpath 和 classpath* 区别:

classpath:只会到你的class路径中查找找文件;
classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

 

比如 resource1.jar中的package 'com.test.rs' 有一个 'jarAppcontext.xml' 文件,内容如下:

<bean name="ProcessorImplA" class="com.test.spring.di.ProcessorImplA" />

resource2.jar中的package 'com.test.rs' 也有一个 'jarAppcontext.xml' 文件,内容如下:

<bean id="ProcessorImplB" class="com.test.spring.di.ProcessorImplB" />

通过使用下面的代码则可以将两个jar包中的文件都加载进来

ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath*:com/test/rs/jarAppcontext.xml");

而如果写成下面的代码,就只能找到其中的一个xml文件(顺序取决于jar包的加载顺序)

ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:com/test/rs/jarAppcontext.xml");

 
0 0
原创粉丝点击