Mybatis

MyBatis 框架概述
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。

ORM思想:Object Relational Mappging 对象关系映射
简单的说:
		就是把数据库表和实体类及实体类的属性对应起来
		让我们可以操作实体类就实现操作数据库表。

Mybatis简单入门

mybatis的环境搭建

	第一步:创建maven工程并导入坐标
	第二步:创建实体类和dao的接口
	第三步:创建Mybatis的主配置文件
					SqlMapConifg.xml
	第四步:创建映射配置文件
					UserDao.xml
<!-- config的约束 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration  
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- Mapper的约束 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper  
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
mybatis的入门案例
	第一步:读取配置文件
	第二步:创建SqlSessionFactory工厂。使用了构建者模式:隐藏创建对象的细节,使使用者可以直接拿到对象
	第三步:创建SqlSession。使用了工厂模式,解耦,降低类之间的依赖。
	第四步:创建Dao接口的代理对象。使用了代理模式,在不修改源码情况下增强类的方法。
	第五步:执行dao中的方法
	第六步:释放资源

	注意事项:
		不要忘记在映射配置中告知mybatis要封装到哪个实体类中
		配置的方式:指定实体类的全限定类名
	mybatis基于注解的入门案例:
		把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
		同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。

Mapper中CRUD操作的属性含义:

  • id:对应实体类中的方法名
  • parameterType:传入属性的类型
  • resultType:查询结果的类型
  • resultMap:引用的属性集

resultMap中属性含义:

  • id:结果集名称
  • type:对应的实体类
  • property:对应实体类中属性名称
  • column:对应数据库中属性名称

resultMap中含有的标签

<collection property="roles" ofType="role">
<!-- 用于多对一 -->
<association property="roles" JavaType="role">
<!-- 用于一对一 -->

SqlMapConfig中的标签:

  • properties中有resource和url属性,resource按照类路径的写法来写,url写法是:协议+主机+端口+URI
  • typeAlias:type属性实体类全限定类名,alias指定别名,package用于指定要配置别名的包

mybatis中的连接池
mybatis连接池提供了3种方式的配置:

  • 配置的位置:
    主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。

  • type属性的取值:

    • POOLED 采用传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现
    • UNPOOLED 采用传统的获取连接的方式,虽然也实现Javax.sql.DataSource接口,但是并没有使用池的思想。
    • JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到DataSource是不一样。
      注意:如果不是web或者maven的war工程,是不能使用的。tomcat服务器采用连接池就是dbcp连接池。

事务的自动提交:在创建SqlSession时,传入参数true即可设置为自动提交,默认为false。

Mybatis动态SQL标签

<if test="条件"></if>
<where></where>
<foreach></foreach>
<!-- 用于遍历集合 collection代表要遍历的元素,open代表语句的开始部分,close代表结束部分,item代表遍历集合的每个元素,seperator代表分隔符 -->

<sql></sql>
<!-- 抽取语句重复部分 -->

延迟加载
在真正使用数据时才发起查询,不用的时候不查询。按需加载(懒加载)
立即加载
不管用不用,只要一调用方法,马上发起查询。

Mybatis中的一级缓存和二级缓存

一级缓存:
	它指的是Mybatis中SqlSession对象的缓存。
	当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
	该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中
	查询是否有,有的话直接拿出来用。
	当SqlSession对象消失时,mybatis的一级缓存也就消失了。
	一级缓存是 SqlSession范围的缓存,当调用SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。


二级缓存:
	它指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。
	二级缓存的使用步骤:
		第一步:让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
		第二步:让当前的映射文件支持二级缓存(在IUserDao.xml中配置)
		第三步:让当前的操作支持二级缓存(在select标签中配置)

mybatis注解开发中的注解

  • @Select@Insert()@Delete()@Update() CRUD的注解
  • @Results结果集,属性id为结果集名称,属性value存有属性对应关系
  • @one表示一对一的关系
  • @many表示一对多的关系
  • @CacheNamespace将属性blocking设置为true即可使用二级缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

P_xuebuhui

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

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

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

打赏作者

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

抵扣说明:

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

余额充值