SpringDataJpa学习笔记-path01(基础知识)

SpringDataJpa学习笔记-path01(基础知识)

一:什么是SpringDataJpa(如图)

spring data jpa、jpa以及ORM框架之间的关系

二:笔记

一、什么是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语句中的表名替换成实体类名
		字段名替换成实体类属性名。
	
发布了74 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/STUDENTstudent123/article/details/100127380
今日推荐