一、什么是ORM
ORM:Object/Relation Mapping,即对象关系映射。
ORM框架是面向对象程序设计语言与关系数据库发展不同步时的中间方案,随着面向对象数据库的发展和完善,最终OO数据库会取代关系数据库。只是现在ORM框架是必需的~
ORM工具的唯一作用:把对持久化对象的保存、修改、删除等操作,转换成对数据库的SQL操作。
ORM的基本映射关系:
- 数据表映射类:持久化类映射到一个数据表,修改类属性(修改表的字段),创建实例(增加一条记录),删除实例(删除某条记录)
- 数据表的行的映射对象:持久化类会生成很多实例,每个实例对应数据表中的一行记录。
- 数据表的列(字段)映射对象的属性:即修改持久化对象的属性,ORM会转换成对对应数据表中指定行的相关字段的操作。
二、ORM框架比较——Hibernate和MyBatis
Hibernate是一个全自动化的ORM框架,对数据库结构提供了完整的封装,程序员只需要定义好POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作。即SQL是自动生成和执行的。
MyBatis是一个半自动化的ORM框架,它的着力点在于POJO和SQL之间的映射关系。具体的SQL语句需要Coder自己编写,更灵活。
三、MyBatis入门
使用MyBatis进行持久化操作,通常有如下步骤:
- 开发持久化类(PO),编写持久化操作对应的Mapper.xml,其中包含了 SQL 代码和映射定义信息;
- 读取mybatis-config.xml文件,其中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器
- 初始化mybatis,创建SqlSessionFactory实例。每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
- 获取SqlSession实例。SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
- 通过SqlSession实例的方法,用面向对象的方式操作数据库
- 关闭事务,关闭SqlSession(也是SqlSession实例的方法)
public class MyBatisTest { public static void main(String[] args)throws Exception { //读取mybatis-config.xml文件 InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
//初始化mybatis,创建SqlSessionFactory类实例 SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
//创建Session实例 SqlSession session=sqlSessionFactory.openSession(); User user=new User("XiJinpin","男",70); //插入数据 session.insert("com.biguo.mapper.UserMapper.save",user); //提交事务 session.commit(); //关闭Session session.close(); } }
对PO的操作必须在SqlSession的管理下才能同步到数据库,SqlSession由SqlSessionFactory工厂产生。
SqlSessionFactory是数据库编译后的内存镜像,通常一个应用对应一个SqlSessionFactory对象。SqlSessionFactory对象通过加载mybatis-config.xml配置文件产生。
与JDBC相比,MyBatis的两个显著优点:
1)只需要在Mapper.xml映射配置文件中编写SQL语句,在应用程序中就可以采用OO方式来访问数据库。
2)在JDBC访问过程中大量的checked异常被包装成Mybatis的Runtime异常,从而不再要求程序必须处理所有异常。
配置log4j遇到的问题:不同版本你的jar包有不同的配置文件格式
1.x的版本支持的是log4j.properties的配置文件,如我在工程中只导入了log4j-1.2.17.jar,没有异常。
2.x的版本支持的是xml文件等,如log4j2.xml,相关的jar包为log4j-core-2.3.jar,log4j-api-2.3.jar,我因为没有编写log4j2.xml而一直提示找不到。
暂时没搞懂slf4j的相关信息。