1、配置文件内容
spring: profiles: active: dog datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/dogs username: root password: 123456 jpa: hibernate: ddl-auto: update show-sql: true配置spring.datasource,配置jpa,jpa是为了对数据库进行持久化的支持,ddl-auto的值决定了实体类与数据库表之间的关系,它的值有:
1)、create,只要程序启动,就会创建新的表,不管表是否已经存在,会删除已存在的表。
2)、update,程序启动时更新表结构,但不会删除已存在的数据。
3)、create-drop,当程序停止时,删除表。
4)、none,什么都不做。
5)、validate,验证类的属性与表结构是否一致,不一致就报错。
2、实体类的写法
实体类需要加上@Entity的注解,id用@Id注解修饰,可以加上@GeneratedValue来实现自动增加。实体类需要有一个空的构造方法,并且所有的属性要有get和set方法。
@Entity public class Dog { @Id @GeneratedValue private Integer id; private Integer age; private String type; private String favorite;
3、数据库操作接口JpaRepository
关键接口,每一个类的操作接口都要继承它,如下:
public interface DogRepository extends JpaRepository<Dog , Integer>{ }
模板参数第一个是实体类的类型,第二个是主键的类型,只需要这样的配置,就可以直接使用这个接口。
在需要使用的Controller中添加代码
@Autowired private DogRepository dogRepository;
就可以使用它进行数据库的简单操作了,如果不按Id进行查询,可以在接口中增加以下代码
List<Dog> findByAge(Integer age);
注意方法的名称规范,findBy后面跟的一定要是你的实体类中有的属性名,首字母大写,就可以直接使用了。
如果涉及到多表查询或者复杂查询的话,需要自己写sql的,可以使用@Query注解,在你自己写的Repository中增加方法:
@Query("select t from Dog t where t.type = ?1 and t.age = ?2") Dog findByTypeAndAge(String type, Integer age);
这是根据类型和年龄进行查找。
@Query的用法还有很多,比如like的写法:
@Query(value = "select * from dog t where t.type like %:type% and t.age = :age" , nativeQuery = true) List<Dog> findByTypeAndAge(@Param("type") String type , @Param("age") Integer age);
这里的nativeQuery为true表示使用与当前数据库匹配的sql语句,而不是用hql。而@Param则是将参数注入到sql语句中,sql语句中用冒号+参数名的方式写。