MyBatis框架
相关概念
框架
定义:框架(Framework)是一种经过检验的、具有特定功能的半成品软件。
优势:1,无需考虑开发中的公共问题,基础问题,框架已经做好了实现,
2,可以专注于项目的业务逻辑技术,提升开发效率,并有助于提高核心业务的开发质量。
3,项目架构同意,便于沟通协作,便于修改维护
主流框架技术简介
1,mybatis—一个基于ORM的持久化框架。是一种半自动化的ORM实现。特点是SQL映射器机制。
2,Spring----开源的,轻量级的企业级应用框架。主要作为依赖注入容器和AOP实现存在。
3,Spring MVC----全名Spring WEb MVC,基于Servlet API的Web框架。
4,Hibernate—是一个典型的ORM解决方案。
5,Struts2—基于Web的MVC框架。引入了新特性:拦截器,值栈,OGNL表达式语言。
数据持久化
定义:持久化就是将内存中有用的数据以某种技术保存起来,并可以再次取出来应用。
内存中的数据模型(任意数据结构或对象模型)------>相互转换 <------- 存储模型(xml,二进制流, 关系模型)
ORM—Object Relactional Mapping(对象/关系映射)
定义:ORM是一种在关系型数据库和面向对象编程语言之间进行数据转换的编程技术。通过在对象模型和数据库关系模型之间建立起对应关系。从而达到通过javaBean对象操作数据库表中数据的目的。
MyBatis
----将sql语句从程序代码中分离出来,配置在XML文件中。
使用MyBatis框架的步骤:
- 下载所需jar包
- 创建项目并添加jar包
- 编写myBatis框架的核心配置文件
- 创建实体类
- 创建Mapper接口
- 创建sql映射文件
- 编写测试类
基本要素
核心接口和类
核心配置文件(mybatis-config.xml)
SQL映射
核心对象–类和接口
1,SqlSessionFactoryBuilder
SqlSessionFactoryBuilder负责根据配置信息构建SqlSessionFactory实例。提供了多种build()方法
> build(Reader reader,String environment, Properties properties)----字符流
> build(InputStream inputStream,String environment, Properties properties)—字节流
一旦创建SqlSessionFactory实例就不在需要SqlSessionFactoryBuilder了,所以SqlSessionFactoryBuilder的最佳作用域范围是存在于方法体内(作为局部变量),用完即销毁。
2,SqlSessionFactory
SqlSessionFactory实例是MyBatis框架应用的核心。其提供了openSession()方法来获取SqlSession实例
openSession()方法中Boolean类型的参数用于控制是否开启自动提交。
true表示开启自动提交,关闭事务控制。false表示关闭自动提交,开启事务控制。
若不传入参数,默认为true
SqlSessionFactory实例一旦创建就应该在应用的运行周期中始终存在(故可设置其为类的静态属性)
3,SqlSession
SqlSession用于执行持久化操作,他提供了面向数据库执行sql命令的能力。可用过SqlSession提供的方法执行已映射的sql语句。
SqlSession表示一次数据库会话,SqlSession实例非线程安全,不能被共享,每个线程应使用自己独立的SqlSession实例。
SqlSession实例的生命周期不应是永久的,其最佳作用域范围是一次HTTP请求,或方法作用域内。
一个SqlSession实例并非只能执行一次SQL语句,在一次会话中完全可以多次执行SQL语句。
SqlSession执行绑定的SQL的两种方式:基于字符串常量,基于Mapper接口。
核心配置文件
(mybatis-config.xml)中设置的是全局信息,如:数据库链接及事务信息、mybatis框架运行所需的各种特性、一些影响框架运行时行为的属性。
配置文件的元素节点又先后顺序。
Configuration元素是整个配置文件的根节点。
1,properties元素
—描述的是一些外部的、可替代的属性。
配置方式:
1,通过外部属性文件配置。
driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc\:mysql\://127.0.0.1\:3306/smbms?serverTimezone\=GMT%2B8&useUnicode\=true&characterEncoding\=utf-8
user=root
password=root
<!-- 配置文件名称-->
<properties resource="database.properties"/>
<!-- 运行环境节点-->
<environments default="development">
<environment id="development">
<!-- 事务管理类型-表示直接使用JDBC的提交和回滚功能 -->
<transactionManager type="JDBC"/>
<!-- 配置JDBC连接对象的资源-数据连接池 -->
<dataSource type="POOLED">
<!-- 参数配置 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
2,通过properties元素的子元素配置。
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</properties>
<environment id="development">
<!-- 事务管理类型-表示直接使用JDBC的提交和回滚功能 -->
<transactionManager type="JDBC"/>
<!-- 配置JDBC连接对象的资源-数据连接池 -->
<dataSource type="POOLED">
<!-- 通过properties元素的子元素配置参数 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
3,直接在数据资源标签中写入
<environment id="development">
<!-- 事务管理类型-表示直接使用JDBC的提交和回滚功能 -->
<transactionManager type="JDBC"/>
<!-- 配置JDBC连接对象的资源-数据连接池 -->
<dataSource type="POOLED">
<!-- 通过properties元素的子元素配置参数 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
注意:若同时使用以上两种配置方法,mybatis会先加载property元素中的设置,然后加载resource属性指定资源中的设置。所以最后显示的值会是外部配置文件中对应属性的值。
2,settings元素
—其设置的选项可以影响mybatis框架的运行时行为。
常用选项
设置项 | 说明 | 允许值 | 默认值 |
---|---|---|---|
cacheEnabled | 对此配置文件下所有sql映射的缓存进行全局型开/关设置 | true |false | true |
lazyLoadingEnabled | 全局启用或禁用延迟加载。启用后所有关系都会被延迟加载 | true|false | false |
autoMappingBehavior | 指定mybatis看框架是否应自动映射,及如何映射查询结果集中的列到java对象的字段/属性 | none|partial|full | partial |
logImpl | 指定mybatis框架应使用的日志记录实现,如果不设置,将自动发现日志记录实现。 | henduo | 无 |
3,typeAliases元素
—可以为java类型配置一个简短的别名。
两种方式:
<!-- 1获取具体的实体类 -->
<typeAliases>
<!-- 为实体类取别名 -->
<typeAlias alias="userinfo" type="com.smbms.pojo.UserInfo"/>
<typeAlias alias="userinfo1" type="com.smbms.pojo.UserInfo"/>
</typeAliases>
<!-- 2通过包 -->
<typeAliases>
<!-- 获取某包下的所有类,其别名为此类名的全小写 -->
<package name="com.smbms.pojo"/>
</typeAliases>
mybatis框架中定义的别名在SQL映射文件中使用时是不区分大小写的。
对常用java内置类型,框架中也内建了相应的别名,一般是其小写的非完全限定类名。
4,environments元素
----针对开发、测试、生产部署等不同需求,为mybatis框架分别配置多套运行时环境,可在运行项目时灵活选择。
属性 | 说明 |
---|---|
id | 各运行环境配置的ID命名要唯一 |
default | 指定当前的运行环境ID为dev。必须指定一个作为当前运行环境。 |
transactionManager | 事务管理类型。2中选项 JDBC:表示直接使用JDBC的提交和回滚功能,依赖程序代码对事务进行管理 Managed:表示由容器负责,eg:Spring框架提供的事务机制。 |
dataSource | 使用标准的JDBC数据源接口来配置JDBC连接对象的资源。3种数据源类型 unpooled:表示采用非池化的链接管理 pooled:表示mybatis框架实现的简单数据库连接池类型 jndi:表示使用容器种以JNDI方式提供的数据源资源。 |
5,mappers元素
----通知mybatis框架查找定义了sql语句的sql映射文件的路径。
两种实现方式:
<!-- 1 直接映射某个包路径-->
<package name="com.dao"/>
<!-- 2 映射到具体的xml文件 resource属性为设置对应接口的xml文件-->
<mapper resource="com/smbms/dao/UserMapper.xml"/>