最近在写web项目,用的是spring boot,数据持久化使用jpa。
一、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>
</dependency>
二、application.properties配置
spring.jpa.database = MYSQL
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
三、配置JPA扫描类
// 扫描repoitory包及其子包
@EnableJpaRepositories(basePackages = { "com.xxxxxx.repository" })
// 扫描Entity包及其子包
@EntityScan("com.xxxxxx.bean.*")
@Configuration
public class JpaConfig {
}
四、配置对应持久化的实体类
@Entity()
@Table(name = "user")
public class User implements Serializable {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "id")
private String id;
// 姓名
@Column(name = "name")
private String name;
// 证件类型
@Column(name = "id_type")
private String id_type;
// 证件号码
@Column(name = "id_no")
private String id_no;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId_type() {
return id_type;
}
public void setId_type(String id_type) {
this.id_type = id_type;
}
public String getId_no() {
return id_no;
}
public void setId_no(String id_no) {
this.id_no = id_no;
}
五、配置repository类(dao层)
//JpaRepository<User, String>中的String是主键的类型
public interface UserRepository extends
JpaRepository<User, String>,
JpaSpecificationExecutor<User> {
#1、简单条件查询:查询某一个实体类或者集合
# 按照Spring data 定义的规则,查询方法以find|read|get开头 涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性以首字母大写其余字母小写为规定。
# 使用And条件连接时
# 条件的属性名称与个数要与参数的位置与个数一一对应
public User findByNameAndId_no(String name,String id_no);
#2、使用@Query自定义查询(Spring Data提供的)
# 这种查询可以声明在Repository方法中,摆脱像命名查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring data的特有实现。
# ?1对应方法传参的第一个参数
@Query("select u from User u where u.name= ?1")
public User findByName(String name);
# 也可以用第二种方式,使用Param("参数名"),而不用管顺序
@Query("select u from User u where u.name = :beforename or u.name = :updatename")
public User findByLastnameOrFirstname(@Param("beforename") String beforename,@Param("updatename") String updatename);
#3、@Query与 @Modifying 执行更新操作
@Modifying
# ?1对应方法传参的第一个参数,?2代表第二个参数,以此类推
@Query("update User u set u.name= ?1 where u.name= ?2")
public int updateName(String name, String name);
}
#4、spring data提供了默认的事务处理方式,即是所有查询皆为只读事务,增加、更新和删除对象声明有事务
# 对于自定义的方法,如需改变spring data提供的事务默认方式
# 可在自定义的方法上增加@Transactional注解即可
@Transactional
public void delete(String name) {
delete(findOne(name));
}
如有不详细,想到在补充。