Mybatis标签的使用(依据官网整理)


所有的标签的详细使用参考官网https://mybatis.org/mybatis-3/zh/configuration.html
标签之间有写的顺序,一定注意

一、主配置文件

(1)configuration标签

configuration是配置的标签,mybatis中的所有的配置都在这个标签下面

(2)properties属性配置标签

properties下面可有多个propertie标签

  	propertie的属性:
  			name:属性名称   value属性值  -----> 可以使用${}在后面引用
  			resource属性:可以直接映入一个properties文件

(3)settings设置标签

settings标签下面可以有多个setting标签

  setting标签的属性:
  		name属性指定属性  value指定状态
  		(具体的属性取值可以看官方文档)

之前使用过开启缓存设置等等

(4)typeAliases别名设置

typeAliases标签下面可以有多个typeAliase标签或者package标签,可以为指定的路径别名(别名不区分大小写)

  typeAliase标签的属性:
  		alias指定别名  type指定全限定类名

  package标签:指定的包名下的文件全部以类名为别名
  		name属性指定包的路径

(5)typeHandlers类型处理器标签

typeHandlers标签下面可以有多个typeHandler标签和package 标签

  作用:
  		用于数据库类型和java指转化规则,定类型处理器处理的类

  		(官方给我们提供了很多类型处理器,可看官网,也可以自定义类型处理器)
  
  typeHandler属性:
  		handler指定使用的类型处理器  javaType指定要处理的java类型

   package 标签属性:
  		name指定包下自定义的类型处理器全部注册

(6)objectFactory对象工厂标签

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

  	objectFactory属性 type指定自定义的工厂

  	objectFactory标签下面可以通过<property name="属性" value="值"/>来设置工厂属性

(7)plugins插件标签

plugins标签下面可以有多个plugin标签,添加plugin标签,来实现插件的注册

  plugin标签的属性:interceptor属性来指定插件位置

  	(自定义插件内部已经定义好了要处理四大对象的哪个方法)
  
  plugin标签下面可以通过property 标签设置每一个插件的值

(8)environments环境标签设置

environments标签:

  environments标签下面可以有多个environment标签

  使用environment标签的default属性来指定使用哪个环境id

environment标签

  environments标签id属性:指定改环境的id值
  environment标签下面:
  			transactionManager进行事务设置
  			dataSource标签内设置数据库的链接信息

transactionManager事务管理器设置

  	type属性指定使用的事务管理器
  			JDBC 值(常用):使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域
  			MANAGED 值:这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期

  	下面可以写property 标签设置事务的属性的值	

dataSource标签

  	通过下面的<property>标签指定数据源信息 	

  	dataSource的type属性,可以指定选着数据源类型
  		type属性的取值:
  			POOLED	 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
  			UNPOOLED 没有使用池的思想(没有建立连接池容器,每次都会重新创建一个)。
  			JNDI	 采用服务器提供的JNDI技术实现,不同的服务器所能拿到DataSource是不一样。

(9)databaseIdProvider数据库厂商标识

MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。

  databaseIdProvider标签的type="DB_VENDOR"
  
  该标签下面可以通过property 来指定厂商的别名
  		<property name="Oracle" value="oracle" />

(10)mappers映射器

mappers标签就是用于指定映射文件的位置:

  mappers标签可以有多个<mapper>和<package >指定映射文件的位置
  
  <mapper>标签的属性:
  			resource:使用资源路径指定位置(多用于配置文件方式配置)
  			class:指定接口的名字(多用于注解方式配置)		
  			url:使用完全限定资源定位符指定映射文件位置

  <package >标签的属性:
  			name属性指定接口的位置(mybatis会根据接口的相应位置找resources下面的mapper位置)

二、映射配置文件

(1)mapper标签

映射文件下面的所有的配置都在mapper标签下面

  namespace属性:指定要对应的接口文件

(2)select标签

在这里插入图片描述

(3)insert, update 和 delete标签

在这里插入图片描述

(4) sql 与 include标签

sql标签:

  用于提取重复的sql片段,使用id属性指定该片段

include标签:

  	用于引入sql片段,使用refid属性指定引用sql片段的id
  	
  	该标签下面可以使用property标签为引用的sql片段赋值(解决参数不一致情况)

(5)#{}中的参数

mybatis处理存储过程的时候经常使用
在这里插入图片描述

(6)resultMap 结果集映射

当我们的javaBean类型和数据库类型不一致的时候,怎么实现映射???

  属性:id指定响应id,type指定JavaBean

  子标签:
  	<id property="Bean的属性名称" column="数据库列名称" />

    <result property="Bean的属性名称" column="数据库列名称" />

  	<association property="属性Bean名称" javaType="对应的Java类型">  处理一对一
  	
    <collection property="属性集合名称" ofType="集合中封装的类型">  处理一对多

    <association property="属性Bean名称" javaType="对应的Java类型"
  				 select="延迟加载方法" column="数据库列名称"/>  延迟加载

  	<constructor >用于在实例化类时,注入结果到构造方法中
  				<idArg> 参数;标记出作为 ID 的结果可以帮助提高整体性能
  				<arg>  将被注入到构造方法的一个普通结果
  	
  	<discriminator > 使用结果值来决定使用哪个 resultMap
  			<case > 基于某些值的结果映射
  			嵌套结果映射 – case 也是一个结果映射,因此具有相同的结构和元素;或者引用其它的结果映射
  	
  (还有很多具体的应用--->看光放文档)

(7)cache缓存

  • 基本上就是这样。这个简单语句的效果如下:
    • 映射语句文件中的所有 select 语句的结果将会被缓存。
    • 映射语句文件中的所有insert、update 和 delete 语句会刷新缓存。
    • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。
    • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
    • 缓存会保存列表或对象(无论查询方法返回哪种)的1024 个引用。
    • 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

缓存只作用于 cache 标签所在的映射文件中的语句
如果你混合使用 Java API 和 XML 映射文件,在共用接口中的语句将不会被默认缓存。
你需要使用 @CacheNamespaceRef 注解指定缓存作用域。

  1、引用自定义缓存或第三方缓存 
  		<cache type="com.domain.something.MyCustomCache"/>

  	2、可以配置缓存:
  		<cache type="com.domain.something.MyCustomCache">
  			<property name="cacheFile" value="/tmp/my-custom-cache.tmp"/>
  		</cache>
  	
  	3、缓存可以更改:
  			<cache  eviction="FIFO"  flushInterval="60000"  size="512" readOnly="true"/>

(8)动态SQL

  <if>
  <where>
  <foreach>
  <choose> (<when>、<otherwise>  )相当java的switch语句
  <trim >(<where>、<set>)
  <bind>
where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。
比如,和 where 元素等价的自定义 trim 元素为:
<trim prefix="WHERE" prefixOverrides="AND |OR ">
  ...
</trim>
set 元素可以用于动态包含需要更新的列,忽略其它不更新的列。
比如:
<update id="updateAuthorIfNecessary">
  update Author
    <set>
      <if test="username != null">username=#{username},</if>
      <if test="password != null">password=#{password},</if>
      <if test="email != null">email=#{email},</if>
      <if test="bio != null">bio=#{bio}</if>
    </set>
  where id=#{id}
</update>
bind 元素允许你在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文。
比如:
<select id="selectBlogsLike" resultType="Blog">
  <bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
  SELECT * FROM BLOG
  WHERE title LIKE #{pattern}
</select>

三、注解

注解进行开发,就是进行代替映射的xml文件,不写xml文件也可以进行使用Mybatis

  		@Insert:实现新增
  		@Update:实现更新
  		@Delete:实现删除
  		@Select:实现查询

  		@Result:实现结果集封装
  	    @Results:可以与@Result 一起使用,封装多个结果集
  					@Results({@Result(),@Result()})或  @Results(@Result())
  	    @ResultMap:实现引用@Results 定义的封装
  	    @One:实现一对一结果集封装
  	    @Many:实现一对多结果集封装

  	    @SelectProvider: 实现动态 SQL 映射
  				
  	    @CacheNamespace:实现注解二级缓存的使用
	//封装的User实体类中有一个List<Account>集合对象
	@Select("select * from user")
	@Results(id="userMap",
        value= {
            @Result(id=true,column="id",property="userId"),
            @Result(column="username",property="userName"),
            @Result(column="sex",property="userSex"),
            @Result(column="address",property="userAddress"),
            @Result(column="birthday",property="userBirthday"),
            @Result(column="id",property="accounts",many=@Many(select="com.itheima.dao.IAccountDao.findByUid",fetchType=FetchType.LAZY))
        })
  List<User> findAll();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小镇男孩~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值