作Web开发,首先要能将数据渲染到网页中展现,其次是要获取数据库数据展现到视图层,在前面的文章SpringBoot整合Thymeleaf模板引擎渲染web视图,咱们实现了从后端数据展现到视图层,那么下面咱们经过使用Spring Data Jpa来实现简单的数据库增删改查功能。java
<!--Web开发依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--junit测试依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--jpa依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 引入MySQL链接的依赖包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>
由于项目是基于Spring Boot 2.1.9.RELEASE版本的,而我本地使用的Mysql是5.X版本,因此这里引入mysql依赖的时候添加了版本信息,这样能够引入相应的版本,若是不加版本信息将会引入8.X版本的Mysql,可能在运行项目测试出现错误。mysql
# 数据库链接信息 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # 自动建立表结构的设置 spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
spring.jpa.properties.hibernate.hbm2ddl.auto
是hibernate的配置属性,其主要做用是:自动建立、更新、验证数据库表结构。该参数的几种配置以下:git
建立一个User实体,包含id(主键)、name(姓名)、age(年龄)属性,经过ORM框架其会被映射到数据库表中,因为配置了hibernate.hbm2ddl.auto
,而且配置的值为:create-drop,在应用启动的时候框架会自动去数据库中建立对应的表,应用中止时则会自动删除表信息。程序员
package com.w3cjava.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private Integer age; public User() { } public User(String name, int age) { this.name = name; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
下面针对User实体建立对应的Repository
接口实现对该实体的数据访问,以下代码:github
package com.w3cjava.dao; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import com.w3cjava.entity.User; /** * * @class UserRepository * @version 1.0.0 * @author cos * @desc 建立对应的Repository接口实现对该实体的数据访问 * */ public interface UserRepository extends JpaRepository<User, Long> { User findByName(String name); User findByNameAndAge(String name, Integer age); @Query("from User u where u.name=:name") User findUser(@Param("name") String name); }
经过继承JpaRepository接口,已经实现了基础的增(save)删(delete)改(save)查(findAll、findOne),具体能够查看API文档,所以开发过程当中,基本的数据访问层不须要开发者再本身定义。web
项目开发过程当中,每每对数据的访问都比较复杂,这时候就须要程序员本身定义相对复杂的Sql语句。具体能够参考API文档。spring
Spring Data Jpa还提供了经过解析方法名建立查询,好比上面的代码:sql
User findByName(String name); User findByNameAndAge(String name, Integer age);
整合Spring Data Jpa所须要的基本类和配置已经准备好,下面进行简单的单元测试。数据库
package com.w3cjava.service; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import com.w3cjava.SpringBootSpringDataJpaApplication; import com.w3cjava.dao.UserRepository; import com.w3cjava.entity.User; @RunWith(SpringRunner.class) @SpringBootTest(classes = {SpringBootSpringDataJpaApplication.class}) public class UserServiceTest { @Autowired private UserRepository userRepository; @Test public void test() throws Exception { // 建立10条记录 userRepository.save(new User("A", 10)); userRepository.save(new User("B", 20)); userRepository.save(new User("C", 30)); userRepository.save(new User("D", 40)); userRepository.save(new User("E", 50)); userRepository.save(new User("F", 60)); userRepository.save(new User("G", 70)); userRepository.save(new User("H", 80)); userRepository.save(new User("I", 90)); userRepository.save(new User("J", 100)); // 测试findAll, 查询全部记录 Assert.assertEquals(10, userRepository.findAll().size()); // 测试findByName, 查询姓名为FFF的User Assert.assertEquals(60, userRepository.findByName("F").getAge().longValue()); // 测试findUser, 查询姓名为FFF的User Assert.assertEquals(60, userRepository.findUser("F").getAge().longValue()); // 测试findByNameAndAge, 查询姓名为FFF而且年龄为60的User Assert.assertEquals("F", userRepository.findByNameAndAge("F", 60).getName()); // 测试删除姓名为AAA的User userRepository.delete(userRepository.findByName("A")); // 测试findAll, 查询全部记录, 验证上面的删除是否成功 Assert.assertEquals(9, userRepository.findAll().size()); } }
Cannot load driver class: com.mysql.jdbc.Driver: https://blog.csdn.net/linmeng...
spring Boot--junit单元测试: https://blog.csdn.net/adminBf...
源码:03.Spring-Boot-SpringDataJpasegmentfault
欢迎扫面下列二维码关注“余弦的自留地”公众微信号万物之中,但愿至美