美文网首页
springboot+jpa

springboot+jpa

作者: 不知道该取什么名字 | 来源:发表于2019-01-19 11:35 被阅读0次

    想做一个springboot+jpa的demo

    1 遇到问题

        Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataServiceImpl': Unsatisfied dependency expressed through field 'agvStatusDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'agvStatusDao': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract void com.puzek.sp.Report.dao.AgvStatusDao.queryAgvStatusById(java.lang.Integer,java.lang.String)!

    遇到这种问题多半是自定义的sql有问题,自定义sql语句一般操作的是表对应的实体类,而不时数据库中的表名,字段也是实体类中的字段,例如: 

            我的表名是agvstatus,然后我对应的实体类是AgvStatus,此时sql语句不能写成 update agvstatus set uptime=:uptime where id=:id,而应如下图的格式使用实体类.属性名

    2.问题2,少了事务注解@Transactional

    org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query

    注释掉此注解就会报错

    3、新增一条数据

        jpa自带保存数据的方法saveAndFlush()方法,他是所有的选项都必填的,就连主键ID也必须要自己设置的这种,一点都不灵活,比如主键我们设置了不能为空的限制,每次增加都需要手动去设置自增长id,可是一般我们都不太确定下一个id是什么

    serviceImpl junit测试

    想要灵活性的话,我们采取自定义的方式进行插入自己想插入的值,因为我的主键设置了不能为空的限制,所以属于必填选项,主键自增可以采用这种nextval('status_id_seq') 这种方式查询下一个主键id(ps:我用的是postgresql,可能每个数据的查询下一个自增长的id可能不太一样)

    4、修改数据

    dao junit测试

    5.删除

    删除直接使用的是jpa自带的通过id删除的方法的,当然如果不想要使用id删除也可以自定义使用自定义sql

    junit测试

    6.条件查询

    通过用户名和密码查询用户,图中的两种方式都是可以的,第一个注释掉的是采用自定义sql的方式,第二种则是采用jpa的命名方式,要查询的条件名首字母大写采用and连接起来,测试两种方法也是通过的

    7.分页查询加排序加条件

    首先继承CrudRepository, JpaSpecificationExecutor这两个类

    service junit测试

    返回的是这种格式的数据:
    {"total":3,"content":[{"id":3,"name":"developer","pwd":"$2a$10$tsKDesGQrzSZMwnykAe2B.WA3Z95HIAY4Hf6LrBGLSR8vofs6rouS","description":"研发用户","roid":3},{"id":2,"name":"test","pwd":"$2a$10$tsKDesGQrzSZMwnykAe2B.WA3Z95HIAY4Hf6LrBGLSR8vofs6rouS","description":"测试用户","roid":2},{"id":1,"name":"admin","pwd":"$2a$10$tsKDesGQrzSZMwnykAe2B.WA3Z95HIAY4Hf6LrBGLSR8vofs6rouS","description":"超级用户","roid":1}],"pageable":{"sort":{"orders":[{"direction":"DESC","property":"id","ignoreCase":false,"nullHandling":"NATIVE"}]},"page":0,"size":5}}

    8.自定义SQL接收参数时有两种方式

    冒号+变量名 如上面的通过用户名和密码查询 :name

    占位符? 如上面的新增 1?, 2?

    相关文章

      网友评论

          本文标题:springboot+jpa

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