2.ORM概述
2.1.流行的ORM框架
1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架(Hibernate)提供实现.
2.Hibernate:目前最流行的ORM框架.设计灵巧,性能一般(自己去控制性能,不是很好控制),文档丰富.(完全自动操作)
是一个完整的ORM框架,常规CRUD我们不需要写一句SQL; 你表面上看到操作时非常简单,其实底层都是不简单的,它都是做了层层的封装,所以性能方面要比我们写原生sql性能要低的多
3Hibernate.MyBatis:本是apache的一个开源项目iBatis,提供的持久层框架包括SQL Maps和Dao,允许开发人员直接编写SQL(更好灵活).(Sql操作方式)
MyBatis 并不是一个完整的ORM框架,因为我们还需要自己去写全部SQL,如果查询出来数据的列和对象中的 字段不一致,我们还得手动进行一个映射配置
user_name username
2.2.JDBC操作数据库缺陷
首先,通过jdbc也能实现对象实体和数据库关系的映射.那就是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。 也就是各种Dao(UserDao DeptDao等)。
最大的缺点就是:
1 sql写在JAVA代码中改修改sql必须修改代码,需要重新编译。
2 并不是一个ORM框架
2.3.ORM框架的操作数据库关系方式有很多种,常用的有两种
2.3.1.Sql操作方式(对jdbc进行封装)(mybatis的实现方式)
把SQL配置到配置文件中,通过不同SQL中完成对象实体和数据库关系相互转换的操作
2.3.2.完整操作(JPA、Hibenate实现方式)
2.4.ORM框架工作原理
1、以一定的映射方式,把实体模型和数据库关系的映射
2、ORM框架启动时加载这些映射和数据库配置文件
3、ORM通过对最原生jdbc的封装提供更加便利的操作API
4、Dao通过ORM提供的便捷API以对象的方式操作数据库关系。
3.MyBatis的认识
3.1.MyBatis的起源
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。
2013年11月迁移到Github(到网上去搜索一下)。
iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
iBATIS提供的持久层框架包括SQL Maps(XML映射配置)和Data Access Objects(Dao)
3.2.MyBatis的介绍
MyBatis 是一个支持普通SQL查询,存储过程( Oracle最后一天)和高级映射的优秀持久层框架。
MyBatis 消除了几乎所有的JDBC代码和手工设置参数以及结果集的检索。
MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
MyBatis不能自动创建表,如果能够自动建表,必须自己先准备好建表的sql语句。
4.MyBatis完成查询
操作前的准备工作
创建一个java项目?略过
4.1.1.导入相应的9个jar包
4.1.2.准备相应的表
咱们对数据库进行操作,肯定需要准备表。这没啥好说的。
现在直接引入我们准备好的product表即可:
4.1.3.准备相应的domain
建一个Product对象,和数据库的表对应
注:类的名称和类型都和我们的product表相对应匹配
public class Product {
private Long id;
//商品名称
private String productName;
//品牌
private String brand;
//供应商
private String supplier;
//零售价
private Double salePrice;
//进价
private Double costPrice;
//折扣比例
private Double cutoff;
//商品分类编号
private Long dir_id;
//提供getter与setter...
}
4.2.小结
准备步骤:
1 导包
2 建表(product)
3 domain(Product)
4 准备dao层(CRUD)
5 测试(不是必需的)
注意:我们要引哪些包?
1 一定要引入驱动包(不要忘了)
2 导入mybatis的核心包
3 导入mybatis的依赖包
4.3.product的Dao层准备
/**
* 商品的持久操作
*/
public interface IProductDao {
/**
* 添加一个商品
*/
void save(Product p);
/**
* 更新一个商品
*/
void update(Product p);
/**
* 删除一个商品
*/
void delete(Long id);
/**
* 得到一个商品
*/
Product get(Long id);
/**
* 得到所有商品
*/
List<Product> getAll();
}
5.MyBatis核心配置文件 MyBatis-Config.xml
<configuration>
<!-- 环境们 (很多环境的意思)
default:默认使用哪一个环境(必需对应一个环境的id)
-->
<environments default="development">
<!--
一个环境 id:为这个环境取唯一一个id名称
-->
<environment id="development">
<!--
事务管理 type:JDBC(支持事务)/MANAGED(什么都不做)
-->
<transactionManager type="JDBC" />
<!-- 数据源, 连接池 type(POOLED):MyBatis自带的连接池 -->
<dataSource type="POOLED">
<!-- 连接数据库的参数 -->
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///mydb" />
<property name="username" value="root" />
<property name="password" value="admin" />
</dataSource>
</environment>
</environments>
<!-- 这个mappers代表的是相应的ORM映射文件 -->
<mappers>
<mapper resource="cn/itsource/domain/ProductMapper.xml" />
</mappers>
</configuration>
抽取数据库信息配置文件
<configuration>
<!-- 引入Properties文件 -->
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- 根据key拿到properties中的value值 -->
<property name="driver" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />