在读取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、整体步骤:
- 将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配置
- 将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>
- 将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
- 在测试类中,通过注解方式新建了对象,然后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
尚未解决