MyBatis 框架详解 (一)
持久层框架:直接操作对象 将查询结果转换成对象集合 把对象保存到数据库 你不用写太多sql 语句(容易出错,不利于面向对象)
MyBatis:是一个持久层的框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
构建工厂模式 ,拿到数据源,拿到基本配置文件通过数据源拿到session (专门操作数据库)
#
引入jar包:
1.要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath 中即可。
2.maven构建项目:将以下加到pom.xml中;
从 XML 中构建 SqlSessionFactory
xml只是一种 获取SqlSessionFactory方式 ( SqlSesionFactoryy有好几个来源 xml/properties文件/Configuration实例);
可以使用classpath路径下的资源文件进行配置,也可以使用文件流来得到路径;MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。
mybatis-config.xml配置文件:
mybatis核心配置(获取数据库连接的数据源+事务管理器—管理事务的)Configuration通过Resources的方式读取配置文件中信息(SqlSessionFactoryBuilder 中的方法可以new 一个Configuration 实例去加载配置文件的内容 后生成SqlSessionFactory)
<?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">
<configuration>
<typeAliases>
<typeAlias alias="student" type="com.spring.entry.Student" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<!--所有的映射注册-->
<mappers>
<mapper resource="com/spring/mybatis/StudentMapper.xml" />
<mapper class="com.spring.mybatis.TeacherMapper"/>
</mappers>
</configuration>
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
不使用 XML 构建 SqlSessionFactory
直接用Java程序创建Configuration实例 Configuration添加了映射器类 (mappercalss) 含 SQL 映射语句的注解从而避免了 XML 文件的依赖(xml里面存sql 所有的sql语句都可以在xml); new 事务管理器
从 SqlSessionFactory 中获取 SqlSession:
SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句; opensession相当于打开了一个连接;
通过session的方法 相当于直接拿到了一个实体对象(没有任何封装)
对于给定语句能够合理描述参数和返回值的接口(比如说StudentMapper.class)—-你可以自定义session的方法(selectstudentmapper) 利用接口的方式进行可封装;
sql查出结果跟你的实体进行匹配
使用指定的完全限定名“org.mybatis.example.BlogMapper.selectBlog”来调用映射语句命名空间唯一;这个命名可以直接映射到在命名空间中同名的 Mapper 类,并将已映射的 select 语句中的名字、参数和返回类型匹配成方法;
利用命名空间直接调用 实体类.calss
BlogMapper mapper = session.getMapper(BlogMapper.class);
Blog blog = mapper.selectBlog(101);
#
映射类:用注解替换xml形式(第三种)
映射器是一个你创建来绑定你映射的语句的接口(StudentMapper)。
映射器实例(Mapper Instances):从 SqlSession 中获得的,任何映射器实例的最大作用域是和请求它们的 SqlSession 相同的,最好把映射器放在方法作用域(method scope)内;
xml 对应了实体类 id即类中的方法 输出类型就是该类的类型
session(可操作mapper文件)
执行:session——->mapper(固定类) 【注解@/xml<….id>】———>mapper 去增删改查
映射器(mappers)
告诉 MyBatis 到哪里去找映射文件,可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等.
Mapper XML 文件:
MyBatis 的真正强大在于它的映射语句,由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的。
select:预处理方面优势‘??’
标签内置属性:
#
Result Maps(解决联合查询问题)
resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC
ResultSets 数据提取代码中解放出来, 并在一些情形下允许你做一些 JDBC 不支持的事情
返回值为HashMap类型,HashMap 不是一个很好的领域模型你的程序更可能会使用 JavaBean 或 POJO(Plain Old Java Objects,普通 Java 对象)作为领域模型。 MyBatis 对两者都支持(对应到对象上)
解决字段名和属性名不匹配的问题
1. 类别名:
这些情况下,MyBatis 会在幕后自动创建一个 ResultMap,再基于属性名来映射列到 JavaBean 的属性上。如果列名和属性名没有精确匹配,可以在 SELECT 语句中对列使用别名(这是一个 基本的 SQL 特性)来匹配标签。比如:
<select id="selectUsers" resultType="User">
select
user_id as "id",
user_name as "userName",
hashed_password as "hashedPassword"
from some_table
where id = #{id}
</select>
2.resultMap :解决列名不匹配的另外一种方式(对象里的对象 1:n关系)
#
动态 SQL
1.判断(sql拼接的情况)true—拼接 false—不拼接
2.遍历:
ps:mybatis框架功能强大,我们需要了解其内部原理,更好的运用它!
mybatis官方文档:http://www.mybatis.org/mybatis-3/zh/index.html
还没有评论,来说两句吧...