作者
阿文
责编
屠敏
什么是JPA
大家好,今天我和大家聊一下关于SpringJPA的相关知识,我们先来了解下什么是JPA?
JPA(JavaPersistenceAPI)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营的凌乱局面。JPA在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从上面的解释中我们可以了解到JPA是一套规范,而类似Hibernate,TopLink,JDO这些产品是实现了JPA规范。
了解了什么是JPA,我们来看看本文的主角——springdatajpa。
springdatajpa
SpringDataJPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,底层使用了Hibernate的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用SpringDataJPA可以极大提高开发效率。
什么意思呢?如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是SpringDataJPA框架功能更进一步,为我们做了一个数据持久层框架几乎能做的任何事情。以Springboot整合MyBatis为例,比如我们要向数据库中插入一些用户的数据,那么我们需要先定义用户的实体类,然后我们要定义一个UserDao:
RepositorypublicclassUserDao{AutowiredJdbcTemplatejdbcTemplate;publicintaddUser(Useruser){returnjdbcTemplate.update(INSERTINTOt_user(username,jobs,phone)VALUE(?,?,?),user.getName(),user.getJobs(),user.getPhone());}publicintupdateUser(Useruser){returnjdbcTemplate.update(UPDATEt_userSETusername=?,jobs=?,phone=?WHEREid=?,user.getName(),user.getJobs(),user.getPhone(),user.getId());}publicintdeleteUser(Integerid){returnjdbcTemplate.update(DELETEFROMt_userWHEREid=?,id);}publicUsergetUserById(Integerid){returnjdbcTemplate.queryForObject(SELECT*FROMt_userWHEREid=?,newBeanPropertyRowMapper(User.class),id);}publicListUsergetAllUser(){returnjdbcTemplate.query(SELECT*FROMt_user,newBeanPropertyRowMapper(User.class));}}以及UserService
ServicepublicclassUserService{AutowiredUserDaouserDao;publicintaddUser(Useruser){returnuserDao.addUser(user);}publicintupdateUser(Useruser){returnuserDao.updateUser(user);}publicintdeleteUser(Integerid){returnuserDao.deleteUser(id);}publicUsergetUserById(Integerid){returnuserDao.getUserById(id);}publicListUsergetAllUser(){returnuserDao.getAllUser();}}最后,我们在去调用对应的service中的方法。这是传统的方式,如果使用mapper,会稍微简单一些,比如我们要添加mapper
MapperpublicinterfaceUserMapper{intaddUser(Useruser);intdeleteUser(intid);intupdateUser(Useruser);UsergetUserById(Integerid);ListUsergetAllUsers();}然后定义一个UserMapper.xml,添加对应的CURDSQL语句,做好映射,然后改造service,例如
ServicepublicclassUserService{AutowiredUserMapperuserMapper;publicintaddUser(Useruser){returnuserMapper.addUser(user);}publicintupdateUser(Useruser){returnuserMapper.updateUser(user);}publicintdeleteUser(Integerid){returnuserMapper.deleteUser(id);}publicUsergetUserById(Integerid){returnuserMapper.getUserById(id);}publicListUsergetAllUser(){returnuserMapper.getAllUsers();}}发现什么问题了吗?如果我们要去实现多个表的操作,我们需要定义不同的实体类,然后实现对应的mapper,然后写同样的增删改查方法,最后调用。这也太麻烦了些,而Springdatajpa则可以轻松的帮我们实现这些繁琐重复且没有技术含量的操作。我们一起看下吧!
案例演示
1.首先,我们需要配置pom.xml
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-jpa/artifactId/dependency
2.然后是application.properties的配置
spring.datasource.url=jdbc:mysql://.0.0.1:/test?useUnicode=truecharacterEncoding=utf-8serverTimezone=UTCuseSSL=truespring.datasource.username=rootspring.datasource.password=spring.datasource.driver-class-name=