框架学习之mybatis整合spring

mybatis核心原理

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

mybatis整合spring配置

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

application.xml配置

  1. 与spring整合hibernate相比,数据源不会改变配置,只是多加一个:
  2. 配置会话工厂

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation" value="classpath:mybatis/config.xml" /> 
        <property name="mapperLocations" value="classpath*:mybatis/mapper/**/*.xml" /> 
    bean>

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


    <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配置

namespace="com.bwf.term14.book.mapper.AdminMapper">

      "adminResultMap" type="Admin" >
            "AID" property="id" />
            "ALoginID" property="loginId" />
            "ALoginPsw" property="loginPsw" />
            "AName" property="name" />
      

        <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>

        "add">
            insert into admininfo values (null, #{admin.loginId}, #{admin.loginPsw}, #{admin.name})
           

  

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

id="header">
        select AID as id, ALoginID as loginId, ALoginPsw as loginPsw, AName as name from admininfo

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


"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"/>
    property="category" javaType="Category">
        <id property="id" column="CID"/>
        <result property="name" column="CName"/>
    
  

动态sql语句

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

声明式事务配置


    <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的架包

你可能感兴趣的:(框架)