阿粉之前一直在使用传统的SSM进行开发,也就是我们所说的Spring,SpringMVC,Mybatis。就算用SpringBoot,也无非就是这么一个浓度。持久层框架的选择也是Mybaits,不过阿芬无意中发现现在有很多公司在用SpringDataJPA,所以今天阿芬就来说说这个SpringDataJPA。SpringDataJPA和Mybaits什么是JPA?是你对桌子的控制。jpa继承了这么多的表约束注解,也证明了jpa非常重视对这个数据库对象的控制。其实在阿芬眼里,JPA和Hibernate好像是一回事,区别不大。SpringDataJPA是SpringData的一个子模块。使用SpringData,基于“存储库”的概念实现JPA更加简单易行。SpringDataJPA的目标是大大简化数据访问层代码的编码。作为用户,我们只需要写自己的repository接口,里面包含一些个性化的查询方法,SpringDataJPA会自动实现查询方法。也就是说,它是什么?如果我们要写一个根据ID查询对象的方法比如:findUserById(StringId)首先这个方法的名字比较规范。如果你使用的是SpringDataJPA,你可以直接在版本库中使用这个方法名,但是如果你使用Mybaits,可能需要在xml文件中写SQL,或者在方法中,像这样,select*fromUserwhereid="xxxxx";什么是Mybaitsmybatis是针对sql的,你的结果完全是从sql中导出的,对象只是用来接收sql带来的结果集。你所有的操作都围绕着sql,包括根据条件动态确定sql语句。mybatis并不太关注对象的概念。只要能接收到数据。而且MyBatis不太强调面向对象的概念,更适合灵活的增删改查数据。因此,在系统分析和设计过程中,如果想发挥MyBatis的最大效用,一般使用步骤与hibernate有区别:通过整合整个系统来分析系统需要存储的数据项,绘制E-R关系图,根据上一步设计的表结构设计表结构,创建数据库,编写MyBatis的SQL映射文件,Pojos和数据库操作对应的接口方法,现在Mybaits插件有很多ins,用于反向生成Mybaits文件,比如通过自己创建的表直接生成dao文件和dao.xml文件。不过阿粉今天的重点不是Mybatis,而是SpringDataJPA。接下来阿凡就详细说说SpringDataJPA。SpringDataJPA的官方文档是什么?,这样做的好处是开发者可以基于JPA规范开发持久层,同时底层实现可以切换。SpringDataJpa在JPA之上又增加了一层抽象(Repository层的实现),大大简化了持久层开发和ORM框架切换的成本。为什么那么多公司选择Mybaits而不是SpringDataJPA?因为SpringDataJpa比Mybatis更难开发。主要原因是Hibernate封装了完整的对象-关系映射机制,使得内部实现相对复杂庞大,学习周期长。这显然不适合现在的捷径开发,但是由于部分公司开发最早,所以很多公司还是继续沿用 SpringDataJpa进行开发。接下来阿粉就说说这个SpringDataJpa是怎么用的。SpringDataJPA的使用方法我们直接使用SpringBoot集成SpringDataJpa进行操作。展示如何使用SpringDataJpa。创建一个SpringBoot项目,然后添加我们的依赖,也可以在创建的时候选择,比如选择接下来我们需要的所有依赖,像这样。这个时候我们就直接勾选lombok,然后是SpringWeb,还有我们的数据库驱动的Jpa依赖。创建完成后可以看到已经为我们添加了我们需要的依赖环境saveAll(Iterableentities);voidflush();saveAllAndFlush(Ite??rableentities);/**@deprecated*/@DeprecateddefaultvoiddeleteInBatch(Ite??rablefindAll(Exampleexample);findAll(Exampleexample,Sortsort);方法真的很多,主要还是看你怎么用,大家试试吧。@RestController@RequestMapping("/users")publicclassUserController{@AutowiredprivateUserServiceuserService;@RequestMapping(value="/save")publicUsersaveUser(){Useruser=newUser();user.setUserName("zhangSan");user.setUserPassword("123456");returnuserService.saveUser(user);}}Service方法直接调用了UserDao中的save,也就是父类中的save方法。publicinterfaceUserService{UsersaveUser(Useruser);}@ServicepublicclassUserServiceImplimplementsUserService{@AutowiredprivateUserDaouserDao;@OverridepublicUsersaveUser(Useruser){returnuserDao.save(user);}}然后我们调用方法,然后查看数据库,我们已经成功插入了一条数据,也就是说,这个方法没有错,那么是不是可以把所有的方法都一个个试一遍呢?阿芬这里就不一一演示了,毕竟很简单。如果你觉得这些方法不能满足你的需求,那你还得继续看下去,毕竟它们确实不能满足你的日常需求。比如对于多参数查询,此时会出现And。需要的话还得去官方文档查看Jpa官方文档。如果要使用SQL语句呢?这时候你就得写一个自定义的方法,然后在Dao的自定义方法上加上@Query注解,把你的SQL语句写在里面。@Query("select*fromUserwhereu.user_password=?1")UsergetByPassword(Stringpassword);?1其实就是代表参数。如果有多个参数,可以用?2看起来很像Mybaits的#{0}。Jpa的简单使用你学会了吗?说实话,我觉得这种代码和SQL整合的方式确实不太好,至少从观看的角度来说,体验很差。
