前言
首先在这里说下,文章只是我的平时工作时的有感而发,不去讨论 jpa 与 mybatis 的孰好孰坏,mybatis 虽然书写起来麻烦了点,但是优点在于节点可控(这个很重要),jpa 的优点在于语义化的,书写简洁,工作量少(用起来很爽)。
1.依赖
pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
这里如果是新建项目来测试,记得加上数据库连接的依赖:
pom
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.0.33</version>
</dependency>
2.配置文件
yml
spring:
jpa:
#方言
database-platform: ${DB_PLATFORM:org.hibernate.dialect.MySQLDialect}
#是否打印sql语句
show-sql: true
properties:
hibernate.format_sql: true
#启动时根据实体自动更新数据库表
hibernate:
ddl-auto: update
在这里说下ddl-auto这个配置,怕有些读者不理解,这个配置有五种选择:
含义大家可以参考文章:blog.csdn.net/qq_39500197...
3.实体类
java
@Getter
@Setter
@Entity
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "user")
@ToString(callSuper = true)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.UUID)
@Column(columnDefinition = "varchar(32) comment '主键编码'")
private String id;
@Column(columnDefinition = "varchar(64) comment '名称'")
private String name;
@Column(columnDefinition = "int comment '性别'")
private Integer gender;
}
4.持久层
java
@Repository
public interface UserRepository extends JpaRepository<User, String> {
/**
* 根据名称查询 user
*
* @param name
* @return
*/
User findByName(String name);
/**
* 根据性别删除 user
*
* @param integer
*/
void deleteAllByGender(Integer integer);
/**
* 更新 user
*
* @param name
* @param id
*/
@Modifying
@Query(value = "update user u set u.name = :name where u.id = :id",nativeQuery = true)
void updateByName(@Param("name") String name,@Param("id") String id);
}
这我列举了几种形式,对于查询和删除是支持语义化的,不用写sql,但是更新时需要手写sql的
5.控制层
java
@RestController
@RequestMapping("/api/user")
public class UserController {
@Resource
private UserRepository userRepository;
@GetMapping
public User findUser(){
return userRepository.findByName("zhangsan");
}
}
测试接口:GET http://localhost:8080/api/user
可以得到返回体:
json
{
"id": "1",
"name": "zhangsan",
"gender": 1
}
这个得提前在数据库插入一条哈。
能正常得到返回体,就说明成功了!