框架学习之mybatis整合spring

来源:互联网 发布:查看php fpm端口号 编辑:程序博客网 时间:2024/05/29 18:23

mybatis核心原理

mybatis是一个持久层的应用框架,它省略了数据库操作dao层的实现类,利用动态代理的原理生成我们需要的实现类操作数据库,并且可以定制化sql语句,不存在很繁琐的注解配置

mybatis整合spring配置

导入整合的架包(maven搭建项目实现导包)

application.xml配置

  1. 与spring整合hibernate相比,数据源不会改变配置,只是多加一个:
    <property name="validationQuery" value="select now();" />
  2. 配置会话工厂
<!-- 由mybatis提供的整合Spring的,MyBatis自己的SqlSessionFactory的实现 -->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="configLocation" value="classpath:mybatis/config.xml" /> <!-- 加载MyBatis的配置文件(settings、typeAliases) -->        <property name="mapperLocations" value="classpath*:mybatis/mapper/**/*.xml" /> <!-- 加载MyBatis的Mapper映射文件 -->    </bean>

说明:这是mybatis自己提供的会话工厂实现类,依赖于数据源,依赖的其他属性是要去扫描所有与mybatis配置相关的文件(config.xml和XxxMapper.xml)
3. 配置spring将Mapper接口放入容器的条件

<!-- 基于sqlSessionFactory对象,分析出xxxMapper.xml文件,根据指定的XxxMaper接口,反射动态生成XXXMapper接口的实例,并放入容器中 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />        <property name="basePackage" value="com.bwf.term14.book.mapper" />    </bean>

说明:依赖于会话工厂,需要配置需要实现的具体的接口路径

config.xml配置

基于mybatis的实体类配置:

<configuration>    <typeAliases>        <package name="实体类的包名路径" />    </typeAliases></configuration>

说明:这些实体类的别名采用默认的。例如,包名 . Book–Book

XxxMapper.xml配置

<mapper namespace="com.bwf.term14.book.mapper.AdminMapper">      <resultMap id="adminResultMap" type="Admin" >            <id column="AID" property="id" />            <result column="ALoginID" property="loginId" />            <result column="ALoginPsw" property="loginPsw" />            <result column="AName" property="name" />      </resultMap>        <select id="getAdminByLoginId"  resultMap="adminResultMap">            select AID , ALoginID, ALoginPsw, AName from admininfo where ALoginID = #{loginId}        </select>        <select id="getAdminNameDetails"  resultType="map">            select CHAR_LENGTH(AName) as nameLength, count(*) as adminCount, count(char_length(ALoginID)) as loginidLength from admininfo group by CHAR_LENGTH(AName) order by nameLength desc        </select>        <select id="getAllAdmins" resultType="Admin">            select AID id, ALoginID loginId, ALoginPsw loginPsw, AName name from admininfo        </select>        <insert id="add">            insert into admininfo values (null, #{admin.loginId}, #{admin.loginPsw}, #{admin.name})        </insert>     </mapper>

说明:
1. 命名空间就是借口类的路径
2. 在里面配置数据库操作的数据库增删改查标签
3. 可以使用include标签,提高复用性:

<sql id="header">        select AID as id, ALoginID as loginId, ALoginPsw as loginPsw, AName as name from admininfo</sql><select id="getAdminByLoginId" resultType="Admin">  <include refid="header"/> where ALoginID = #{loginId}</select>

说明:
a. getAdminByLoginId是具体的方法名,Admin是对应的返回类型
b. “#{loginId}”表示传递的参数
c. 如果借口传递的是引用,则需要注解声明:@param(“…”),在xml中可以当作对象来使用
d. resultType是在数据库表和实体类的字段名对应上了才会有用,否则返回的数据将是null;这个时候就需要用resultMap来作映射,就像hibernate注解一样,只不过在xml文件中配置:

<select id="getBooks" resultMap="bookResultMap">    ......</select><resultMap type="Book" id="bookResultMap">    <id property="id" column="BID"/>(配主键用id)    <result property="title" column="BTitle"/>    <result property="author" column="BAuthor"/>    <result property="price" column="BPrice"/>    <result property="publisher" column="BPublisher"/>    <result property="photo" column="BPhoto"/>    <association property="category" javaType="Category">        <id property="id" column="CID"/>        <result property="name" column="CName"/>    </association>  </resultMap>

动态sql语句

在进行增删改查的标签配置下还可以动态生成sql语句,具体的标签使用这里不再赘述,百度搜索很多的

声明式事务配置

<!-- 在整合MyBatis时,使用spring-jdbc.jar中的基于JDBC普通数据源的事务管理器 -->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>

说明:其他的配置同spring整合hibernate一致,需要配置具体的通知(连接点)、切入点,具体请参照:声明式事务

缓存

同样的,基于mybatis持久层框架的缓存也是有两个级别的:
  1. SqlSession级别的,针对于同一次会话缓存有效
  2. SqlSessionFactory级别的,如果要启用需要在对应的XxxMapper.xml文件中配置<cache />,同时导入相应整合的cache的架包
原创粉丝点击