Spring Data JPA第三部分

    xiaoxiao2023-11-09  155

    一.自定义 Repository 接口

    1.1创建接口

    package cn.grace.dao; import cn.grace.pojo.Users; public interface UsersRepository { public Users findUserById(Integer userid); }

    1.2 使用接口

    package cn.grace.dao; import cn.grace.pojo.Users; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; /** *用户自定义Repository接口讲解 */ public interface UserDao extends JpaRepository<Users,Integer>,JpaSpecificationExecutor<Users>,UsersRepository { }

    1.3 创建接口实现类

    package cn.grace.dao; import cn.grace.pojo.Users; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; public class UserDaoImpl implements UsersRepository { @PersistenceContext(name="entityManagerFactory") private EntityManager em; @Override public Users findUserById(Integer userid) { System.out.println("myrespository"); return em.find(Users.class,userid); } }

    1.4 编写测试代码

    /** * JpaRepository接口测试 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class RepositoryTest { @Autowired private UserDao userDao; @Test public void test1(){ Users users = userDao.findUserById(5); System.out.println(users); } }

    二.关联映射操作

    2.1 一对一的关联关系

    需求:用户与角色的一对一的关联关系 用户:一方 角色:一方

    2.1.1 创建 Users 实体

    @Entity @Table(name = "t_users") public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)//自增长 @Column(name = "userid") private Integer userid; @Column(name = "username") private String username; @Column(name = "userage") private Integer userage; @OneToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "roles_id") //@JoinColumn:就是维护一个外键 private Roles roles; public Integer getUserid() { return userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getUserage() { return userage; } public void setUserage(Integer userage) { this.userage = userage; } public Roles getRoles() { return roles; } public void setRoles(Roles roles) { this.roles = roles; } @Override public String toString() { return "Users{" + "userid=" + userid + ", username='" + username + '\'' + ", userage=" + userage + '}'; }

    }

    2.1.2 创建 Roles 实体

    @Entity @Table(name="t_roles") public class Roles { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) @Column(name="roleid") private Integer roleid; @Column(name="rolename") private String rolename; @OneToOne(mappedBy = "roles") private Users users; public Integer getRoleid() { return roleid; } public void setRoleid(Integer roleid) { this.roleid = roleid; } public String getRolename() { return rolename; } public void setRolename(String rolename) { this.rolename = rolename; } public Users getUsers() { return users; } public void setUsers(Users users) { this.users = users; } @Override public String toString() { return "Roles{" + "roleid=" + roleid + ", rolename='" + rolename + '\'' + '}'; }

    }

    2.1.3 一对一关联关系操作

    /** * 一对一关联关系测试 * */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class OneToOneTest { @Autowired private UserDao userDao; /** * 添加用户同时添加角色 */ @Test public void test1(){ //创建角色 Roles roles = new Roles(); roles.setRolename("管理员"); //创建用户 Users users = new Users(); users.setUserage(30); users.setUsername("赵小刚"); //建立关系 users.setRoles(roles); roles.setUsers(users); //保存数据 userDao.save(users); } /** * 根据用户 ID 查询用户,同时查询用户角色 */ @Test public void test2(){ Users users = userDao.findOne(8); System.out.println("用户信息:"+users); Roles roles = users.getRoles(); System.out.println(roles); }

    }

    2.2 一对多的关联关系

    需求:从角色到用户的一对多的关联关系 角色:一方 用户:多方

    2.2.1 创建Users实体

    @Entity @Table(name = "t_users") public class Users implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY)//自增长 @Column(name = "userid") private Integer userid; @Column(name = "username") private String username; @Column(name = "userage") private Integer userage; @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "roles_id") private Roles roles; public Integer getUserid() { return userid; } public void setUserid(Integer userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getUserage() { return userage; } public void setUserage(Integer userage) { this.userage = userage; } public Roles getRoles() { return roles; } public void setRoles(Roles roles) { this.roles = roles; } @Override public String toString() { return "Users{" + "userid=" + userid + ", username='" + username + '\'' + ", userage=" + userage + '}'; } }

    2.2.2 创建 Roles 实体

    @Entity @Table(name="t_roles") public class Roles { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) @Column(name="roleid") private Integer roleid; @Column(name="rolename") private String rolename; @OneToMany(mappedBy = "roles") private Set<Users> users=new HashSet<>(); public Integer getRoleid() { return roleid; } public void setRoleid(Integer roleid) { this.roleid = roleid; } public String getRolename() { return rolename; } public void setRolename(String rolename) { this.rolename = rolename; } public Set<Users> getUsers() { return users; } public void setUsers(Set<Users> users) { this.users = users; } @Override public String toString() { return "Roles{" + "roleid=" + roleid + ", rolename='" + rolename + '\'' + '}'; } }

    2.2.3 一对多的关联关系操作

    ** * 一对多的关联关系测试 * */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class OneToManyTest { @Autowired private UserDao usersDao; /** * 添加用户同时添加角色 */ @Test public void test1(){ //创建角色 Roles roles = new Roles(); roles.setRolename("管理员"); //创建用户 Users users =new Users(); users.setUserage(30); users.setUsername("小王"); //建立关系 roles.getUsers().add(users); users.setRoles(roles); //保存数据 usersDao.save(users); } /** * 根据用户 ID 查询用户信息,同时查询角色 */ @Test public void test2(){ Users users =usersDao.findOne(12); System.out.println("用户姓名:"+users.getUsername()); Roles roles = users.getRoles(); System.out.println(roles); }

    }

    2.3 多对多的关联关系

    需求:一个角色可以拥有多个菜单,一个菜单可以分配多个角色。多对多的关联关系 角色:多方 菜单:多方

    2.3.1 创建 Roles 实体

    @Entity @Table(name="t_roles") public class Roles { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) @Column(name="roleid") private Integer roleid; @Column(name="rolename") private String rolename; @ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER) //@JoinTable:配置中间表信息 //joinColumns:建立当前表在中间表中的外键字段 @JoinTable(name = "t_roles_menus",joinColumns = @JoinColumn(name = "role_id"),inverseJoinColumns = @JoinColumn(name = "menu_id")) private Set<Menus> menus=new HashSet<>(); public Integer getRoleid() { return roleid; } public void setRoleid(Integer roleid) { this.roleid = roleid; } public String getRolename() { return rolename; } public void setRolename(String rolename) { this.rolename = rolename; } public Set<Menus> getMenus() { return menus; } public void setMenus(Set<Menus> menus) { this.menus = menus; } @Override public String toString() { return "Roles{" + "roleid=" + roleid + ", rolename='" + rolename + '\'' + '}'; }

    }

    2.3.2 创建 Menus 实体

    @Entity @Table(name="t_menus") public class Menus { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) @Column(name="menusid") private Integer menusid; @Column(name="menusname") private String menusname; @Column(name="menusurl") private String menusurl; @Column(name="fatherid") private Integer fatherid; @ManyToMany(mappedBy = "menus") private Set<Roles> roles=new HashSet<>(); public Integer getMenusid() { return menusid; } public void setMenusid(Integer menusid) { this.menusid = menusid; } public String getMenusname() { return menusname; } public void setMenusname(String menusname) { this.menusname = menusname; } public String getMenusurl() { return menusurl; } public void setMenusurl(String menusurl) { this.menusurl = menusurl; } public Integer getFatherid() { return fatherid; } public void setFatherid(Integer fatherid) { this.fatherid = fatherid; } public Set<Roles> getRoles() { return roles; } public void setRoles(Set<Roles> roles) { this.roles = roles; } @Override public String toString() { return "Menus{" + "menusid=" + menusid + ", menusname='" + menusname + '\'' + ", menusurl='" + menusurl + '\'' + ", fatherid=" + fatherid + '}'; }

    }

    2.3.3 多对多关联关系操作

    /** * 多对多关联关系测试 * */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") public class ManyToManyTest { @Autowired private RolesDao rolesDao; /** * 添加角色同时添加菜单 */ @Test public void test1(){ //创建角色对象 Roles roles = new Roles(); roles.setRolename("超级管理员"); //创建菜单对象 XXX 管理平台 --->用户管理 Menus menus = new Menus(); menus.setMenusname("XXX 管理平台"); menus.setFatherid(-1); menus.setMenusurl(null); //用户管理菜单 Menus menus1 = new Menus(); menus1.setMenusname("用户管理"); menus1.setFatherid(1); menus1.setMenusurl(null); //建立关系 roles.getMenus().add(menus); roles.getMenus().add(menus1); menus.getRoles().add(roles); menus1.getRoles().add(roles); //保存数据 this.rolesDao.save(roles); } /** * 查询 Roles */ @Test public void test2(){ Roles roles = this.rolesDao.findOne(3); System.out.println("角色信息:"+roles); Set<Menus> menus = roles.getMenus(); for (Menus menus2 : menus) { System.out.println("菜单信息:"+menus2); } }

    }

    最新回复(0)