社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
Spring Data Jpa是Spring Data中的一员,Jpa的全称是Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。而Spring Data Jpa则是spring提供的一套简化JPA开发的框架,按照约定好的【方法命名规则】写dao层接口,就可以在不写接口实现的情况下,实现对数据库的访问和操作。同时提供了很多除了CRUD之外的功能,如分页、排序、复杂查询等等。
更多关于SpringBoot的总结请点击:SpringBoot使用总结
本次用的是Maven作为构建工具,所有在pom.xml中添加Spring Data Jpa的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
##### datasource配置
# 数据库连接名
spring.datasource.username=root
# 数据库连接密码
spring.datasource.password=123
#数据库连接驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
# 数据库名称以及编码表
spring.datasource.url=jdbc:mysql:///mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8
#### spring.data的配置
# 数据库选择
spring.jpa.database = MYSQL
# 打印sql
spring.jpa.show-sql = true
# hibernate的启动策略 (create, create-drop, update, validate, none)
spring.jpa.hibernate.ddl-auto = none
# hibernate命名策略
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# hibernate方言
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
要使用Spring Data Jpa,首先要为实体类添加相应的注解,如果不添加这些注解则无法识别与数据库表的对应关系,或报错。
@Entity //标记为实体类
@Table(name="user") //对应的表
public class User implements Serializable {
@Id //主键注解
private Integer id;
private String name;
private String school;
private static final long serialVersionUID = 1L;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school == null ? null : school.trim();
}
}
/**
* @Auther: ARong
* @Date: 2019/1/10 15:48
* @Description: DATA JAP的使用
*/
@Repository
public interface UserRespository extends JpaRepository<User,Long>{
/**
* @auther: Arong
* @description: 通过name查询User的List
* @param name
* @return: List<User>
* @date: 2019/1/10 15:52
*/
List<User> findByName(String name);
/**
* @auther: Arong
* @description: 通过name删除
* @param name
* @return:
* @date: 2019/1/10 19:52
*/
@Modifying //update、delete一定要加这两个注解,不然报错
@Transactional
void deleteByName(String name);
}
/**
* @Auther: ARong
* @Date: 2019/1/10 16:05
* @Description: Jpa的配置类
*/
@Order(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@EnableTransactionManagement(proxyTargetClass = true)
@EntityScan(basePackages = {"com.iteason.springbootdatajpa.entity"}) //实体包扫描
@EnableJpaRepositories(basePackages = {"com.iteason.springbootdatajpa.dao"})//Respository包扫描
@EnableAutoConfiguration
public class JpaConfiguration {
@Bean
PersistenceExceptionTranslationPostProcessor persistenceExceptionTranslationPostProcessor() {
return new PersistenceExceptionTranslationPostProcessor();
}
}
/**
* @Auther: ARong
* @Date: 2019/1/10 15:54
* @Description: 测试Data Jpa
*/
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ContextConfiguration(classes = JpaConfiguration.class)
public class DataJpaTest {
@Autowired
private UserRespository userRespository;
@Test
public void fun1(){
//调用User的Jpa接口
List<User> userList = userRespository.findByName("arong1");
//流式遍历
userList.stream().forEach(n-> System.out.println(n.getName()));
}
@Test
public void fun2(){
userRespository.deleteByName("arong666");
}
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!