框架学习之mybatis整合spring

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的架包
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值