天天看點

SpringBoot三:整合SpringDataJPA

SpringDataJPA

SpringBoot三:整合SpringDataJPA
SpringBoot三:整合SpringDataJPA

Spring Data Repository的核心接口是Repository(好像也沒什麼好驚訝的)。這個接口需要領域類(Domain Class)跟領域類的ID類型作為參數。這個接口主要是讓你能知道繼承這個類的接口的類型。CrudRepository 供了對被管理的實體類的一些常用CRUD方法

SpringBoot三:整合SpringDataJPA
使用jpa的命名查詢

當使用findBy/readBy/getBy + 某個字段時,比如:

也可以多字段查詢,如:

spring jpa的相關命名規則如下:

SpringBoot三:整合SpringDataJPA
SpringBoot三:整合SpringDataJPA
SpringBoot三:整合SpringDataJPA
SpringBoot三:整合SpringDataJPA
自定義注解查詢

除了繼承JpaRepository中的命名方法,有時候不可避免的要自定義查詢方法。上面的單元測試中findOne就是自定義的查詢方法。

使用@Query注解來查詢,注解查詢本質上仍然使用的是HQL文法,是以下面的是針對對象查詢的。(我在測試時由于粗心大意将User寫成user被坑了不少時間)

@Query("select u from User u where u.id = :id")
User findOne(@Param("id")String id);
           

整合SpringDataJPA

pom檔案引入以下依賴
<dependencies>
	<!-- Spring Boot web依賴 -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</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>
	</dependency>
</dependencies>
           
建立資料庫
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `name` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '張三');
INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');
           
application.properties配置
#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

#JPA Configuration:
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
           
代碼編寫

建立實體配置實體

@Entity
@Table(name = "user")
public class User {
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column
	private Integer id;
	@Column
	private String username;
	@Column
	private String password;
	@Column
	private String name;
	//此處省略setter和getter方法... ...
}
           

UserDao

public interface UserDao extends JpaRepository<User, Integer> {
}
           

UserService

@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDao userDao;

	@Override
	public User findUserById(int id) {
		Optional<User> optional = userDao.findById(id);
		return optional.get();
	}
}
           

Controller

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    // http://localhost:8080/user/1
	@RequestMapping("/user/{id}")
	private User findUserById(@PathVariable Integer id) {
		User user = userService.findUserById(id);
		return user;
	}
}
           
在使用spring boot操作資料庫的時候,莫名其妙抛了一個錯誤:
配置spring.datasource.url需要加上一些必要的字尾資訊(改成下面的配置就可以了)
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/javakf_test?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC	
           

代碼托管:springboot_springdatajpa

繼續閱讀