Mybatis基础与全局配置文件

1. Mybatis 使用基本流程

  • 根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象

    String resource = "org/mybatis/example/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlFactory = new SqlSessionFactoryBuilder().build(inputStream);
    

    这里是根据xml配置文件创建SqlSessionFactory 工厂的,也可以使用纯java的方式创建

  • 全局配置文件中有数据源和事务配置

  • 编写sql映射文件,配置每一个sql,以及sql的封装规则

  • 将sql配置文件注册到全局配置文件中

  • 从SqlSessionFactory 工厂获取到sqlSession对象,使用它来执行增删改查(有两种方式)

2. 实现增删改查的两种方式

  1. 直接使用sqlSession 对象
SqlSession session = sqlSessionFactory.openSession();
try {
  Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
} finally {
  session.close();
}

其中"org.mybatis.example.BlogMapper.selectBlog" 是sql映射文件的 namespace + id,第二个参数是查询语句参数

  1. 使用接口的方式
SqlSession session = sqlSessionFactory.openSession();
try {
  BlogMapper mapper = session.getMapper(BlogMapper.class);
  Blog blog = mapper.selectBlog(101);
} finally {
  session.close();
}

其中BlogMapper.class 是与sql映射文件对应的接口

3. 全局xml配置文件

  1. settings

这是mybatis中极为重要的调整设置,它们会改变mybatis的运行时行为。下面是一个完整的settings 元素示例:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
  1. typeAliases

类型别名是为java类型设置一个短的名字。它只和xml配置有关,存在的意义仅在于减少完全限定类名的冗余。例如:

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

也可以指定一个包名:

<typeAliases>
  <package name="domain.blog"/>
</typeAliases>

这样,“domain.blog” 包下所有类的别名为首字母小写的非限定类名。

  1. typeHandlers

typeHandlers 用于指定java 类型与数据库类型之间转换的处理器。mybatis 提供了很多处理器,也可以自定义。

  1. plugins

    mybatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,mybatis允许使用插件来拦截的方法调用包括:

    • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
    • ParameterHandler (getParameterObject, setParameters)
    • ResultSetHandler (handleResultSets, handleOutputParameters)
    • StatementHandler (prepare, parameterize, batch, update, query)
  2. environments

    • mybatis 可以配置成适应多种环境,不过要记住:尽管可以配置多个环境,每个SqlSessionFactory 实例只能选择其一。所以,如果要连接两个数据库,就必须创建两个SqlSessionFactory 实例,每个数据库对应一个。即,每个数据库对应一个SqlSessionFactory 实例

    • 每个环境配置必须要有transactionManager 和 dataSource 标签。一个环境配置实例如下:

      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC">
            <property name="..." value="..."/>
          </transactionManager>
          <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      
  3. databaseIdProvider

  • mybatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的databaseId 属性。mybatis会加载不带databaseId 属性和带有匹配当前数据库databaseId 属性的所有语句。如果同时找到带有databaseId 和不带有databaseId 属性的相同语句,则后者会被抛弃。为支持多厂商特性只要像下面这样,在mybatis-config.xml 文件中加入databaseIdProvider 即可:

    <databaseIdProvider type="DB_VENDOR" />
    

    ​ “DB_VENDOR” 是mybatis 自带的别名。

  • 厂商别名配置

    <databaseIdProvider type="DB_VENDOR">
      <property name="SQL Server" value="sqlserver"/>
      <property name="DB2" value="db2"/>        
      <property name="Oracle" value="oracle" />
    </databaseIdProvider>
    

    其中 name 属性表示厂商默认databaseId , value 属性表示配置的别名。

  1. mappers

mapper 标签用于告诉mybatis 映射文件在哪里,有如下几种方式:

  • 相对于类路径的资源引用

    <mappers>
      <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
      <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
      <mapper resource="org/mybatis/builder/PostMapper.xml"/>
    </mappers>
    
  • 使用完全限定资源定位符(URL),此种方式一般用于网络映射文件或磁盘映射文件的定位

    <mappers>
      <mapper url="file:///var/mappers/AuthorMapper.xml"/>
      <mapper url="file:///var/mappers/BlogMapper.xml"/>
      <mapper url="file:///var/mappers/PostMapper.xml"/>
    </mappers>
    
  • 使用 class 属性实现接口注册

    <mappers>
      <mapper class="org.mybatis.builder.AuthorMapper"/>
      <mapper class="org.mybatis.builder.BlogMapper"/>
      <mapper class="org.mybatis.builder.PostMapper"/>
    </mappers>
    

    这种情况下,映射文件要和接口文件同名且处于同一目录下,或者不要映射文件直接在接口上使用注解开发。

  • 使用 package 属性将包内的接口全部注册为映射器

    <mappers>
      <package name="org.mybatis.builder"/>
    </mappers>
    

    这种情况下的规则同 class。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值