Loading... 1.使用Spring Initializr创建项目。 ![360截图16581124656099.png][1] 选择需要模块: ![360截图163509129313583.png][2] [1]: http://blog.pingchas.com/usr/uploads/2018/03/1675836000.png [2]: http://blog.pingchas.com/usr/uploads/2018/03/461979158.png 2.首先创建一些普通对象,用来与数据库的表建立映射关系.然后使用JPA 对数据库进行增删查改等存取操作。假如现在有三个实体:部门、用户和角色,并且它们具有一定的关系,即一个用户 只能隶属于一个部门.一个用户Hf以拥有多个角色。 import javax.persistence.*; @Entity @Table(name = "department") public class Department { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 其中注解@Table指定关联的数据库的表 名,注解@Id定义一条记录的唯一标识,并结合注解@GeneratedValue将其设置为自动 生成。部门实体只有两个字段:id和name。Getter和Setter方法的定义, 使用了IDEA的自动生成工具。 import com.fasterxml.jackson.annotation.JsonBackReference; import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; import java.util.Date; import java.util.List; @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; @ManyToOne @JoinColumn(name = "department_id") @JsonBackReference private Department department; @ManyToMany @JoinTable(name = "user_role",joinColumns = {@JoinColumn(name="user_id")},inverseJoinColumns = {@JoinColumn(name = "role_id")}) private List<Role> roles; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Department getDepartment() { return department; } public void setDepartment(Department department) { this.department = department; } public List<Role> getRoles() { return roles; } public void setRoles(List<Role> roles) { this.roles = roles; } } 用户实体包含三个字段:id、name和createdate,其中注解@ManyToOne定义它与部门的多对一关系,并且在数据库表中用字段department_id 来表示部门的lD,注解@ManyToMany定义与角色实体的多对多关系,并且用中问表 user role来存储它们各自的ID,以表示它们的对应关系。日期类型的数据必须使用注 解@DateTimeFormat来进行格式化,以保证它在存取时能提供正确的格式,避免保存 失败。注解@JsonBackReference用来防止关系对象的递归访问。 import javax.persistence.*; @Entity @Table(name = "roles") public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 通过上面实体的定义,实现了使用Java的普通对象(POJO)与数据库表建立 映射关系(ORM),接下来使用JPA来实现持久化, import com.pingchas.demo.vo.User; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface UserDao extends JpaRepository<User,Integer> { } 它是一个接口,并继承 丁JPA资源库JpaRepository接口,使用注解@Repository将这个接口也定义为一个资 源库,使它能被其他程序引用,并为其他程序提供存取数据库的功能。 使用相同的方法,可以定义部门实体和角色实体的资源库接口。接口同样继承于 JpaRepository接口.只要注意使用的参数是各自的实体对象即可. 继承关系如下: Repository CrudRepository PagingAndSortingRepository JpaRepository 使用JPA就是可以这么简单, JpaRepository继承于PagingAndSortingRepository,它提供厂 分页和排序功能,PagingAndsoningRepository继承于Crud Repository,它提供了简单的增删查改功能。 JPA还提供了一些白定义声明方法的规则,例如,在接口中使用关键字findBy、 readBy、getBy作为方法名的前缀,拼接实体类中的属性字段(首个字母大写),并可选 择拼接一些SQL查询关键字来组合成一个查询方法. 关键字可以这样使用: And:findByIdAndName(Long id,String name) or:findByldOrName(Long id,String name) Between:findByCreateDateBetween(Date start,Date end) LessThan:findByCreateDateLessThan(Date start) GreaterThan:findByCreateDateGreaterThan(Date start) IsNull:findByNamelsNuIl() IsNotNull:findByNameIsNotNull() NotNull:与IsNotNull等价 Like:findByNameLike(String name) NotLike:findByNameNotLike(String name) OrderBy:findByNameOrderByIdAsc(String name) Not:findByNameNot(String name) In:findByNameln(Collection<String> nameList) Notln:findByNameNotIn(Collection<String> nameList) 如下列类自定义的方法声明,它们都是符合JPA规则的,这些方法 也不用实现.JPA将会代理实现这些方法 User findByNameLike(String name) User readByName(String name) List<User> getByCreateDateLessThan(Date star) Last modification:September 27, 2018 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 0 如果觉得我的文章对你有用,请随意赞赏