首页 > 其他分享 >MyBatis 学习(二)

MyBatis 学习(二)

时间:2023-05-17 22:12:22浏览次数:39  
标签:Product 数据库 配置 别名 学习 实例 MyBatis

一、XML 配置文件

1、XML 映射配置文件的结构

configuration 配置

  properties 属性

  settings 设置

  typeAliases 类型别名

  typeHandlers 类型处理器

  objectFactory 对象工厂

  plugins 插件

  environments 环境

    environment 环境变量

      transactionManager 事务管理器

      dataSource 数据源

  databaseIdProvider 数据库厂商标识

  mappers 映射器

2、properties 属性

  属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。

<!--properties属性-->
    <properties resource="config.properties">
        <property name="username" value="root"/>
        <property name="password" value="admin"/>
    </properties>

  然后其中的属性就可以在整个配置文件中被用来替换需要动态配置的属性值。

<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

3、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"/>

4、typeAliases 类型别名

  类型别名就是给 java 类型取一个短的别名,只与 xml 配置有关,意义是减少类完全限定名的冗余。也就是说可以用一个短的别名来代替一个长的类完全限定名,为了方便。

<!--配置别名-->
<typeAliases>
    <typeAlias alias="Product" type="com.mybatis.pojo.Product"/>
</typeAliases>

  当这样配置时,Product可以用在任何使用com.mybatis.pojo.Product的地方。例如在mapper文件中:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper
 3         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 5 
 6 <mapper namespace="com.mybatis.mapper.ProductMapper">
 7     <insert id="addProduct" parameterType="Product">
 8       INSERT INTO product (name, price) VALUES (#{name}, #{price})
 9     </insert>
10 </mapper>

  本来 parameterType 后面应该写 com.mybatis.pojo.Product 类完全限定名的,现在可以用 Product 别名代替。

  也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean。

<!--配置别名-->
<typeAliases>
    <package name="com.mybatis.pojo"/>
</typeAliases>

  现在写mapper文件时也可以直接用 Product来代替 com.mybatis.pojo.Product,因为 Mybatis 会自动搜索 com.mybatis.pojo 下的 Product 类

  一些常见的 Java 类型内建的相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。

5、typeHandlers 类型处理器

 

6、对象工厂(objectFactory)

  MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。如果想覆盖对象工厂的默认行为,则可以通过创建自己的对象工厂来实现。

 

7、插件(plugins)

 

8、配置环境(environments)

  MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者共享相同 Schema 的多个生产数据库, 想使用相同的 SQL 映射。许多类似的用例。

不过要记住:尽管可以配置多个环境,每个 SqlSessionFactory 实例只能选择其一。

所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:

 

    <!--配置别名-->
    <typeAliases>
        <package name="com.mybatis.pojo"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <!--事务管理:JDBC的事务管理机制-->
            <transactionManager type="JDBC"/>
            <!--配置连接池:数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="admin"/>
            </dataSource>
        </environment>
    </environments>

 

9、databaseIdProvider

 

10、映射器(mappers)

  需要告诉 MyBatis 到哪里去找到SQL映射语句。可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。

<!-- 使用相对于类路径的资源引用 -->
<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>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

 

标签:Product,数据库,配置,别名,学习,实例,MyBatis
From: https://www.cnblogs.com/zt19994/p/8554235.html

相关文章

  • bootstrap 学习(一)
    一、Bootstrap简介1、什么是BootstrapBootstrap是一个用于快速开发web应用程序和网站的开源的UI前端框架。Bootstrp是基于HTML、CSS、JS的。2、Bootstrap的好处移动设备优先:自Bootstrap3起,框架包含了贯穿于整个库的移动设备优先的样式。浏览器支持:所有的主流......
  • 考研学习 | 每日回顾(2023年5月15日)
    昨天的考研数学笔记常用的极限两原则:拆分之后的所有式子都要有极限且只能在乘除法之间使用等价无穷小替换如果一个部分无法直接被化简计算,就尝试整体代换反三角函数arcsinx和arccosx的关系遇到三角函数问题时要知道:不同的三角函数之间可以相互转换......
  • 考研学习 | 每日回顾(2023年5月17日)
    昨天的考研数学笔记求解偏导数的时候一定要清楚当前谁是自变量:文内有小技巧求偏导时,函数的第一部分变量用1表示,第二部分变量用2表示......
  • 考研学习 | 每日回顾(2023年5月13日)
    昨天的考研数学笔记只对x求偏导时,y的值可以提前代入y不一定就是x的函数......
  • Hive学习之抽样(Sampling)
    当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。    Hive支持桶表抽样和块抽样,下面分别学习。所谓桶表指的是在创建表时使用......
  • 2022-2023年大二上mysql学习汇总
    CRUD等操作(DDL、DML、DQL)权限操作:createuser用户名@"localhost或%" identifiedby'密码'  showgrantsfor用户名@主机名 grant权限列表(all/insert/delete/select等)on库名(*).表名(*)to用户名@主机名  remove与授予一样函数:内置(后面加as......
  • Java学习笔记(十三)
    1.Java异常处理机制异常的处理机制一:try-catch-finally格式:异常的处理机制二:throws用于方法的声明中,用于向外部抛出异常。2.运行时异常与一般异常有何异同? 3.说几个你常见到的异常ArrayIndexOutOfBoundsException数组索引越界异常NullPointerException空指针异常A......
  • 动手学深度学习(三) 多层感知机
    多层感知机多层感知机的基本知识使用多层感知机图像分类的从零开始的实现使用pytorch的简洁实现多层感知机的基本知识深度学习主要关注多层模型。在这里,我们将以多层感知机(multilayerperceptron,MLP)为例,介绍多层神经网络的概念。隐藏层下图展示了一个多层感知机的神经网络图,它含有......
  • 动手学深度学习(十二) NLP循环神经网络进阶
    GRURNN存在的问题:梯度较容易出现衰减或爆炸(BPTT)⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系RNN:ImageNameGRU:ImageName•重置⻔有助于捕捉时间序列⾥短期的依赖关系;•更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。载入数据集importos......
  • 文本分类(上)- 基于传统机器学习方法进行文本分类
    简介自己由于最近参加了一个比赛“达观杯”文本智能处理挑战赛,上一周主要在做这一个比赛,看了一写论文和资料,github上搜刮下。。感觉一下子接触的知识很多,自己乘热打铁整理下吧。接着上一篇文章20newsgroups数据介绍以及文本分类实例,我们继续探讨下文本分类方法。文本分类作为NLP领......