Mybatis入门
MyBatis是什么:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。MyBatis的前身就是iBatis,iBatis本是apache的一个开源项目,2010年这个项目由apahce sofeware foundation 迁移到了google code,并且改名,所以市面上也会有人称为iBatis.
MyBatis的出现原因:
JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序
JDBC的步骤,
1.加载驱动
2.获取连接
3.执行sql语句
4.处理结果集
5.关闭资源
JDBC的优点:
1.运行时快捷高效
JDBC的缺点:
1.工作量相对较大。我们需要先连接,然后处理JDBC底层事务,处理数据类型。我们还需要操作Connection对象、Statement对象和ResultSet对象去拿到数据,并准确的关闭它们
2.我们要对JDBC编程可能产生的异常进行捕捉处理并正确关闭资源。
正式因为JDBC的繁琐以及复杂操作,于是我们就提出了对象关系映射(Object Relational Mapping)简称 ORM,或者O/RM,或者 O/R mapping。不过,我们要知道所有的ORM模型都是基于对JDBC的进行封装,不同的ORM模型对JDBC封闭的强度是不一样的。
什么是ORM模型?
ORM模型就是数据库的表和简单Java对象(Plain Ordinary Java Object,简称POJO)的映射关系模型。
ORM模型的作用是什么 ?
它主要解决数据库数据和POJO对象的相互映射。我们通过这层映射就可以简单的把数据库表的数据转化为POJO。以便程序员更加容易的理解和应用Java程序.而且程序员一般只需要了解Java应用而无需对数据库进行深入的了解。此外,ORM模型提供了统一的规则使得数据库的数据通过配置便可轻易的映射到POJO上。。
ORM常用的有:
1.Hibernate:属于淘汰的
2.MyBatis:大面积使用
3.Spring Date JPA:很少用,是Hibernate的封装
这里我们只说Mybatis。
MyBatis对比JDBC的优势:
1. DAO层代码可以通过现有插件直接生成,大大提高编码效率和准确性。
2. MyBatis在SqlMapConfig.xml中配置数据连接池,使用数据库连接池管理数据库连接。
3. 一致的编码风格大大减少代码的沟通成本;
4. MyBatis提供了一级和二级缓存(需要配置打开),强大的动态sql,自动化的session管理,都比手工维护来的方便和安全。
5. 自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
6. 自动将java对象映射至sql语句,将sql语句及占位符号和参数全部配置在xml中,即使sql变化,不需要对java代码进行重新编译,而且相似的sql不需要重复写,也可以用注解写sql语句。
MyBatis的模块图
MyBatis的流程图
MyBatis的使用过程
1.配置bean
2.写SqlMapConfig.xml配置文件,配置数据库连接以及对Mapper的管理
3.配置SqlSessionFactory,或使用MyBatis自带的DefaultSqlSessionFactory,这个类实现了SqlSessionFactory,而SqlSessionFactory主要就是一个openSession的作用
4.sql语句的写法两种,Mapper.xml或在Mapper.java中方法上写注解sql
Myabatis的两者sql语句可以混合使用,达到互补的作用,注意id不能相同,不然会报错,id重复问题,没有所谓的优先级之说,两者的区别:
Mapper.xml:
优点:1.跟接口分离、统一管理
2.复杂的语句可以不影响接口的可读性
缺点:1.过多的XML文件
Annotation注解:
优点:1.接口就能看到sql语句,可读性高,不需要再去找xml文件,方便
2.复杂的联合查询不好维护,代码的可读性差
SqlSessionFactorySqlSessionMapper 推荐作用域