Mybatis 框架
ORM 介绍
ROM : Object relational Mapping : 对象关系映射
指的是持久化数据和实体对象的映射模式
规则: 数据表 - > 类
表字段 - > 成员变量(属性)
表数据 - > 创建的一个对象
Mybatis
Mybatis 是基于java 的持久层框架,内部封装了JDBC ,开发者只需要关注SQL语句本身,而不需要处理驱动.创建连接,创建执行者等复杂的操作
Mybatis 通过xml 或注解的方式将要执行的各种Statement配置起来,并通过java对象和Statement中SQL的动态参数进行映射生成最终要执行的SQL语句.
Mybatis 框架执行完SQL语句并将结果映射为java对象并返回,采用ORM思想解决了实体和数据库映射的问题,对JDBC进行了封装,屏蔽了JDBC API地层访问细节,是我们不用与JDBC API 打交道,就可以完成对数据库的持久化操作
快速入门
导包
定义全局配置文件
定义数据库连接信息(定义数据库连接池)
加载SQL映射文件
SQL映射文件
编写java代码
加载配置文件
获取sqlSession 对象
public class Text1 {
@Test
public void findAll() throws Exception {
//加载核心配置文件
InputStream in = Resources.getResourceAsStream("MyBatisConfig.xml");
//获取sqlSession 工厂对象
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(in);
//通过SqlSession 工厂对象获取SqlSession对象
SqlSession sqlSession = ssf.openSession();
//执行映射配置文件中的sql语句.并接受结果
List<Student> stu = sqlSession.selectList("sss.selectAll");
//处理结果
for (Student student : stu) {
System.out.println(student);
}
// 关闭资源
sqlSession.close();
in.close();
}
}
相关API
Resource API
作用: 加载配置文件获取到 InputStream
SqlSessionFantoryBuilder API
作用: 解析配置文件,然后构建SqlSessionFantory ,获取 SqlSessionFantory 工厂对象的功能类
方法: build (InputStream ) 返回值: SqlSessionFantory
SqlSessionFantory API
作用: 获取SqlSession 构建者对象的工厂接口
方法: openSession( ) 获取SqlSession 对象,需手动提交事务
openSession(Boolean autoCommit ) 获取SqlSession 对象 , 参数为true 则自动提交事务
SqlSession API
作用: 构建者对象接口,用于执行SQL . 管理事务 . 接口代理
方法 :
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X1lDDZU3-1592724168369)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200616171231948.png)]`
映射配置文件
Mapper 标签 – 核心跟标签
namespace 属性: 名称空间
select 标签 查询功能的标签
insert 标签 插入功能的标签
update标签 修改功能的标签
delete 标签 删除功能的标签
id 属性 唯一表示 -> 方法名
resultType 属性 指定结果映射对象类型-> 返回值类型
paremeterType 属性 指定参数对象类型 - > 参数类型
注意 :
insert :
返回值类型可以省略 默认整型
如果参数类型为引用类型,可以直接写属性名(Student -> name)
事务默认是不自动提交的 openSession( ) 方法中,参数为boolean 类型. 不写默认false , true 表示自动提交事务.
标签
核心配置文件
标签 引入数据库连接配置文件
<!--引入数据库连接的配置文件-->
<properties resource="jdbc.properties"/>
标签 配置 LOG4J (记录 MyBatis 真正执行的 SQL 语句、参数、结果等信息)
<!--配置LOG4J-->
<settings>
<setting name="logImpl" value="log4j"/>
</settings>
起别名
<typeAliases>
<typeAlias type="com.itheima.bean.Student" alias="student"/>
<!--<package name="com.itheima.bean"/>-->
</typeAliases>
<!-- mappers引入映射配置文件 -->
<mappers>
<!-- mapper 引入指定的映射配置文件 resource属性指定映射配置文件的名称 -->
<mapper resource="StudentMapper.xml"/>
</mappers>
<!--environments配置数据库环境,环境可以有多个。default属性指定使用的是哪个-->
<environments default="mysql">
<!--environment配置数据库环境 id属性唯一标识-->
<environment id="mysql">
<!-- transactionManager事务管理。 type属性,采用JDBC默认的事务-->
<transactionManager type="JDBC"></transactionManager>
<!-- dataSource数据源信息 type属性 连接池-->
<dataSource type="POOLED">
<!-- property获取数据库连接的配置信息 -->
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<!--集成分页助手插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
Mybatis 接口代理方式实现Dao 层
需要满足的条件:
映射配置文件中<mapper> 标签的nameSpace 属性 必须和Dao 接口的权限定类名完全相同
映射配置文件中增删该标签的id属性必须和Dao接口中的方法名完全相同
映射配置文件中的增删改标签中 parameterType 属性值必须和Dao方法中参数类型一样. resultType 属性值必须和Dao 方法中的返回值类型一致
SqlSession 类中的 getMapper() 方法可以获取到Dao 层接口的动态代理实现类对象.