MyBatis

1.使用

  1. 配置总配置文件mybatis-config.xml,将数据库连接所需参数写入
  2. 创建一个接口interface1,定义一个抽象方法fun1。
  3. 创建一个mapper.xml实现接口interface1
  4. 在mapper.xml中实现方法fun1
  5. 在总配置文件mybatis-config.xml中注册mapper.xml
  6. 使用SqlSessionFactoryBuilder加载总配置文件mybatis-config.xml建造SqlSessionFactory,使用SqlSessionFactory生产SqlSession
  7. 此时生产出的SqlSession即为与数据库的连接对象,相当于jdbc中的connection。使用SqlSession获取接口interface1
  8. 使用接口对象interface1去调用其中被实现了的方法fun1

在这里插入图片描述

2.总配置文件

2.1properties

一般将数据源的信息单独放在一个properties文件中,然后用这个标签引入,在下面environment标签中,就可以用${}占位符快速获取数据源的信息

2.2settings

用来开启或关闭mybatis的一些特性,比如可以用<.settings name=“cacheEnabled” value=“true”/>来开启二级缓存;用<.settings name=“logImpl” value=“STDOUT_LOGGING”/>来开启日志

2.3typeAliases

在mapper.xml中需要使用parameterType和resultType属性来配置SQL语句的输入参数类型和输出参数类型,类必须要写上全限定名,可以用别名来简化书写,比如

<typeAliases>
    <typeAlias type="com.yogurt.po.Student" alias="student"/>
</typeAliases>

之后就可以在resultType上直接写student,mybatis会根据别名配置自动找到对应的类。
当然,如果想要一次性给某个包下的所有类设置别名,可以用如下的方式

<typeAliases>
   <package name="com.yogurt.po"/>
</typeAliases>

如此,指定包下的所有类,都会以简单类名的小写形式,作为它的别名

另外,对于基本的Java类型 -> 8大基本类型、包装类以及String类型,mybatis提供了默认的别名。基本数据类型为前面加_,如_int;包装类和String的别名为其简单类名的小写,如integer

2.4environments

用来配置数据源

2.5mappers

用来配置mapper.xml映射文件,这些xml文件里都是SQL语句

3.细节

3.1ParamType传入参数的处理

  • 无论传哪种参数给mybatis,他都会将参数转化为一个map
  1. 传入基本类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。

  2. 如果传入对象: 对象的属性名作为key,属性值作为value,生成的元素个数与属性个数相同。

  3. 如果传入List: "list"作为key,这个List是value (这类参数可以迭代,利用标签实现循环)

  4. 如果传入数组: "array"作为key,数组作为value(同上)

  5. 如果传入Map: 键值不变。

  • sql语句中若想获得该map中的value,可用#{key}
  • 为了方便的传送字段,我们可以将想传输的字段封装为一个map传给ParamType

3.2ResultMap的使用

在使用ResultType返回一个自定义的Javabean时,数据库中的字段可能会和javabean中字段不同。此时就需要用ResultMap代替ResultType了。

<resultMap id="UserMap" type="User">
   <!-- id为主键 -->
   <id column="id" property="id"/>
   <!-- column是数据库表的列名 , property是对应实体类的属性名 -->
   <result column="name" property="name"/>
   <result column="pwd" property="password"/>
</resultMap>

3.3多对一、一对多的处理

多对一:使用resultMap标签下的association标签去封装“一”

<resultMap id="StudentTeacher2" type="Student">
   <id property="id" column="sid"/>
   <result property="name" column="sname"/>
   <!--关联对象property 关联对象在Student实体类中的属性-->
   <association property="teacher" javaType="Teacher">
       <result property="name" column="tname"/>
   </association>
</resultMap>

一对多:使用resultMap标签下的collection标签去封装“多”

   <resultMap id="TeacherStudent" type="Teacher">
       <result  property="name" column="tname"/>
       <collection property="students" ofType="Student">
           <result property="id" column="sid" />
           <result property="name" column="sname" />
           <result property="tid" column="tid" />
       </collection>
   </resultMap>

3.4动态sql

主要为WHERE/SET+if来操作
其中where能智能省略and,set能智能省略逗号

3.5缓存

MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存

  • 默认情况下,只有一级缓存开启。
  1. 他是SqlSession级别的缓存(SqlSession可以用来执行已注册接口中的任一方法),即每个数据库连接对象都有自己的一个缓存,由该对象执行的查询操作都会先往自己的缓存中查询。
  2. 若该对象执行了删改类操作则会清空缓存
  • 二级缓存需要在Setting标签中开启和配置
  1. 他是基于SqlSessionFactory级别的缓存。该SqlSessionFactory创造的所有SqlSession的查询操作都会先往自己的二级缓存汇总查询(二级>一级)
  2. 当该接口的一个数据库连接对象sqlsession关闭后,该对象会将自己的一级缓存提交到接口的二级缓存中
  3. 任何sqlsession执行的增删改都会清空二级缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值