当前位置: 首页 > news >正文

如何做网站导航栏重庆公司大学派斯学院

如何做网站导航栏,重庆公司大学派斯学院,wordpress4.9.5,做网站公司介绍ppt一、数据准备 在管理系统中#xff0c;角色和用户是典型一对多关系#xff0c;一个角色可以分配给多个用户#xff0c;一个用户对应一个角色。准备两个实体类TestRole、TestUser类#xff0c;并在数据库建好对应表结构z_test_roles、z_test_users两张表。 1、mysql语句 S… 一、数据准备 在管理系统中角色和用户是典型一对多关系一个角色可以分配给多个用户一个用户对应一个角色。准备两个实体类TestRole、TestUser类并在数据库建好对应表结构z_test_roles、z_test_users两张表。 1、mysql语句 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for z_test_roles -- ---------------------------- DROP TABLE IF EXISTS z_test_roles; CREATE TABLE z_test_roles (id varchar(50) NOT NULL,name varchar(50) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- ---------------------------- -- Records of z_test_roles -- ---------------------------- INSERT INTO z_test_roles VALUES (1, 军师); INSERT INTO z_test_roles VALUES (2, 将军); INSERT INTO z_test_roles VALUES (3, 主将); SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for z_test_users -- ---------------------------- DROP TABLE IF EXISTS z_test_users; CREATE TABLE z_test_users (id varchar(50) NOT NULL,name varchar(50) DEFAULT NULL,rid varchar(50) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;-- ---------------------------- -- Records of z_test_users -- ---------------------------- INSERT INTO z_test_users VALUES (1, 刘备, 3); INSERT INTO z_test_users VALUES (2, 曹操, 3); INSERT INTO z_test_users VALUES (3, 诸葛亮, 1); INSERT INTO z_test_users VALUES (4, 关羽, 2); INSERT INTO z_test_users VALUES (5, 张飞, 2);2、实体类 Entity Getter Setter Table(name z_test_roles) public class TestRole implements Serializable {IdColumn(name id)ApiModelProperty(value ID)private String id;ApiModelProperty(value 名称)private String name;//一对多OneToMany(mappedBy testRole) // OneToMany(cascade CascadeType.ALL, fetch FetchType.EAGER) // JoinColumn(name rid)private ListTestUser userList;Overridepublic String toString() {return TestRole{ id id \ , name name \ };} } Entity Getter Setter Table(name z_test_users) public class TestUser implements Serializable {IdColumn(name id)ApiModelProperty(value ID)private String id;ApiModelProperty(value 名称)private String name;//多对一ManyToOne(targetEntity TestRole.class)JoinColumn(name rid, referencedColumnName id)private TestRole testRole;Overridepublic String toString() {return TestUser{ id id \ , name name \ };} } 二、注解 1、OneToMany 一对多OneToMany该注解包含以下五个属性 Target({ElementType.METHOD, ElementType.FIELD}) Retention(RetentionPolicy.RUNTIME) public interface OneToMany {Class targetEntity() default void.class;CascadeType[] cascade() default {};FetchType fetch() default FetchType.LAZY;String mappedBy() default ;boolean orphanRemoval() default false; } targetEntity属性表示默认关联的实体类型。如果集合类中指定了具体类型了不需要使用targetEntity.否则要指定targetEntityxxx.class         cascade该属性定义类和类之间的级联关系。定义的级联关系将被容器视为对当前类对象及其关联类对象采取相同的操作而且这种关系是递归调用的。举个例子 role和 user有级联关系那么删除 role时将同时删除它所对应的 user对象。而如果 user还和其他的对象之间有级联关系那么这样的操作会一直递归执行下去。cascade 的值只能从 CascadeType.PERSIST 级联新建、 CascadeType.REMOVE 级联删除、 CascadeType.REFRESH 级联刷新、 CascadeType.MERGE 级联更新中选择一个或多个。还有一个选择是使用 CascadeType.ALL 表示选择全部四项。2.0版本后新增了DETACH         fetch可选择项包括 FetchType.EAGER 和 FetchType.LAZY 。前者表示关系类 (本例是user类) 在主类 (本例是role类) 加载的时候同时加载后者表示关系类在被访问时才加载。默认值是 FetchType.LAZY 。         mappedBy定义类之间的双向关系。如果类之间是单向关系不需要提供定义如果类和类之间形成双向关系我们就需要使用这个属性进行定义否则可能引起数据一致性的问题。该属性的值是“多”方class里的“一”方的变量名。添加该属性的一端为被控方role类表示将关系维护权交给该属性值指向的类那方user类。        orphanRemoval默认falseorphanRemoval为true,表示会先直接删除对应的子表数据级联更新此配置最为关键。 2、ManyToOne Target({METHOD, FIELD}) Retention(RUNTIME) public interface ManyToOne {Class targetEntity() default void.class;CascadeType[] cascade() default {};FetchType fetch() default EAGER;boolean optional() default true; } ManyToOne注解有四个属性targetEntity、cascade、fetch 和optional前三个属性的具体含义和OneToMany的同名属性相同但ManyToOne的fetch 属性默认值是FetchType.EAGER。         optional 属性是定义该关联类是否必须存在值为false时关联类双方都必须存在不能为空。如果关系被维护端不存在查询的结果为null。值为true时, 关系被维护端可以不存在查询的结果仍然会返回关系维护端在关系维护端中指向关系被维护端的属性为null。optional属性的默认值是true。optional 属性实际上指定关联类与被关联类的join 查询关系如optionalfalse 时join 查询关系为inner join, optionaltrue 时join 查询关系为left join。 3、JoinColumn joinColumns属性表示在保存关系中的表中所保存关联的外键字段。z_test_users表中的rid关联z_test_roles表中的id。 4、JoinTable JoinTable 描述了多对多关系的数据表关系。        name 属性指定中间表名称joinColumns定义中间表与Teacher 表的外键关系上面的代码中中间表Teacher_Student的Teacher_ID 列是Teacher 表的主键列对应的外键列inverseJoinColumns 属性定义了中间表与另外一端(Student)的外键关系。 5、注意事项 1.ManyToOne多对一单向         不产生中间表但可以用Joincolumnname “来指定生成外键的名字外键在多的一方表中产生。         2.OneToMany一对多单向         会产生中间表此时可以用onetoMany Joincolumnname” 避免产生中间表并且指定了外键的名字别看joincolumn在一中写着但它存在在多的那个表中         3.OneToMany , ManyToOne 双向两个注解一起用的         如果不在OneToMany中加mappedy属性就会产生中间表。         4、orphanRemoval true和Cascade.REMOVE有什么区别         对于单向OneToMany。 两种设置之间的区别在于对断开关系的响应。例如当对role类的某一个角色进行更新时。1如果指定了 orphanRemoval true则会自动删除断开连接user类实例。这对于清理没有所有者对象user对象的引用不应该存在的依赖对象role对象很有用。2如果仅指定了 cascade CascadeType.REMOVE 则仅仅会将失去了连接的user实例的rid置为null因为断开关系不是删除操作。         对于OneToMany , ManyToOne 双向。 one的一方设置了mappedBy后one 的一方更新1如果指定了 orphanRemoval true则会自动删除断开连接user类实例。2如果仅指定了 cascade CascadeType.REMOVE 则不对多的一方造成任何影响。              5、Transactional注解         在新增操作时候方法上带此注解会导致回滚操作新增失败在查询时候加上该注解可以解决懒加载数据无法获取的问题。         6、多对一如果关联数据不存在查询整条结果会为空         加入NotFound(action NotFoundAction.IGNORE)可显示除了关联字段的其他字段 三、数据库操作 1、单向一对多 只需在one的一方添加以下注释因为没有mappedBy此时关系维护为one的一方同时必须加上JoinColumn注解指定关联的表的字段否则会自动去找中间表如果中间表不存在会报错。CascadeType默认为全部操作都为级联模式。one方新增、查询不会对many方造成影响删、改则会有影响。 /*** 单向一对多*/OneToMany(cascade CascadeType.ALL)JoinColumn(name rid)private ListTestUser userList; 1新增会自动填充关联表user中的关联字段rid /*** 单向一对多,新增*/Testpublic void insert() {//创建两个人物,不需要设置ridTestUser user1 new TestUser();user1.setId(1);user1.setName(嵇康);TestUser user2 new TestUser();user2.setId(2);user2.setName(曹植);//创建一个角色将人物的list与角色绑定自动更新user表的ridTestRole role new TestRole();ListTestUser list new ArrayList();list.add(user1);list.add(user2);role.setId(1);role.setName(文人);role.setUserList(list);//保存到数据库testUserRepository.save(user1);testUserRepository.save(user2);testRoleRepository.save(role);} 2查询会将关联表user的相关字段一并查出如果fetch设置为懒加载并不会显示。将fetch设置为Fetch.EAGER或者在业务代码上添加Transcational注解即可实现立即加载。 /*** 单向一对多,查询*/TestTransactionalpublic void find() {OptionalTestRole byId testRoleRepository.findById(1);System.out.println(byId);} 3修改对one的一方role进行修改会导致many方user的关联字段变为null即关系断开。如果orphanRemoval true则many方user的关联字段会被直接删除。 /*** 单向一对多修改*/Testpublic void update() {TestRole role new TestRole();role.setName(武将);role.setId(1);role.setUserList(new ArrayList());testRoleRepository.save(role);} 更新前更新后  4删除删除one方rolemany方user会关联字段被关联删除 /*** 单向一对多删除*/Testpublic void delete() {testRoleRepository.deleteById(1);} 2、单向多对一 只需在many的一方添加以下代码此时不需要rid这个属性同样由于没有mappedBy注解指定关系维护方会去中间表查找对应关系此时如果不加JoinColumn注解会报错。         注意该注解默认为立即加载。 /*** 单向多对一*/ManyToOne(cascade CascadeType.ALL)JoinColumn(name rid, referencedColumnName id)private TestRole testRole; 1新增会根据JoinColumn配置自动将角色的id映射到rid /*** 单向多对一新增*/Testpublic void add1() {//创建一个角色TestRole role new TestRole();role.setId(1);role.setName(文人);//创建两个人物设置角色后会根据JoinColumn配置自动将角色的id映射到ridTestUser user1 new TestUser();user1.setId(1);user1.setName(嵇康);user1.setTestRole(role);TestUser user2 new TestUser();user2.setId(2);user2.setName(曹植);user2.setTestRole(role);//保存到数据库testUserRepository.save(user1);testUserRepository.save(user2);testRoleRepository.save(role);} 2查询默认立即加载所以不需要加Transactional /*** 单向多对一,查询*/Test // Transactionalpublic void find1() {OptionalTestUser byId testUserRepository.findById(1);System.out.println(byId);} 3修改 /*** 单向一对多修改*/Testpublic void update() {TestUser usernew TestUser();user.setId(2);user.setName(祝融);user.setTestRole(null);testUserRepository.save(user);} 修改前 修改后 4删除删除many一方的数据会将对应的one一方的数据同时删除所以不建议在many一方设置为CascadeType.ALL设置为支持新增、查询、修改即可 /*** 单向多对一*/ManyToOne(cascade {CascadeType.PERSIST, CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH})JoinColumn(name rid, referencedColumnName id)private TestRole testRole; 3、双向一对多、多对一 两个注解同时使用注意此时cascade一般应在one 方定义否则会造成级联重复比如双方都定义了该字段的新增级联则会导致进行两次新增操作                   参考链接 https://blog.csdn.net/qq_42158122/article/details/119644107
http://www.hkea.cn/news/14580936/

相关文章:

  • 大连手机自适应网站建设服务黑龙江网站建设业务
  • dedecms医院网站wap模板(橙色)网站选项卡代码
  • 长兴建设局网站莆田网站建设收费标准
  • 网站上传文件功能实现网站网站开发软件
  • 公司网站怎么建站内江网站建设
  • 品牌网站建设 磐石网络的确好如何看网站点击量
  • 自己怎么在网上做网站源码出售网站
  • 湖南营销型网站建设 干净磐石网络网站内页的设计
  • 网站注册哪个好石家庄的网站建设公司哪家好
  • 网店装修网站c 网站开发实战
  • 网站备案当面核验软件技术开发
  • 自己做网站上传相册店铺位置怎么免费注册定位
  • 批量查询网站是否正常可以用于制作网页的软件
  • 温州网站建设公司电话哈尔滨品牌设计公司
  • 怎么做镜像网站投资网站模板
  • 成都分销商城网站建设百度知道网页版地址
  • 房产中介网站开发与设计代码网站管理工具
  • 什么是网页站点网站建设图片怎么做
  • 涟水网站开发公司点击查看商标设计注册一条龙价格
  • 成都市成华区建设局官方网站莱芜金点子最新招聘信息港
  • 专业网站建设方案深圳做网站google推广
  • 制作装饰公司网站做网站卖专业卖文玩
  • 电站建设招聘网站如何利用ftp上传网站
  • 做水果的网站杭州网站定制
  • 当牛做吗网站源代码分享无视风险安装下载app软件
  • 电子商务与网站建设做关于水果的网站
  • 模板网站建设平台深入解析wordpress(原书第2版) pdf
  • 河北路泰建设工程有限公司网站婚庆公司介绍
  • 如何k掉网站邯郸小程序
  • 设计软件免费下载网站金阊苏州网站建设