# 引入pom依赖
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
```
# 编写配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123
# 我本地是8.0以上的数据库,所以用这个
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true
hibernate:
naming:
# 这个配置是因为hibernate的默认命名策略: userName <---> user_name
# 所以如果表中列名如果也是userName, 那么是会映射失败的
# 这个时候即便是在属性名上配置 @Column(name = "userName") 仍然无效,
# 为了生效,加上下边这个配置就可以了
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# 编写Repository
```java
//这个地方不加 @Repository 也是没有问题的,spring仍然可以扫描到
//这个地方也可以写 接口继承 JpaRepository,
// JpaRepository这个接口首先默认给你提供了一些方法,然后是根据泛型Student
// 通过反射可以解析出所有的字段,那么你的所有操作无非就是基于这些字段的操作
// 因为你的sql操作是基于表中的列,实体的字段和表中的列是对应的
// 也可以写 类 继承S impleJpaRepository (这个还没研究,参考下图)
public interface StudentRepo extends JpaRepository<Student,Integer> {
//自定义方法,后边跟的是字段,会自动代理生成对应的sql 做查询操作
Student findByIdAndName(Integer id,String Name);
//使用自定义sql,主要是取参数的方式 ?1 就是第一个参数 ,?2就是第二个参数
@Query("select st from Student st where st.id = ?1")
List<Student> myFindByID(Integer id);
//使用自定义sql,主要是取参数的方式 :name 就是第名字为name参数
@Query("select st from Student st where st.name = :name and st.age = :age")
List<Student> myFindByNameAndAge(@Param("name") String name,@Param("age") Integer age);
}
```
# 编写实体类
```java
@Data
@ToString
@Entity //这个是必要的
@Table(name = "student")
public class Student implements Serializable {
@Id //这个是必要的,主键生成策略似乎不是必要
private Integer id;
/*
在配置文件中加了
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
所以这个@Column(name = "userName") 才得以生效,否则userName 会去找 user_name列
*/
@Column(name = "userName")
private String userName;
private String pwd;
private Integer age;
private String name;
}
```
# 表结构长这样
# 做测试
@SpringBootTest
class JpaLearn01ApplicationTests {
@Autowired
StudentRepo studentRepo;
@Test
void contextLoads() {
List<Student> list = studentRepo.findAll();
System.err.println(list);
List<Student> list1 = studentRepo.myFindByID(20190115);
System.out.println(list1);
List<Student> list2 = studentRepo.myFindByNameAndAge("李四",16);
System.out.println(list2);
}
}