这里重点简单介绍下spring.jpa.properties.hibernate.hbm2ddl.auto有几种配置:
- create:表示每次加载Hibernate时都会删除上一次生成的表(包括数据),然后重新生成新表,即使两次没有任何修改也会这样执行 。适用于每次执行单测前清空数据库的场景 。
- create-drop:表示每次加载Hibernate时都会生成表,但当SessionFactory关闭时,所生成的表将自动删除 。
- update:最常用的属性值,第一次加载Hibernate时创建数据表(前提是需要先有数据库),以后加载Hibernate时不会删除上一次生成的表,会根据实体更新,只新增字段,不会删除字段(即使实体中已经删除) 。
- validate:每次加载Hibernate时都会验证数据表结构,只会和已经存在的数据表进行比较,根据model修改表结构,但不会创建新表 。
- 不配置此项,表示禁用自动建表功能
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect 这是数据库的方言配置 。
3.接下来我们建立用户实体类
@Entitypublic class User {@Id@GeneratedValueprivate long id;@Column(able = false, unique = true)private String userName;@Column(able = false)private String password;@Column(able = false)private int age;}这里的一些注解解释如下:- @Entity 是一个类注解,用来注解该类是一个实体类用来进行和数据库中的表建立关联关系,首次启动项目的时候,默认会在数据中生成一个同实体类相同名字的表(table),也可以通过注解中的 name 属性来修改表(table)名称,如@Entity(name=“user”) , 这样数据库中表的名称则是 user。该注解十分重要,如果没有该注解首次启动项目的时候你会发现数据库没有生成对应的表 。
- @Table 注解也是一个类注解,该注解可以用来修改表的名字,该注解完全可以忽略掉不用,@Entity 注解已具备该注解的功能 。
- @Id 类的属性注解,该注解表明该属性字段是一个主键,该属性必须具备,不可缺少 。
- @GeneratedValue 该注解通常和 @Id 主键注解一起使用,用来定义主键的呈现形式,该注解通常有多种使用策略,先总结如下:
- @GeneratedValue(strategy= GenerationType.IDENTITY) 该注解由数据库自动生成,主键自增型,在 mysql 数据库中使用最频繁,oracle 不支持 。
- @GeneratedValue(strategy= GenerationType.AUTO) 主键由程序控制,默认的主键生成策略,oracle 默认是序列化的方式,mysql 默认是主键自增的方式 。
- @GeneratedValue(strategy= GenerationType.SEQUENCE) 根据底层数据库的序列来生成主键,条件是数据库支持序列,Oracle支持,Mysql不支持 。
- @GeneratedValue(strategy= GenerationType.TABLE) 使用一个特定的数据库表格来保存主键,较少使用 。
@Column 是一个类的属性注解,该注解可以定义一个字段映射到数据库属性的具体特征,比如字段长度,映射到数据库时属性的具体名字等 。
@Transient 是一个属性注解,该注解标注的字段不会被映射到数据库当中 。
4. 声明 `UserRepository`接口,继承`JpaRepository`,如下所示
public interface UserRepository extends JpaRepository<User, Long> {}这里的 JpaRepository继承了接口PagingAndSortingRepository和QueryByExampleExecutor 。而,PagingAndSortingRepository又继承CrudRepository 。因此,JpaRepository接口同时拥有了基本CRUD功能以及分页功能 。因此,这里我们可以继承JpaRepository,从而获得Spring为我们预先定义的多种基本数据操作方法 。
5.然后我们定义一个测试类,这里我们演示下添加操作,@Transactional 表示开启事务防止出现脏数据 。
……@Autowiredprivate UserRepository userRepository;@Test@Transactionalpublic void userAddTest {User user = new User;user.setUserName("吴彦祖");user.setAge(30);user.setPassword("123456");userRepository.save(user);User item = userRepository.findByUserName("wyk");log.info(JsonUtils.toJson(item));}6.接下来我们说下查询,查询可以分为基本查询和自定义查询,一种是 spring data 默认已经实现,只需要要继承`JpaRepository`,一种是根据查询的方法来自动解析成 SQL 。
推荐阅读
- 一文理清,竞价推广的核心操作和优化思路
- 一 当用SpringApplication.run的时候发生了什么
- Spring简单入门教程(二)spring的体系结构
- Spring启动原理和可扩展设计分析
- 一文搞懂 SQL:基础知识和业务实践总结
- 搞懂 面向对象 的核心思想,JAVA中封装、包和访问权限的知识点
- 一文搞懂队列
- 一文了解数据仓库
- 建议收藏学习 一篇文章弄懂SpringBoot中WebMvcConfigurer
- 一 基本Spring Cloud的微服务架构搭建及应用
