多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
**1. 引入`spring-boot-starter-data-jpa`** ```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>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.32</version> </dependency> ``` **2. `application.yml`** ```yml spring: datasource: url: jdbc:mysql://127.0.0.1:3306/learnjpa?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: uhg</flEt3dff driver-class-name: com.mysql.cj.jdbc.Driver type: com.zaxxer.hikari.HikariDataSource jpa: #使用MySQL数据库 database: MYSQL database-platform: org.hibernate.dialect.MySQLDialect #控制台输出正在执行的SQL语句 show-sql: true hibernate: #create:每次运行程序时,都会重新创建表,故而数据会丢失 #create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表 #upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用) #validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错 #none: 禁用DDL处理 ddl-auto: update ``` <br/> **3. 创建实体类** ```java @Data @Entity //声明实体 @Table(name = "tb_user") //实体与表建立映射关系,name就是表名 public class User implements Serializable { /** * @Id:主键 * strategy:主键生成策略。GenerationType.IDENTITY使用数据库的生成策略,如果是mysql就是自增键。 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; /** * @Column:属性与表字段建立映射关系。 name就是表的字段名 */ @Column(name = "username") private String username; @Column(name = "password") private String password; @Column(name = "email") private String email; } ``` <br/> **4. 创建查询接口** ```java /** * 1. JpaRepository<实体类,主键类型>接口:用来完成基本CRUD操作。 * 2. JpaSpecificationExecutor<实体类>:用来完成复杂的查询,如分页等查询操作。 */ public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> { } ``` <br/> **5. 简单的增删改查** >[info]JPA 可以根据实体自动建表,不需要自己手动到数据库中建表。 ```java @SpringBootTest public class UserRepositoryTests { @Autowired private UserRepository userRepository; /** * 新增一条数据。 */ @Test public void save() { User user = new User(); user.setUsername("张三"); user.setPassword("zhangsan"); user.setEmail("zhangsan@qq.com"); User result = userRepository.save(user); System.out.println(result); //User(id=1, username=张三, password=zhangsan, email=zhangsan@qq.com) } /** * 新增与更新用的是同一个方法,如果id已经存在则是更新,否则就是新增。 */ @Test public void update() { User user = new User(); user.setId(1); user.setUsername("李四"); user.setPassword("lisi"); user.setEmail("lisi@qq.com"); User result = userRepository.save(user); System.out.println(result); //User(id=1, username=李四, password=lisi, email=lisi@qq.com) } /** * 根据id查询 */ @Test public void findOne() { Optional<User> result1 = userRepository.findById(1); System.out.println(result1.get()); //User(id=1, username=李四, password=lisi, email=lisi@qq.com) } /** * 根据id删除数据 */ @Test public void delete() { userRepository.deleteById(1); } } ```