Spring整合MyBatis

在读取xml中找不到路径,读不到resource资源

并且在mybaits里面将mapper的设置的绝对路径改成相对路径,

<mapper resource="mapper/UserMapper.xml"/>

解决:在maven中配置

<build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build>

----------------------------------------------------------------------------------------------------------

1、什么是mybatis:是一个持久层框架

2、为什么使用mybatis(jdbc缺点):

  • jdbc数据库连接创建、释放频繁造成系统资源浪费;
  • sql语句在代码中硬编码,不利于维护;
  • 查询操作时,需手动封装数据到实体层,插入时需手动设置占位符。

3、mybatis整体思路:

①使用数据库连接池初始化连接资源

②将sql语句抽取到xml配置文件中

③使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

4、整体步骤:

  1. 将mybatis的dataSource交给IOC创建管理,使用第三方数据库连接代替mybatis的内置数据库连接池
  • 导入相关依赖
 <!--        mybatis相关-->
<dependency>
    <groupId>com.mchange</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.5.5</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.11</version>
</dependency>

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>2.1.0</version>
</dependency>
  • 书写实体层,dao层,相关mapper的xml

***mapper的路径与dao层路径一致,且为com/...

  • 书写jdbc的properties配置
  1. 将mybatis的SqlSessionFactory交给IOC创建管理,使用SqlSessionFactoryBean类代替项目中的MyBatisUtil工具类
  • 在spring,xml中配置dataSource和sessionFactory
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
</bean>

<!--mybatis 配置-->
<!-- 配置SessionFactory的Bean-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 注入数据源(连接池) jdbc 的connection需要使用-->
    <property name="dataSource" ref="dataSource"/>
    <!-- 指定MyBatis配置文件的位置 -->
    <property name="configLocation" value="classpath:mybatis.xml"/>
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--指定的是SqlSessionFactory对象的id-->
    <property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
    <!--指定包名,包名是dao接口所在的包名
        MapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行
        一次getMapper()方法,得到每个接口的dao对象
        创建好的dao对象放入到spring的容器中
        dao默认对象的名称:是接口名字的首字母小写
    -->
    <property name="basePackage" value="com.wx"/>
    <!--多个包-->
    <!--<property name="basePackage" value="com.md.dao,com.md.dao2"/>-->

</bean>
  • 配置mybatis.xml
<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

    <!--设置别名-->
    <typeAliases>
        <!--package:把包下面的所有类名作为别名name:实体类所在的包名-->
        <package name="com.wx.entity"/>
    </typeAliases>
    <!-- sql映射文件的位置 -->
    <mappers>
        <!--name是包名,这个包中所有mapper.xml一次加载-->
        <package name="com.wx.dao"/>
    </mappers>
</configuration>
  1. 将mybatis的接口代理方式生成的实现类,交给IOC容器创建并管理
  • 测试

QS:

Caused by: org.apache.ibatis.builder.BuilderException: Wrong namespace. Expected 'com.wx.dao.IProductDao' but found 'ProductMapper'.

原因:namespace的命名和mapper不一致 需要改成com.wx.dao.ICompanyDao

  1. 在测试类中,通过注解方式新建了对象,然后add方法测试通过后,findAll里面出现了这个错误:

java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyResul

然后显示

Cannot resolve com.mchange:c3p0:pom:0.9.5.5 failed to transfer from Central Repository: during a previous attempt. This failure was cached in the local repository and resolution is not reattempted until the update interval of central has elapsed or updates are forced. Original error: Could not transfer artifact com.mchange:c3p0:pom:0.9.5.5 from/to central (https://repo.maven.apache.org/maven2): transfer failed for https://repo.maven.apache.org/maven2/com/mchange/c3p0/0.9.5.5/c3p0-0.9.5.5.pom

尚未解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值