Mybatis的产生
idea 的配置idea当中配置好maven工具1Idea当中配置自动编译Mybatis是什么?Mybatis的执行原理图Mybatis的入门Demo对象的详解Resources对象SqlSessionFactoryBuildSqlSessionFactorySqlSession对象xxxMapper.xml文件的详解面向接口发开(应用)准备数据引入依赖核心配置文件引入xxxMapper.xml创建接口文件测试原生JDBC访问数据库
数据库的连接,使用就创建,不使用就立即释放,对数据库进行频繁的开启和释放,造成了 数据库的资源浪费,并且影响了性能
.设想:使用数据库连接池管理数据库连接
将sql语句硬编码到 java 代码中,如果sql语句被修改, 需要重新编译 java 代码,不利于系统维护
设想:将 sql 语句配置在 xml 文件中,即使 sql 变化,不需要对 java 代码进行重新编译
向 prepareStatement 中设置参数,对占位符位置和设置参数值,硬编码在 java 代码中,不利于系统维护
设想:将 sql 语句及占位符和参数全部配置在 xml 文件中
从 resultSet 中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护
设想:将查询的结果集,自动地映射成 java 对象
idea 的配置
idea当中配置好maven工具
1Idea当中配置自动编译
什么是Mybatis框架
idea 的配置idea当中配置好maven工具1Idea当中配置自动编译Mybatis是什么?Mybatis的执行原理图Mybatis的入门Demo对象的详解Resources对象SqlSessionFactoryBuildSqlSessionFactorySqlSession对象xxxMapper.xml文件的详解面向接口发开(应用)准备数据引入依赖核心配置文件引入xxxMapper.xml创建接口文件测试Mybatis是什么?
mybatis 是一个持久层框架,是 Apache 下的顶级项目。mybatis 刚开始由 googlecode 托管,再后来托管到 GitHub下让程序员将主要精力放在 sql 上,通过 mybatis 提供的映射方式,自由灵活地(半自动化,大部分由程序员编写 sql)生成满足需求的 sql 语句mybatis 可以将我们向 prepareStatement 输入参数自动进行映射(输入映射),将查询结果集灵活映射成 java 对象。(输出映射Mybatis的执行原理图
Mybatis的入门Demo
步骤:
准备资源: 数据库 test /表:
对应的实体类: implements Serializable
序列化:对象的信息以二进制的形式保存数据。没有实现 该接口, 不支持序列化
反序列化: 将二进制信息转换成对象引入相关依赖:
Mybatis核心依赖:
<!--mybaits--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.3</version></dependency>
Mysql: 驱动包:
Junit:
Log4j: 日志的记录:
3. 引入Mybatis的核心配置文件: 官网copy。
4. 定义xxxMapper.xml文件。 定义了sql语句
5. 测试
读取核心配置文件。 获得一个输入流。
B:创建一个工厂。 生产对象
C:获得一个SqlSession对象: 类似于Connection 对象。
D:操作 CRUD操作。
E: 释放资源
对象的详解
Resources对象
该对象资源对象,该对象所属的包: ibatis包当中。 该对象能够读取类路径(classes)目录下的资源,获得一个输入流。
SqlSessionFactoryBuild
工厂对象构建者:
获得: new SqlSessionFactoryBuild();
方法: build(inputStream );----->返回一个对象: 工厂对象
作用: 能够根据配置文件信息获得一个工厂对象。
SqlSessionFactory
特点:
工厂对象是一个重量级别的对象。 重量级对象, 对象的创建和对象的销毁都需要消耗很多资源。
工厂对象在一个工程当中只需要一个就可以。 所以工厂在创建完毕之后, 不需要关闭。 生命周期和项目周期一样长。
作用: 生产SqlSession对象:
方法:
openSession();获得一个SqlSession对象, 获得该对象不能自动提交事务。 需要手动调用commit方法进行事务的提交。 rollback事务的回滚操作。
openSession(true); 获得sqlSession对象能够自动进行事务的提交和回滚。
SqlSession对象
对象是一个会话对象。 类似于jdbc当中 Connection对象。 能够进行事务的提交和回滚。
该对象一个线程对应一个对象, 所以该对象不能定义全局对象。 不安全~ 使用完毕之后关闭。
对象能够完成CRUD操作:
selectOne()
selectList();
Insert();
Delete();
Update();
xxxMapper.xml文件的详解
xxxMapper.xml文件当中定义了sql语句:
常用的标签:
Select ,insert , delete ,update标签。
常用属性:
<select id="findStudent" parameterType="java.lang.Integer" resultType="com.offcn.pojo.Student" >select * from Student where id=#{id}</select>
面向接口发开(应用)
开发步骤:
(1)引入依赖:
(2)引入配置文件: SqlMapConfig.xml
(3)编写xxxMapper.xml
(4)编写对应接口文件
(5)Mybatis自动生成接口的实现类: (代理模式)
(6)测试
准备数据
Test ----> teacher 表: 准备对应的实体类:
引入依赖
核心配置文件
引入xxxMapper.xml
<mapper namespace="com.offcn.mapper.TeacherMapper"><!-- Teacher findTeacherById(Integer id); --><select id="findTeacherById" parameterType="int" resultType="teacher">select * from teacher where id=#{id}</select></mapper>
创建接口文件
public interface TeacherMapper {/*** 根据id进行查询:* @param id* @return teacher 老师对象:*/Teacher findTeacherById(Integer id);}
测试
@Testpublic void test() throws Exception{//获得一个会话对象: 给定一个true,链接对象能够自动提交事务SqlSession sqlSession = factory.openSession(true);//就是获得了TeacherMapper接口的实现类: (动态代理模式)// mapper 所属的类型: .MapperProxy xxxProxy proxy class// proxy Class is interface implementsTeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);//System.out.println(mapper);Teacher teacher = mapper.findTeacherById(10086);System.out.println(teacher);sqlSession.close();}
接口开发: 接口需要和xxxMapper.xml文件需要进行绑定:
(1)xxxMapper.xml当中的namespace必须制定接口的全限定类名。
(2)配置文件的名称和接口的文件的名称保持一致。存放在同一个目录下。
TeacherMapper.xml TeacherMapper
(3)标签的id 必须和方法名称保持一致。 输入型参数和方法的形式参数保持一致。
方法的返回值和标签的结果类型保持一致。