mybatis定义变量_mybatis学习笔记
mybatis简介
1.对象/关系数据库映射(ORM) ORM全称Object/Relation Mapping:表⽰对象-关系映射的缩写 ORM完成⾯向对象的编程语⾔到关1.对象/关系数据库映射(ORM)
系数据库的映射。当ORM框架完成映射后,程序员既可以利⽤⾯向 对象程序设计语⾔的简单易⽤性,⼜可以利⽤关系数据库的技术优势。ORM把关系数据库包装成⾯向对 象的模型。ORM框架是⾯向对象设计语⾔与关系数据库发展不同步时的中间解决⽅案。采⽤ORM框架后,应⽤程序不再直接访问底层数据库,⽽是以⾯向对象的放松来操作持久化对象,⽽ORM框架则将这 些⾯向对象的操作转换成底层SQL
translate3d无效2. Mybatis简介 MyBatis是⼀款优操作。ORM框架实现的效果:把对持久化对象的保存、修改、删除 等 操作,转换为对数据库的操作 2. Mybatis简介
秀的基于ORM的半⾃动轻量级持久层框架,它⽀持定制化SQL、存储过程以及⾼级映 射。MyBatis避免了⼏乎所有的JDBC代码和⼿动设置参数以及获取结果集。MyBatis可以使⽤简单的 XML或注解来配置和映射原⽣类型、接⼝和Java的POJO (Plain Old Java Objects,普
3. Mybatis历史 原是apache的⼀个开源项⽬iBatis, 2010年6⽉这个项⽬由apache software 通⽼式Java对 象) 为数据库中的记录。 3. Mybatis历史
foundation 迁移到了 google code,随着开发团队转投Google Code旗下,ibatis3.x正式更名为Mybatis ,代码于2013年11 ⽉迁移到Github。 iBATIS⼀词来源于“internet”和“abatis”的组合,是⼀个基于Java的持久层框架。iBATIS提供的持久层框 架包括SQL
4. Mybatis优势 Mybatis是⼀个半⾃动化的持久层框架,对开发⼈员开说,核⼼sql还是需要⾃⼰Maps和Data Access Objects(DAO) 4. Mybatis优势
进⾏优化,sql和java编 码进⾏分离,功能边界清晰,⼀个专注业务,⼀个专注数据。
mybatis源码主线流程图:
⾃定义持久层框架搭建原理:
⾃定义持久层框架本质就是对JDBC代码进⾏了封装,解决原始jdbc开发存在的问题。
原始jdbc开发存在的问题如下:
1. 数据库连接创建、释放频繁造成系统资源浪费,从⽽影响系统性能。
sql查询语句有中文就不行
2. Sql语句在代码中硬编码,造成代码不易维护,实际应⽤中sql变化的可能较⼤,sql变动需要改变 java代码。
3. 使⽤preparedStatement向占有位符号传参数存在硬编码,因为sql语句的where条件不⼀定,可能 多也可能少,修改sql还要修改代
码,系统不易维护。
4. 对结果集解析存在硬编码(查询列名),sql变化导致解析代码变化,系统不易维护,如果能将数据库 记录封装成pojo对象解析⽐较⽅
便。
问题解决思路:
1.使⽤数据库连接池初始化连接资源;
2.将sql语句抽取到xml配置⽂件中;
3.使⽤反射、内省等底层技术,⾃动将实体与表进⾏属性与字
段的⾃动映射;
⾃定义框架设计:
使⽤端:提供核⼼配置⽂件: > l : 存放数据源信息,引⼊l > l : sql语句的配置⽂件信息
使⽤端
框架端: 1.读取配置⽂件 读取完成以后以流的形式存在,我们不能将读取到的配置信息以流的形式存放在内存中,不好操作,可 以创建框架端:专业设计网站的公司
javaBean来存储
(1)Configuration : 存放数据库基本信息、Map<;唯⼀标识,Mapper> 唯⼀标识:namespace + "." + id
(2)MappedStatement:sql语句、statement类型、输⼊参数java类型、输出参数java类型
2.解析配置⽂件 创建sqlSessionFactoryBuilder类:
⽅法:sqlSessionFactory build(): 第⼀:使⽤dom4j解析配置⽂件,将解析出来的内容封装到Configuration和
MappedStatement中 第⼆:创建SqlSessionFactory的实现类DefaultSqlSession
3.创建SqlSessionFactory:
⽅法:openSession() : 获取sqlSession接⼝的实现类实例对象
4.创建sqlSession接⼝及实现类:主要封装crud⽅法
⽅法:selectList(String statementId,Object param):查询所有 selectOne(String statementId,Object param):查询单个 具体实现:封装JDBC完成对数据库表的查询操作
涉及到的设计模式:
Builder构建者设计模式、⼯⼚模式、代理模式
mybatis源码解读
初步使⽤:
1.使⽤ Maven 来构建项⽬,将下⾯的依赖代码置于 l ⽂件中:
<dependency>
<groupId&batis</groupId>
<artifactId>mybatis</artifactId>
<version&</version>
</dependency>
2.从 XML 中构建 SqlSessionFactory
-
- 每个基于 MyBatis 的应⽤都是以⼀个 SqlSessionFactory 的实例为核⼼的。SqlSessionFactory 的实例可以通过
SqlSessionFactoryBuilder 获得。⽽ SqlSessionFactoryBuilder 则可以从 XML 配置⽂件或⼀个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。 -- 从 XML ⽂件中构建 SqlSessionFactory 的实例⾮常简单,建议使⽤类路径下的资源⽂件进⾏配置。 但也可以使⽤任意的输⼊流(InputStream)实例,⽐如⽤⽂件路径字符串或 file:// URL 构造的输⼊流。MyBatis 包含⼀个名叫 Resources 的⼯具类,它包含⼀些实⽤⽅法,使得从类路径或其它位置加载资源⽂件更加容易。
3.从 SqlSessionFactory 中获取 SqlSession
既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执⾏ SQL 命令所需的所有⽅法。你可以通过 SqlSession 实例来直接执⾏已映射的 SQL 语句。
4.作⽤域(Scope)和⽣命周期
理解我们之前讨论过的不同作⽤域和⽣命周期类别是⾄关重要的,因为错误的使⽤会导致⾮常严重的并发问题。 提⽰:
border style的几种样式
提⽰: 对象⽣命周期和依赖注⼊框架
依赖注⼊框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注⼊到你的 bean 中,因此可以直接忽略它们的⽣命周期。 如果对如何通过依赖注⼊框架使⽤ MyBatis 感兴趣,可以研究⼀下 MyBatis-Spring 或 MyBatis-Guice 两个⼦项⽬。SqlSessionFactoryBuilder
这个类可以被实例化、使⽤和丢弃,⼀旦创建了 SqlSessionFactory,就不再需要它了。 因此 SqlSessionFactoryBuilder 实例的最佳作⽤域是⽅法作⽤域(也就是局部⽅法变量)。 你可以重⽤ SqlSessionFactoryBuilder 来创建多个 SqlSessionFactory 实例,但最好还是不要⼀直保留着它,以保证所有的 XML 解析资源可以被释放给更重要的事情。
SqlSessionFactory
SqlSessionFactory ⼀旦被创建就应该在应⽤的运⾏期间⼀直存在,没有任何理由丢弃它或重新创建另⼀个实例。 使⽤
SqlSessionFactory 的最佳实践是在应⽤运⾏期间不要重复创建多次,多次重建 SqlSessionFactory 被视为⼀种代码“坏习惯”。
因此 SqlSessionFactory 的最佳作⽤域是应⽤作⽤域。 有很多⽅法可以做到,最简单的就是使⽤单例
模式或者静态单例模式。SqlSession
每个线程都应该有它⾃⼰的 SqlSession 实例。SqlSession 的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作⽤域是请求或⽅法作⽤域。 绝对不能将 SqlSession 实例的引⽤放在⼀个类的静态域,甚⾄⼀个类的实例变量也不⾏。 也绝不能将SqlSession 实例的引⽤放在任何类型的托管作⽤域中,⽐如 Servlet 框架中的 HttpSession。 如果你现在正在使⽤⼀种 Web 框架,考虑将 SqlSession 放在⼀个和 HTTP 请求相似的作⽤域中。 换句话说,每次收到 HTTP 请求,就可以打开⼀个
SqlSession,返回⼀个响应后,就关闭它。 这个关闭操作很重要,为了确保每次都能执⾏关闭操作,你应该把这个关闭操作放到finally 块中。
XML配置
MyBatis 的配置⽂件包含了会深深影响 MyBatis ⾏为的设置和属性信息。 配置⽂档的顶层结构如下:
configuration(配置) |-- properties(属性) |-- settings(设置) |-- typeAliases(类型别名) |-- typeHandlers(类型处理器) |-- objectFactory(对象⼯⼚) |-- plugins(插件) |-- environments(环境配置) ---|-- environment(环境变量) ------|-- transactionManager(事务管理器) ------|-- dataSource(数据源) |- databaseIdProvider(数据库⼚商标识) |-
mappers(映射器)
这是去往 官⽅xml配置⽂档 的链接。
XML映射⽂件
MyBatis 的真正强⼤在于它的语句映射,这是它的魔⼒所在。由于它的异常强⼤,映射器的 XML ⽂件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进⾏对⽐,你会⽴即发现省掉了将近 95% 的代码。MyBatis 致⼒于减少使⽤成本,让⽤户能更专注于 SQL 代码。 SQL 映射⽂件只有很少的⼏个顶级元素(按照应被定义的顺序列出):
注于 SQL 代码。
mysql语句的执行顺序cache – 该命名空间的缓存配置。
cache-ref – 引⽤其它命名空间的缓存配置。
resultMap – 描述如何从数据库结果集中加载对象,是最复杂也是最强⼤的元素。
c语言指针数组倒置~~parameterMap – ⽼式风格的参数映射。此元素已被废弃,并可能在将来被移除!请使⽤⾏内参数映射。⽂档中不会介绍此元素。
~~
sql – 可被其它语句引⽤的可重⽤语句块。
insert – 映射插⼊语句。
update – 映射更新语句。
delete – 映射删除语句。
select – 映射查询语句。
这是去往 官⽅xml映射器⽂档 的链接。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。