mybatis在spring里的配置

来源:互联网 发布:当数据库被破坏后 编辑:程序博客网 时间:2024/05/19 17:56

1、在 MyBatis-spring 中,session工厂则使用 SqlSessionFactoryBean 来创建,SqlSessionFactoryBean 实现了 Spring 的 FactoryBean 接口,由 Spring 最终创建的 bean 不是 SqlSessionFactoryBean 本身,而是工厂类的 getObject()返回的方法的结果。

在一般的 MyBatis-Spring 用法中, 你不需要直接使用 SqlSessionFactoryBean 或者 和其对 应的 SqlSessionFactory。

相反,session 工厂将会被注入到 MapperFactoryBean 或其它扩 展了 SqlSessionDaoSupport 的 DAO中。

它有一下几个属性:

1)dataSource      该属性必须配置,多数据源时会有多个dataSource,同时也需要配置多个sqlSessionFactory来对应。

2)configLocation 它是用来指定 MyBatis 的 XML 配置文件路径的。当SqlSessionFactoryBean提供的配置不能满足使用时,你可以使用mybatis-config.xml配置文件配置其他属性,然后通过configLocation属性指定该配置的路径,SqlSessionFactoryBean会使用该配置文件创建Configuration。

3)mapperLocations  sqlSessionFactory会自动扫描该路径下的所有文件并解析。
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="multipleDatasSource" /><property name="configLocation" value="classpath:mybatis.xml" /><property name="mapperLocations" value="classpath*:sqlmap/**/*.xml" /></bean>

4)plugins  可以配置MyBatis的拦截器,拦截器的配置顺序会影响拦截器的执行顺序。
从上往下的拦截器,实际的执行顺序是这样,第一个拦截器会最后执行,最后一个会首先执行。
然后出拦截器的顺序和配置的顺序一致,第一个最先返回,最后一个最后返回。


2、MapperScannerConfigurer 配置    它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
MyBatis-Spring 提供了一个动态代理的实现:MapperFactoryBean。这个类 可以让你直接注入数据映射器接口到你的 service 层 bean 中。你不需要编写任何 DAO 实现的代码,因为 MyBatis-Spring 将会为你创建代理。

basePackage属性   必须要配的属性。
sqlSessionFactoryBeanName属性  只有当你配置多数据源的时候,这时会有多个sqlSessionFactory,你就需要通过该属性来指定哪一个sqlSessionFactory


3、<context:component-scan>有一个use-default-filters属性,该属性默认为true,这就意味着会扫描指定包下的全部的标有@Component的类,并注册成bean.也就是@Component的子注解@Service,@Repository等。这样粒度有点大,将该属性改为false,这样只会扫描指定包下的指定注解。


4、mybatis只是一个半自动化的ORM实现,需要我们自己写sql,而不像hibernate那样,直接定义好实体与数据表的映射就行。

参考 mybatis开发Dao的方法


5、typeAliases属性
resultType属性的值为com.yu.model.User,表示这个查询返回的类型为com.yu.model.User类型。

<select id="findUserById" resultType="com.yu.model.User" parameterType="long">          select * from t_user where id = #{id}</select>
如果有很多种类型的话,每次都得把类型的全路径写上,感觉就很费事。所以就可以用mybatis提供的typeAliases来进行别名配置。
<typeAliases>        <typeAlias type="com.yu.model.User" alias="User" />      <typeAlias type="com.yu.model.Org" alias="Org"/></typeAliases>
上面的配置可以改为
<select id="findUserById" resultType="User" parameterType="long">          select * from t_user where id = #{id}</select>

6、resultMap属性:type为java实体类;id为此resultMap的标识。

 id – ID 结果,将结果集标记为ID,以方便全局调用
 result – 反射到JavaBean 属性的普通结果

 association – 复杂类型的结合;多个结果合成的类型

<resultMap id="fieldMapper" type="com.cmcc.healthcare.pojo.hars.Appointmentrecord"><id property="id" column="ID" /><!----><result property="hospitaluid" column="HOSPITALUID" /><!--医院主键id--><association property="hospitalinfo" resultMap="hospitalinfoMap" /><!--医院信息--></resultMap>



0 0