SpringDataJPA
Spring Data Repository的核心接口是Repository(好像也沒什麼好驚訝的)。這個接口需要領域類(Domain Class)跟領域類的ID類型作為參數。這個接口主要是讓你能知道繼承這個類的接口的類型。CrudRepository 供了對被管理的實體類的一些常用CRUD方法
使用jpa的命名查詢
當使用findBy/readBy/getBy + 某個字段時,比如:
也可以多字段查詢,如:
spring jpa的相關命名規則如下:
自定義注解查詢
除了繼承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