一文搞懂 Spring JPA


一文搞懂 Spring JPA

文章插图
作者 | 阿文
责编 | 屠敏
一文搞懂 Spring JPA

文章插图
什么是 JPA
大家好,今天我和大家聊一下关于Spring JPA 的相关知识,我们先来了解下什么是 JPA ?
JPA (JAVA Persistence API) 是 Sun 官方提出的 Java 持久化规范 。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据 。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的凌乱局面 。JPA 在充分吸收了现有 Hibernate,TopLink,JDO 等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点 。从上面的解释中我们可以了解到JPA 是一套规范,而类似 Hibernate,TopLink,JDO 这些产品是实现了 JPA 规范 。
了解了什么是 JPA,我们来看看本文的主角——spring data jpa 。
一文搞懂 Spring JPA

文章插图
spring data jpa
Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作 。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率 。
什么意思呢?如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便 。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情 。以Springboot整合MyBatis为例,比如我们要向数据库中插入一些用户的数据,那么我们需要先定义用户的实体类,然后我们要定义一个UserDao:
@Repositorypublic class UserDao {@AutowiredJdbcTemplate jdbcTemplate;public int addUser(User user){return jdbcTemplate.update("INSERT INTO t_user(username,jobs,phone) VALUE (?,?,?)",user.getName,user.getJobs,user.getPhone);}public int updateUser(User user){return jdbcTemplate.update("UPDATE t_user SET username=?,jobs=?,phone=? WHERE id=?",user.getName,user.getJobs,user.getPhone,user.getId);}public int deleteUser(Integer id){return jdbcTemplate.update("DELETE FROM t_user WHERE id=?",id);}public User getUserById(Integer id){return jdbcTemplate.queryForObject("SELECT * FROM t_user WHERE id =?",new BeanPropertyRowMApper<>(User.class),id);}public List<User> getAllUser{return jdbcTemplate.query("SELECT * FROM t_user",new BeanPropertyRowMapper<>(User.class));}}以及UserService
@Servicepublic class UserService {@AutowiredUserDao userDao;public int addUser(User user){return userDao.addUser(user);}public int updateUser(User user){return userDao.updateUser(user);}public int deleteUser(Integer id){return userDao.deleteUser(id);}public User getUserById(Integer id){return userDao.getUserById(id);}public List<User> getAllUser{return userDao.getAllUser;}}最后,我们在去调用对应的service 中的方法 。这是传统的方式,如果使用mapper,会稍微简单一些,比如我们要添加mapper
@Mapperpublic interface UserMapper {int addUser(User user);int deleteUser(int id);int updateUser(User user);User getUserById(Integer id);List<User> getAllUsers;}然后定义一个UserMapper.xml,添加对应的CURD SQL语句,做好映射,然后改造service,例如
@Servicepublic class UserService {@AutowiredUserMapper userMapper;public int addUser(User user){return userMapper.addUser(user);}public int updateUser(User user){return userMapper.updateUser(user);}public int deleteUser(Integer id){return userMapper.deleteUser(id);}public User getUserById(Integer id){return userMapper.getUserById(id);}public List<User> getAllUser{return userMapper.getAllUsers;}}发现什么问题了吗?如果我们要去实现多个表的操作,我们需要定义不同的实体类,然后实现对应的mapper,然后写同样的增删改查方法,最后调用 。这也太麻烦了些,而Spring data jpa 则可以轻松的帮我们实现这些繁琐重复且没有技术含量的操作 。我们一起看下吧!
一文搞懂 Spring JPA

文章插图
案例演示
1.首先,我们需要配置pom.xml
<dependency><groupId>MySQL</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency>2.然后是application.properties 的配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=truespring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.jpa.properties.hibernate.hbm2ddl.auto=createspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialectspring.jpa.show-sql=true


推荐阅读