二、springboot使用jpa

       花了几天时间,好好看了看springboot的jpa部分,总结了常用的形式。

          1.通过STS工具添加jpa的依赖项

   要连mysql,测试的时候需要web,顺便添加了lombok不写set和get方法了。

          

          2.添加配置

         application.properties:

              要连接mysql、设置jpa的两个参数,一个是更改entity后更新表,还一个是显示sql,为了查错用

             

         添加一个config类,开启jpa,添加扫描repository路径

             

          最后需要建立一个web请求入口,方便调用调试,增加web很简单,这里就不说了。

         3。添加entiry

        写了两个类,一个MemberInfo 一个OrderInfo,OrderInfo包含了一个外键,为了测试一对多。

        与数据库字段名相同的,可以不写column注解

        

          4.建立repository

        Repository是springboot data中的接口,不光是与db有关,相当于是个模板,与mongo、redis等都有一定关系,这里就不提了。

        JpaRepository是使用jpa需要继承的接口,这个接口继承自Repository,只不过中间还有几层,包括crudRepository、pageRepository。

        继承关系JpaRepository->PagingAndSortingRepository->CrudRepository->Repository

        不同的接口之间包含了一些已有方法,其中包含分页。

        下面建立自己的:一共建立了4个Repository,其中有一个是专门为了写sql的

        

        @EnableJpaRepositories("com.xuezk.study.repository") 注解会扫描所有 extends JpaRepository的接口,但使用了@NoRepositoryBean注解的是不会被实例化的。其他两个接口直接继承Base就可以了。

         

         

          专门用于写sql的接口:

          

          说明:

               1.每个方法上都可以使用@Query注解去写sql,但jpa的sql语法与hql相似,写的不是字段名,而是类里面的属性名。

               2.jpa,会根据方法名字,比如findByName,就是根据name属性去查,关于Pageable,这是分页用的,作为参数后,执行的sql最后就会有limit限制。

               3.关于最后接口中的 new MemberInfo,这么写是为了返回的结果存入对象内,否则返回的结果会是数组,与hibernate一样。

           5.关于Pageable

          作为分页的参数,Pageable却是一个接口,翻开源码包下面有一个PageRequest

          

                 Pageable实例化并不难

                 

             6。最后

           我自己写的例子包含了一个service,分别去调用这几个Repository的方法,顺便打印出来。

           jpa有一个特点我很喜欢,就是findBy的后面可以是对象,比如通过外键对象去查本条记录。

           例子放在https://github.com/xuezhankui/SpringbootExample,使用testcontroller调用

           

  

猜你喜欢

转载自www.cnblogs.com/xuezhankui/p/10506412.html