前言
一、JPA是什么?
JPA是sun官方提出的java持久化规范.它为java开发人员提供了一种对象/关系映射工具来管理java应用中的关系数据.为了简化现有的持久化开发工作和整合orm技术,结束Hibernate丶TopLine丶JDO等ORM框架各自为营的局面.
二、快速上手
1.pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
2.application.properties
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/demo
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#mysql数据库连接
#JPA相关信息
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
spring.jpa.properties.hibernate.format_sql=true
#logging.level.root=DEBUG
spring.jpa.properties.hibernate.hbm2ddl.auto=update
3.实体类
import javax.persistence.*;
@Entity //标注为实体
@Table(name="user") //对应mysql表
public class User{
@Id //标注为主键 唯一
@GeneratedValue(strategy = GenerationType.IDENTITY) //ID自增
@Column(name = "id") //列名
private Integer id;
@Column(name = "user_name")
private String userName;
@Column(name = "user_password")
private String userPassword;
}
4.编写Repository
public interface UserRepository extends JpaRepository<User, Integer> {
//JpaRepository<User, Integer> 提供了一些普通通用的方法 (增丶删丶改,查)
//自定义方法(增丶删丶改,查)需要按照一定命名规则
public List<User> findByUserName(String userName); //按照用户名查询
public List<User> findByUserNameLike(String userName); //按照用户名模糊查询
//如果是删除和修改方法 需要添加 @Modifying
@Modifying
@Query("delete from User where id=?1") //自定义HQL
//User 代表实体类
@Query(value = "select * from demo",nativeQuery = true) //原生sql 添加参数nativeQuery = true
public void deleteById(Integer id);
@Transactional(timeout = 10) //事务(操作超时设置等)
@Modifying
@Query("update User d set d.userName=?1 where d.id=?2")
public int updateById(String userName, Integer id);
@Query("select u from User u") //分页
public Page<User> findPageByMap(Pageable pageable);
//除了@Query还可以在实体类上标明
@NamedQueries(@NamedQuerie(name="User.findUserByName",query="select u from User u"))
}
5.编写测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class Demo1ApplicationTests {
//注入
@Resource
private DemoRepository demoRepository;
@Test
public void contextLoads() {
}
@Test
public void testGet() { //测试查找
Demo user = demoRepository.findById(1).get();
System.out.println(user.getUserName());
}
@Test
public void testAdd() { //测试新增
Demo user = new Demo();
user.setUserName("33333");
user.setUserPassword("33333");
Demo num = demoRepository.save(user);
System.out.println(num);
}
//自定义方法
@Test
public void testFindByUserName() {
List<Demo> users = demoRepository.findByUserName("111");
users.forEach(u -> System.out.println(u)); //java8版本循环
}
@Test
public void testFindByUserNameLike() { //模糊查询加%
List<Demo> users = demoRepository.findByUserNameLike("%2%");
users.forEach(u -> System.out.println(u));
}
@Test
public void testDeleteById() { //删除
demoRepository.deleteById(1);
}
@Test
public void testUpdateById() { //修改
int um = demoRepository.updateById("222", 2);
System.out.println(um);
}
@Test
public void testFindPageByMap() {
int page = 0, size = 1; //分页要素,页数从0开始
Sort sort = new Sort(Sort.Direction.DESC, "id"); //控制分页排序
Pageable pageable = PageRequest.of(page, size, sort); //控制分页辅助类
Page<Demo> userPage = demoRepository.findPageByMap(pageable);
System.out.println("总记录数:" + userPage.getTotalElements());
}
}
接下来就由小伙伴们多实践啦!!!
Spring Data JPA非常强大,且容易上手:在DAO层只需继承默认接口,无需手写SQL语句。测试类进行测试时,Spring Data JPA会根据DAO调用方法,自动生成SQL语句,进行表数据的增删改查。