spring整合mybatis读取不了properties属性,占位符不生效

配置项目过程中,习惯性的先把框架跑起来,后面在把修改的参数放到配置中。发现替换不成功,报错无效${username}

1.配置

<!-- 读入配置属性文件 -->
    <!-- 引入方式1:读数据库连接配置文件db.properties,如果需要配置多个则应使用locations属性,多个值用逗分隔 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >
        <property name="locations">
                <value>classpath:jdbc.properties</value>
        </property>
    </bean>
    <!--引入方式2 <context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/> -->


    <!-- 配置要扫描的包 -->
    <context:component-scan base-package="cn.hicard" />

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
       <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
        <property name="url" value="jdbc:mysql://192.168.1.110:3306/ecard_test?useUnicode=true&amp;characterEncoding=utf-8"></property> 
        <property name="username" value=" ${username}"></property> 
        <property name="password" value="123456"></property> 
    </bean>


 <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.hicard.dao" />
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean> 

2.原因

MapperScannerConfigurer 的加载是先于读取properties文件。导致占位符不生效。

解决方案:

1.修改 MapperScannerConfigurer 里面的sqlSessionFactorysqlSessionFactoryBeanName

2.上面的不行就直接把第二行属性<property name="sqlSessionFactory" ref="sqlSessionFactory" /> 干掉。
改为生成多一个mybatis配置的文件。

<!-- 2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource:引用数据源 MyBatis定义数据源,同意加载配置 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:spring/mybatis-config.xml" />
    </bean>

    <!-- 3. mybatis自动扫描加载Sql映射文件/接口 : MapperScannerConfigurer sqlSessionFactory 
        basePackage:指定sql映射文件/接口所在的包(自动扫描),spring自扫描所有dao包并把其下的所有mybatis接口文件装配入容器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.hicard.dao"></property>
    </bean>

mybatis-config.xml配置内容为mybatis常规配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
     <settings>  
        <!-- 配置数据库字段映射成实体字段规则, 数据字段是带下划线而实体是驼峰方式,配置此属性可转成驼峰方式 ,-->
        <setting name="mapUnderscoreToCamelCase" value="true" />  
        <!--  返回map类型字段值为空时也返回字段 -->
        <setting name="callSettersOnNulls" value="true"/>
    </settings>  

    <!-- 实体类,简称 -设置别名 -->
    <typeAliases>
        <typeAlias alias="User" type="cn.hicard.entity.User" />
    </typeAliases>
    <!-- 实体接口映射资源 -->
    <!-- 说明:如果xxMapper.xml配置文件放在和xxMapper.java统一目录下,mappers也可以省略,因为org.mybatis.spring.mapper.MapperFactoryBean默认会去查找与xxMapper.java相同目录和名称的xxMapper.xml -->
    <!-- <mappers>
        <mapper resource="classpath:mybatis/mapper/userMapper.xml" />
    </mappers> -->

</configuration>  

当然。如果你想指定放你的username.xml到指定的文件夹里面。在配置上加上,或者在mybatis-config.xml对应下面加,默认是不加就放到接口同级目录下。

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:spring/mybatis-config.xml" />
        <property name="mapperLocations">
            <list>
                <value>classpath:mybatis/mapper/*.xml</value>
            </list>
        </property>
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值