• mybatis 学习记录1


    起因

      以前刚学习java三大框架的时候持久层框架我是自学的是hibernate..感觉蛮好用的,so easy..后来大三实习公司用的是jpa(hibernate外包装一层)...再后来工作1年多用的是spring data(jpa外包装一层)...一直感觉蛮好用的,尤其是Spring data..爱不释手...感觉基本都不用写SQL...

      现在换了新公司,用的是mybatis..用了2个多月了...感觉..在一些情况下会比Spring data还要傻瓜式操作....有很多有趣的地方值得记录...

      这篇文章主要介绍我怎么把mybatis与Spring集成.

    配置

    我觉得XXX框架与Spring集成很多时候其实是一样的套路...本来XXX框架自己单独使用的时候基本都是配置1个自己的Factory加载自己的配置....生成一个核心的Facade类....然后与Spring集成的时候就是配置一个Spring的XXXFactoryBean.然后加载XXX配置....生成XXX框架的Factory...

    比如与Spring data或者hibernate集成的时候配置一个LocalContainerEntityManagerFactoryBean生成了entityManagerFactory,可以生成核心的Facade类EntityManager.

    mybatis似乎是配置SqlSessionFactoryBean可以生成SqlSessionFactory.然后生成核心的Facade类SqlSession...

    按照这个套路配置是这样的

     1 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:tx="http://www.springframework.org/schema/tx"
     2     xmlns:context="http://www.springframework.org/schema/context" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:repository="http://www.springframework.org/schema/data/repository"
     3     xmlns:jee="http://www.springframework.org/schema/jee"
     4     xsi:schemaLocation="
     5      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
     6      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
     7      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
     8      http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
     9      http://www.springframework.org/schema/data/repository http://www.springframework.org/schema/data/repository/spring-repository.xsd
    10      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd
    11 ">
    12     <!-- 基于注释的事务,当注释中发现@Transactional时,使用id为“transactionManager”的事务管理器 -->
    13     <!-- 如果没有设置transaction-manager的值,则spring以缺省默认的事务管理器来处理事务,默认事务管理器为第一个加载的事务管理器 -->
    14     <tx:annotation-driven transaction-manager="transactionManager" />
    15 
    16     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    17         <property name="driverClassName" value="${jdbc.driverClassName}" />
    18         <property name="url" value="${jdbc.url}" />
    19         <property name="username" value="${jdbc.username}" />
    20         <property name="password" value="${jdbc.password}" />
    21     </bean>
    22 
    23     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    24         <property name="dataSource" ref="dataSource" />
    25     </bean>
    26 
    27     <!-- 创建SqlSessionFactory,同时指定数据源 -->
    28     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    29         <property name="dataSource" ref="dataSource" />
    30         <property name="mapperLocations" value="classpath:mapper/*.xml"></property> 
    31          <property name="configLocation" value="classpath:spring/mybatis/mybatis-config.xml" />  
    32     </bean>
    33 
    34     <!-- Mapper接口所在包名,Spring会自动查找其下的Mapper -->
    35     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    36         <property name="basePackage" value="com.labofjet" />
    37     </bean>
    38 </beans>
    View Code

    然后把这个配置在spring自己的配置里引入就可以了.

    1 <import resource="classpath*:/spring/mybatis/mybatis-context.xml" />

    此外因为mybatis我用到了pagehelper...所以额外配置了mybatis-config..在里面配置pagehelper的interceptor...我觉得这个pagehelper的原理大概是mybatis发送SQL之前拦截并在外面嵌套一层加上分页条件吧.....

    这个配置(mybatis-config)是我百度的....

     1 <?xml version="1.0" encoding="UTF-8" ?>  
     2 <!DOCTYPE configuration  
     3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
     4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <!-- 配置管理器 -->
     6 <configuration>
     7     <plugins>
     8         <!-- com.github.pagehelper为PageHelper类所在包名 -->
     9         <plugin interceptor="com.github.pagehelper.PageHelper">
    10             <!-- 4.0.0以后版本可以不设置该参数 -->
    11             <property name="dialect" value="mysql" />
    12             <!-- 该参数默认为false -->
    13             <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
    14             <!-- 和startPage中的pageNum效果一样 -->
    15             <property name="offsetAsPageNum" value="true" />
    16             <!-- 该参数默认为false -->
    17             <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
    18             <property name="rowBoundsWithCount" value="false" />
    19             <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
    20             <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) -->
    21             <property name="pageSizeZero" value="false" />
    22             <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
    23             <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
    24             <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
    25             <property name="reasonable" value="false" />
    26             <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
    27             <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
    28             <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
    29             <!-- 不理解该含义的前提下,不要随便复制该配置 -->
    30             <!-- <property name="params" value="pageNum=start;pageSize=limit;" /> -->
    31             <!-- 支持通过Mapper接口参数来传递分页参数 -->
    32             <property name="supportMethodsArguments" value="true" />
    33             <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
    34             <property name="returnPageInfo" value="check" />
    35         </plugin>
    36     </plugins>
    37 </configuration>  
    View Code

    这样便整合完成了....

    实际使用效果:

  • 相关阅读:
    linux date使用
    SHELL输出带颜色字体
    vimrc配置
    你所不知道的C++
    temp
    说什么好呢3
    Extjs3 Combo实现百度搜索查询
    Extjs3笔记 fbar
    Extjs combo赋值与刷新的先后顺序
    sql中nvarchar(max)长度测试
  • 原文地址:https://www.cnblogs.com/abcwt112/p/6933405.html
Copyright © 2020-2023  润新知