Mybatis:
注:Pojo(Plain Old Java Object,普通的Java对象)
1. Mybatis和hibernate的简单对比:
(1) 易学:mybatis会sql就能搭建框架并使用,而hibernate有7种查询搭建框架;
(2) sql查询:mybatis只支持一种xml查询,而hibernate提供了hql,sql和namingSQL三种类查询;
(3) 灵活度:mybatis写sql更灵活,对sql的修改、优化比较方便;(适用于需求变化比较多的情况->互联网项目);而hibernate中的sql自动生成,适用于需求变化不多的中小型项目;
(4) 封装性:mybatis是对JDBC的简单封装(不完全封装),hibernate是完全封装(切入点是面向对象,加一层对象映射)。
(5) 性能:
① 运行效率:mybatis优于hibernate(类似C语言和Java语言的对比)
② 开发效率:hibernate优于mybatis,省略了一些写sql和测试sql的时间。
2. mybatis相对于原生态jdbc:
(1) 能够设置数据库连接池管理数据库连接;
而JDBC数据库连接时,频繁需要关闭开启,造成资源浪费,影响性能。
(2) 能够将sql语句配置在xml中;
而JDBC是将sql语句硬编码到java语言中,若修改,需要重新编译,不易维护。
(3) 能够将查询结果自动映射成java对象;(输入映射和输出映射)
而JDBC存在硬编码,不利于维护。
(4) 将技术细节封装,关注点在CRUD层面上。
3. mybatis基本概念:
(1) mybatis:支持sql、存储过程和高级映射的优秀的持久层框架;避免了JDBC代码、手动设置参数和获取结果集;mybatis可以使用简单的xml和配置,从而将接口和Pojos映射成数据库中的记录。
(2) 着力点:POJO和SQL之间的映射关系。
4. mybatis框架:(从上往下)
(1) Config.xml:全局配置文件(包括mybatis运行环境、数据源和事物管理等);
(2) SqlSessionFactory(会话工厂):创建sqlSession;
(3) sqlSession(会话):一个接口,用来操作数据库(增、删、改、查,CRUD);
(4) executor(执行器):一个接口,SqlSession内部通过执行器操作数据库;
(5) Mapped Statement(底层封装对象):对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型。
(6) mysql
5. 简单入手:
(1) 建立java web项目;
(2) 导入jar包:
① mybatis需要jar包:mybatis-3.3.0.jar
② mysql驱动jar包:mysql-connection-java-....jar
③ 日志记录包:log4j.jar(知道mybatis执行了什么样的SQL语句)
(3) 创建数据库数据:category_
(4) xml配置文件(config.xml)
高层结构:
Configuration配置
properties属性 (“resource”引入外部控制文件)
settings设置
typeAliases类型命名
typeHandlers类型处理器
objectFactory对象工厂
plugins插件
environments环境 (配置环境)
environment环境变量
transactionManager事务管理器 (“type”使用JDBC管理)
dataSource数据源
(提供数据库用的驱动,名称、编码方式和账号密码)
type=”POOLED”:支持JDBC数据源连接池;
type=”UNPOOLED”:不支持数据源连接池;
type=”JNDI”:支持外部数据源连接池
映射器 (映射category.xml)
(5) 创建对应实体类(category.java):用于映射表category_
(6) 创建映射文件(category.xml,在该文件中添加sql语句)
(也可定义CRUD)
<mapper namespace=”pojo包”>
<select id=”listCategory” resultType=”category”>
Select * from category_
</select>
</mapper>
(7) 最后定义main(main.java)
① 根据配置文件config.xml得到sqlSessionFactory:
String resource = “config.xml”;
InputStream is = Resourses.getResourse(resource);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder.build(is);
② 得到session:
sqlSession session = sqlSessionFactory.openSession();
③ 遍历得到category集合:
List<category> cs = session.selectList(“listCategory”);
for(category c: cs){}
6. 基本原理图:
(1) 应用程序向mybatis要数据;
(2) mybatis从数据库找数据:
① 定位到那个数据库(config.xml)
② 执行sql语句(category.xml)
③ 将返回的数据库记录封装在category对象中;
④ 把多个装在一个category集合中;
(3) 返回该集合