springdataJpa-day01

一、什么是jpa
jpa是一个开发规范,是一个orm框架的开发规范。是sun公司定义的。
orm:对象关系映射。是一个解决问题的一个思路。

二、jpa的提供商
1、Hibernate(使用)
完全支持jpa。业内最好的一个jpa框架。
2、OpenJpa
是apache旗下的一个开源项目,也是jpa规范的实现。
3、TopLink
也是一个开源项目。是Oracle公司的。

三、SpringDataJpa
并不是jpa规范的实现。基于原生jpa的api进行了再次的封装,
提供更简单的使用方法,和更好的用户体验。
如果要使用SpringDataJpa还是需要使用Hibernate。

四、入门程序
1、需求
向客户表中插入一条数据。
如果使用Jpa框架可以不用先建表。可以使用框架生成表。
2、实现步骤
1)创建一个工程。创建一个java工程即可。可以使用maven管理工程。
2)创建一个配置文件。
配置文件必须在classpath:/META-INF/persistence.xml
配置连接数据库的相关配置
3)创建一个Entity类。对应数据库中每个表创建一个实体类。
配置映射关系。
4)编写测试程序,实现数据添加。
1、创建一个EntityManagerFactory对象。在系统中一般都是单例的。
2、使用工厂对象创建一个EntityManager对象。一个EntityManager就是一个连接。是一个多例对象。使用完毕之后就关闭。
3、开启事务。
4、创建一个Customer对象。
5、使用Entitymanager对象的persist方法向数据库插入数据。
6、事务提交
7、关闭连接
3、配置文件
persistence-unit:持久化单元。每个配置文件中至少有一个持久化单元的配置。
name:持久化单元的名称。不能重复。
transaction-type:事务类型
RESOURCE_LOCAL:单数据库的事务。
JTA:分布式事务,跨数据库的事务,多个数据库的事务。
property:
hibernate.show_sql:是否在控制台输出sql语句。
true/false
hibernate.hbm2ddl.auto:是否自动创建表
create:自动创建表,先删除后创建。仅供测试使用。不能应用在正式环境。
update:自动创建表,如果表存在就直接使用,如果不存在就创建。可以应用在正式环境。
none:不自动创建表。如果表存在就直接使用,如果不存在就报错。
4、实体类
@Entity:代表是一个jpa的实体类。
@Table:配置实体类和表的映射关系
name:配置表名。
@Column:配置实体类的属性和字段的映射关系。
如果实体类的属性和字段名称相同可以不用配置此注解。
@Id:标记哪个属性是主键属性。
@GeneratedValue:主键的生成方式。如果手动生成主键,可以没有此注解。
如果主键需要框架生成需要配置此注解。
1)GenerationType.IDENTITY:自增长主键。推荐在mysql下使用,不能在Oracle使用
2)GenerationType.SEQUENCE:使用序列生成主键,一般是在Oracle下使用,不推荐在mysql下使用,在mysql中使用表生成主键。
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “cust_seq”)
generator:生成器的名称
@SequenceGenerator(name = “cust_seq”, sequenceName = “cust_sequence”)
@SequenceGenerator:定义一个生成器
name:生成器的名称
sequenceName:Oracle数据库中序列对象的名称
3)GenerationType.TABLE:使用数据库的表生成主键。
@GeneratedValue(strategy = GenerationType.TABLE, generator = “tab_gen”)
@TableGenerator(name = “tab_gen”, table = “ids_gen”, pkColumnName = “ids”, valueColumnName = “vals”, pkColumnValue = “customer”, allocationSize = 1)
name:生成器的名称
table:生成主键的表的名称
pkColumnName:主键字段的名称
valueColumnName:值字段的名称
pkColumnValue:主键字段的值
allocationSize:生成主键的步长,默认是50
4)GenerationType.AUTO:由框架自动选择
默认是使用数据库表生成主键。不推荐使用。
5、入门小结
1)入门程序
1、创建配置文件。classpath:META-INF/persistence.xml
2、创建实体,配置映射关系。
3、编写测试代码
使用EntityManager对象实现数据库的增删改查。
2)配置文件中
hibernate.hbm2ddl.auto:属性
可以配置自动生成表的策略。
3)主键生成策略
1、自增长
2、使用序列
3、使用表
4、自动选择

五、使用jpa实现crud
1、添加数据
使用EntityManager对象的persist方法实现插入。
EntityManagerFactory对象应该是单例存在。
2、删除数据
步骤:
1)获得EntityManager对象
2)开启事务
3)先从数据库中查询一个Customer对象
4)使用entityManger对象remove方法删除。参数就是Customer对象。
5)提交事务
6)关闭连接

对象的状态:
	瞬时态:直接new的对象就是瞬时态。
	持久态:把数据插入到数据库之后就是持久态。
	游离态:把数据库和对象直接的关系断开之后。

3、修改数据
步骤:
1)获得EntityManager对象
2)开启事务
3)根据id查询一个Customer对象
4)修改对象的属性。
5) 把修改结果保存到数据库
6)提交事务
7)关闭连接
4、查询
1)根据id查询
find:根据id查询
步骤:
1、创建一个EntityManager对象
2、使用find方法根据id查询
3、打印结果
4、关闭连接

		及时加载:find方法执行之后sql语句以及执行。
	getReference:根据id查询
		延迟加载,懒加载:
			执行getReference方法之后sql并没有执行。当访问对象的属性时才执行查询。
2)使用JPQL查询
	相当于是sql语句的一个变种。
	1、查询全部
		sql:SELECT * FROM `cst_customer`
		jpql:from Customer
		使用方法:
		1)创建一个EntityManager对象
		2)使用EntityManager创建一个Query对象,基于jpql创建。
		3)使用query对象执行查询。
		4)打印结果
		5)关闭连接

		from语句中使用表名应该换成实体类的类名。
	2、查询全部带分页
		需要使用query对象的方法设置分页信息。
		起始的行号:setFistResult
		每页的行数:setMaxResult
	3、带条件的查询
		根据id查询:
		sql:select * from cst_customer where cust_id = ?
		jpql: from Customer where custId = ?

		根据客户名称模糊查询:
		sql:select * from cst_customer where cust_name like '%黑马%'
		jpql: from Customer where custName like ?

		jpql相当于sql语句,只是把表名替换成实体类的类名,字段名换成实体类的属性名。
	4、查询带排序
		sql:SELECT * from cst_customer ORDER BY cust_id desc
		jpql:from Customer order by custId desc
	5、聚合查询
		sql:SELECT COUNT(*) from cst_customer
		jpql:select count(*) from Customer

六、总结
1、入门程序
步骤:
1、创建配置文件
2、实体类
3、测试代码
2、配置文件
classpath:/META-INF/persistence.xml
配置数据的连接信息
配置框架参数:
hibernate.hbm2ddl.auto
create:先删除后创建
update:没有创建,有直接使用
none:不创建。
3、实体类
@Entity:必须有
@Table:必须有
@Column:不必须,如果属性和字段名不一致需要配置。
@Id:必须有,标记主键字段。
@GeneratedValue:需要框架自动生成主键时需要配置。
自增长
序列

自动选择
4、测试方法
EntityManangerFactory:工厂类对象。创建EntityManager对象。
EntityManager:
添加:persist
删除:remove
修改:merge
查询:find
getReference
5、jpql
把sql语句中的表名替换成实体类名
字段名替换成实体类属性名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值