SSM+Maven项目中spring-mybatis.xml配置解析
我们在用框架的时候可能直接按照固定的模式来搭建项目,然后按照固定约定好的方式来解决问题。
比如我们处理前台的请求,只需要在对应的servlet路径上写上对应的value名称就ok。例如ajax请求的访问路径为:
http://localhost:8080/project/path/show然后我们根据路径就可以找到我们的servlet,处理请求,返回给前端处理结果。
其实在整个过程中spring框架为我们做了很多东西。包括项目启动之后通过标记注入bean,反射代理处理请求等。
可以了解我其他的博客:spring-mvc框架反射和动态代理处理请求
这篇我们主要介绍下spring-mybatis的配置信息。mybatis的配置主要是与数据的交互。建立dao层的访问数据库接口和
对应的xml文件的映射关系。先看看我们spring-mybatis的配置代码:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 导入db配置 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath:spring/db.properties" />
<!-- Druid -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 注册SqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mappers.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
<!-- <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property> -->
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qcbylearn.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
</beans>
然后我们来看下各个标签的具体作用。我们从下面向上看:
我们知道每个声明的bean都是在加载的时候变成一个类的实例对象。可以通过bean的id来给类一个别名。spring容器
通过id找到这个类,然后生成实例。class指定要实例的类。
上面我们标注的第一行生成了一个org.mybatis.spring.mapper.MapperScannerConfigurer类的对象,这个类是我们引
入的mybatis-spring.jar中的类,这个对象有两个作用。
1、扫描项目对应的dao层,第二行的basePackage约定了要扫描的dao层的路径。
2、通过约定生成一个SqlsessionFactory对象。这个对象在下面进行了实例化。
上面一直在说约定。解释一下约定的概念:以上面的例子来说:我们的property的name为basePackage,就会扫描后
面对应的dao层。这种约定是框架设定的。你给框架标签对应的name,框架给你对应的功能。我们开发网站的时候前
后台交互也是一种约定。你向网站发出请求,给出对应的请求路径和参数。网站给你对应的正确响应。
这里生成的sqlSessionFactory实例又是类org.mybatis.spring.SqlSessionFactoryBean类的实例。
这个实例是sqlSession的工厂,可以生成sqlSession对象。可以用来连接数据库和扫描对应的映射xml文件。
这个dataSource实例用阿里云的数据库连接池的接口。然后加载把数据库连接的文件对应的属性加载进去。
整个流程配置好了之后就能访问数据库并且返回对应的数据了。