java框架—Mybatis

MyBatis框架
	ORM(object Relational Mapping)对象关系映射,针对持久层的理论思想,建立数据库与实体类之间的关系,从而达到操作实体类简介对数据库进行操作。
	MyBatis是基于持久层的框架,内部封装了jdbc,将SQL语句写在xml文件中,提供映射标签,使得对象可以与数据库的ORM字段产生关系映射。
	MyBatis开发步骤:创建数据库以及表,创建java项目引入MyBatis坐标,创建实体类,编写映射文件,编写配置文件,编写测试类。
	配置文件概述:SqlMapConfig.xml配置文件(Mybatis的核心配置文件,他主要进行了数据库的整体配置)、PersonMapper.xml配置文件(namespace可以随意定义作为sql映射的一个部分、id可以作为sql语句的唯一标识)
	MyBatis执行增删改查的操作流程:加载核心配置文件,获取SqlSessionFactory工厂对象,获取SqlSession对象,执行sql语句,提交事务,关闭资源。
	MyBatis配置文件()层级关系:属性properties、设置settings、类型别名typeAlises、类型处理器typeHandler、对象工厂objectFactory、插件plugins、环境配置envirments(环境变量environment(事务管理器transactionFactory、数据源dataSource))、数据库厂商标识datsbaseldProvider、映射器mappers。
	Environments环境变量标签:事务管理器transactionManager(JDBC直接使用JDBC的提交与回滚,MANAGED让容器来管理整个生命周期)、数据源DataSource(UNPOOLED打开和关闭数据源的请求连接,POOLED数据源利用池的概念将JDBC将连接对象组织起来、JNDI可以实现在容器集中配置或者文件外配置数据源)
	Mappers标签:用于加载映射文件
	Properties标签:将数据源的配置信息抽取成一个独立的properties文件
	typeAlises:给java类型配置一个更短的名字
	MyBatis核心API的概述:Resources加载MyBatis的必备文件;SqlSessionFactoryBuilder利用指定的Resources资源将配置信息加载到内存中还会加载大量MyBatis配置文件中的配置信息;SqlSessionFactory是一个工厂对象它的创建与销毁都极其消耗资源,因此一个工程中只存在一个;SqlSession是MyBatis的一个核心对象,可以基于这个对象对数据库进行增删改查的操作。
	MyBatis的执行原理:Resources加载mybatis全局配置文件(数据源、mapper映射文件等),解析配置文件,MyBatis基于XML配置文件生成configuration和MappedStatement(包括映射参数配置、动态SQL语句、结果映射配置)对应CRUD等标签项;SqlSessionFactoryBuilder通过configuration对象生成SqlSessionFactory用来开启SqlSession;SqlSession对象完成与数据库的交互(用户程序调用MyBatis的api接口层中的方法;SqlSession通过调用api的statement ID找到对应的MappedStatement对象;通过Executor(负责动态SQL的生成与查询缓存的维护)将MappedStatement对象进行解析,sql参数转化、动态SQL拼接、生成jdbc Statement对象;jdbc执行sql;借助MappedStatement中的结果映射关系将结果转化为HashMap、JavaBean等存储结构并返回)。
	MyBatis基于接口代理的方式实现DAO层开发:代理方法只用编写mapper接口,MyBatis会动态实现类的对象,mapper.xml中的namespace一定要和mapper的接口名相同,mapper接口中的方法名需要和mapper.xml映射文件中的每一个statement的id相同,mapper接口中定义的参数类型要和mapper.xml映射文件中每个sql的parameterType的类型保持一致,mapper中输出返回值的参数类型需要和mapper.xml硬着文件中每个sql的resultType对应类型一致。
	ResultMap标签:数据库结果集中列名与封装类中的属性名不匹配时可以通过使用ResultMap手动创建关系。
	MyBatis中多参数处理:使用参数索引即name=#{参数索引},使用map中的key即name=#{map的key},使用注解即@param(“定义参数在sql中的名称”),使用自身封装的对象即id=#{id}
	模糊查询:占位符方式like#{name},字符串拼接方式like“%”#{name}“%”,$的拼接方式like‘%#{vule}’,使用函数拼接‘%’,#{name},‘%’
	#{}与${}的区别:#{}可以实现preparedstatement向占位符中设置值,自动进行java类型与jdbc类型的转换,还可以有效防止sql注入,还可以接受简单类型值或者pojo属性值;${}可以将parameterType中传入的值拼接在sql中并且不进行jdbc类型转换,会出现sql注入问题,也可以接受简单类型值或者pojo值,如果传入是简单值${}中可以使用任意名称。
	主键处理:向数据库插入一条数据以后立即拿到该条数据在数据库中的主键(useGenerateKeys,只适用于MySQL数据库,对于Oracle数据库不适用;selectKey标签)
	Sql片段:抽取重复的SQL语句使用时用include引用即可。
	Plugins分页查询:使用分页助手PageHelper依赖	
	动态sql:<if><where>如果前面的if条件没有成功就不会与后面的where进行拼接。<choose><when>choose相当于Switch语句,when语句相当于case语句,otherwise相当于default语句。<set>set标签在更新的时候自动加上set关键字去掉最后一个字的逗号。
	<trim>重写set语句重写where语句,and|or表示去掉语句中第一个or或者and。
	动态sql的高级应用:<foreach>用来做数据的遍历循环(collection:代表要遍历的集合元素、open代表语句开始部分、close、代表结束部分、item表示遍历的每一个变量名、sperator代表分隔符)
	MyBatis的加载策略和缓存机制:基于嵌套查询来实现,需要用到该数据时再对改数据进行加载,也称之为懒加载。局部延迟加载(fetchType=lazy、eager懒加载策略或者立即加载策略),全局延迟加载落后于局部延迟加载。
	一二级缓存机制:一级缓存是SqlSession级别的并且默认开启无法关闭;二级缓存默认是不开启的,实现二级缓存要求POJO必须是可序列化的就必须实现Serializable,在xml文件中配置<cache/>就可以实现了,同时不同的SqlSession可以共用二级缓存。
	逆向工程:创建数据库表然后将数据库表之间的关系,自动创建封装类与普通类之间的关系。
	常见的MyBatis注解:@insert实现新增、@update实现更新、@delete实现删除、@select实现查询、@result封装结果集@results封装多个结果集@one实现一对一结果集的封装、@many实现一对多的结果集的封装。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值