008-JPA&MySQL

作者: 郭艺宾 | 来源:发表于2018-06-14 22:00 被阅读8次

单独建一个项目,加入测试和热部署依赖,其它全部去掉,然后加入下面两个依赖:

这样jps和mysql就加入并自动配置进来了,可以进行数据库开发。

在配置文件里加入数据库基本连接配置:

基本的内容都配置好和加进来就可以写代码了,下面是一个JPA风格的实体类,以用过的 SYS_USER 表为例,实体类如下:

@Entity注解说明是个实体类

@Table注解表名实体类对应的表名,表名为name值

@Id定义一条记录的唯一标识,并结合注解@GeneratedValue将其设置为自动生成

接下来使用JPA持久化,定义一个接口,继承于JPA资源库JpaRepository接口,使用@Repository注解将这个接口也定义为一个资源库,使它能被其它资源使用,并为其它程序提供存取数据库的功能。代码如下:

关于SYS_USER的持久化代码已经完成了,可以看到过程很简单,接下来进行测试,进入测试类,调用接口的方法,首先测试一个新增方法:

执行,可以看到如下结果:

原因是,MySQL对lower_case_table_names使用区分大小写的表名比较设置  (可能值为'0')。但是,FishEye在表名  FE-4276中不一致-数据库表OPEN的大小写不一致。

我的解决办法是,在配置文件中加入一行配置:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

然后执行测试代码,可以看到执行成功,然后看下一下数据库,发现新增成功:

在spirngboot中,使用JPA加数据库,可以很容易实现持久化,几乎不需要什么代码。增删改查的写法都与这个例子类似。

看一下分页查询的写法,首先数据库准备九条数据:

然后每页设置为3条,分别查询第一页和第二页,先查询第二页,如下:

控制台日志为:

查询第一页,如下:

控制台日志为:

观察可以得出,JPA页码从0开始,使用要注意!!!

进入父接口JpaRepository,可以看到已经定义好的可以直接使用的很多方法,如下:

这些都是可以在上面及其简单的配置基础上直接使用的。

JPA还提供了一些自定义声明方法的规则,例如,在接口中使用关键字findBy,readBy,getBy,作为方法名的前缀,拼接实体类中的属性字段(首个字母大写),并可以选择拼接一些SQL查询关键字来组合成一个查询方法,例如,对于用户实体,下列查询关键字可以这样使用:

And, 例如:findByIdAndName(Long id, String name)

Or,例如:findByIdOrName(Long id, String name)

Between,例如:findByIdBetween(Long startId, Long endId)

LessThan,例如:findByIdLessThan(Long endId)

GreaterThan,例如:findByIdGreaterThan(Long startId)

IsNull,例如:findByNameIsNull()

IsNotNull,例如:findByNameIsNotNull()

NotNull,例如:与IsNotNull等价

Like,例如:findByNameLike(String name)

NotLike,例如:findByNameNotLike(String name)

OrderBy,例如:findByNameOrderByIdAsc(String name)

Not,例如:findByNameNot(String name)

In,例如:findByNameIn(Collection<String>  nameList)

NotIn,例如:findByNameNotIn(Collection  nameList)

又如,下面对用户实体类自定义的方法声明,它们都是符合JPA规则的,这些方法也不用实现,JPA将会代理实现这些方法:

SysUser findByNameLike(String name);

SysUser readByName(String name);

List<User> getByIdLessThan(Long id);

在多个实体类中,可以使用@ManyToOne   @ManyToMany  等注释在实体中实现关系对应和级联操作,如果数据库中没有物理外键等内容,可以不写这类注解。

spirngboot中,整合JPA与mysql就是这么简单,可以用JDBC连接的都可以使用这种方式持久化。

在自己定义的接口中,可以使用@Query注解来自定义SQL语句。注意使用的都是类名和属性名,例如:

在自己的项目中,可以根据项目组的规范,自定义接口来扩展JPA的接口。定义一些新的通用方法。

所有支持JDBC和JPA的关系型数据库都可以按照上面的例子进行操作。

相关文章

网友评论

    本文标题:008-JPA&MySQL

    本文链接:https://www.haomeiwen.com/subject/xysueftx.html