一、JDBC
1.1 JDBC连接的四个步骤
1.加载驱动 导入JDBC 连接数据库的jar 包,利用CLASS.forName 加载驱动; 2.获取连接 利用DriverManager 获取Connection,然后创建Statement; 3.执行SQL语句 利用Statement 执行SQL 语句并结合ResultSet 处理结果集映射Java 对象; 4.关闭资源 先开后关的顺序关闭ResultSet,Statement,Connection 等资源。
1.2 JDBC的弊端
1.硬编码 SQL语句存在Java代码中,不能很好的分离数据库语句和Java语句,造成代码不易维护; 2.代码重复度高 大量的重复代码,以ResultSet 为例,每次都需要重复解析结果集; 3.SQL参数固定 SQL语句的参数固定,使得SQL语句不灵活,无法满足多变的场景。 4.底层技术 JDBC属于底层的技术,不支持分布式,缓存等技术,对于复杂场景的应对不好;
二、 ORM模型
2.1 ORM模型的概念
ORM 模型是数据库的表和简单Java 对象(Plain Ordinary Java Object,简称POJO)的映射关系模型,主要解决数据库数据和POJO 对象的相互映射。
2.2 和数据库的映射关系
1.数据库表结构<--->JAVA中的实体类; 2.数据库中的表字段<--->JAVA中的属性; 3.数据库中的数据类型<--->JAVA中的数据库类型; 4.数据库中的一行数据<--->JAVA中的一个对象; 5.数据库中一个表的所有数据<--->JAVA中的集合;
2.3 常见的ORM模型
1.Hibernate: Hibernate 是一个全自动的ORM 模型,Hibernate 可以自动生成SQL 语句,自动执行. 2.MyBatis: MyBatis 是一款半自动的ORM 模型,它支持定制化SQL、存储过程以及高级映射.
2.4 Mybatis和hibernate的区别
1.Hibernate是全自动化ORM; Mybatis是半自动化ORM。 2.Hibernate简化dao层、不用考虑SQL语句的编写和结果映射,重点放在业务逻辑上; Mybatis需要手写SQL语句以及结果映射。 3. Hibernate是一个重量级的框架,内部生成SQL语句,反射操作太多,导致性能下降; Mybatis是一个轻量级的框架,需要自己写sql语句,有较少的反射操作。 4.Hibernate 不方便做SQL优化,遇到较复杂的SQL语句需要绕过框架实现复杂,对多字段的结构进行部分映射困难; Mybatis 不仅可以做SQL优化还可以SQL与Java分离,还可以自行编写映射关系,复杂的SQL语句Mybatis效率更高; Mybatis优势: 可以进行更细致的SQL优化;容易掌握 Hibernate优势: dao层开发比mybatis简单,mybatis需要维护SQL和结果映射hibernate数据库移植性好
三、mybatis 解决了jdbc 的问题
1.数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
2.Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
3.向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
4.对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。