学习hibernate过程中,自己整理的一些数据,但不全面。

    xiaoxiao2021-12-14  18

    1.映射文件中,列的类型值一般都不需要写,会自动识别的,但是text型和date型一般都要写出来。 2.引擎问题,MySQLINOODBdIALECT引擎是支持事物和主键的,但是MySQLmyisamDialect引擎不支持,这个引擎只是查询数据比较快。 3. 简单的集合   <!-- set集合  name值是你类中的一个属性值  table 是你执行程序后,生成的表名-->     (hashset无序,linkedhashset有序,不重复) <set name="addressSet" table="user_address">  <key column="userid"></key> <!-- 表的字段 -->  <element type="string" column="address"></element> </set> <!-- list集合  跟set集合就多了一个list-index,name值是你类中的一个属性值  table 是你执行程序后,生成的表名-- -->     有序  可以重复 <list name="addressSet" table="user_address">  <key column="userid"></key>  <list-index column="idx"></list-index>  <element type="string" column="address"></element> </list> <!-- map集合值,与上面差不多,就多了一个map-key键值对 -->(hashmap无序,linkedhashmap有序,不重复) <map name="" table=""> <key column=""></key> <map-key type=""></map-key> <element></element> </map> 4.order-by  (跟字段名  Desc/Asc) 如:order-by="address  desc" 5.多对一和一对多    <class name="Department" table="department"> <id name="id">             <generator class="native"/> </id> <property name="name"/> <!--外键在多的一方,employeeSet属性,Set集合,表达的是本类与Employee的一对多关系 class属性:写的是多的一方的类 column属性:写的是多的一方的名称 inverse:    默认是false:表示本类关联关系;       true:表示本类不关联关系;       只是影响能否设置外键的值,不影响查询数据,(设置有效值或者是null值) 当你解除关联关系的时候,你从员工方解除的时候, 直接设置你的值为null就可以了,因为你的inverse设置的是true, 就说明你的关联关系是员工方设置。   但是当你在部门方解除关联关系的时候,你需要设置你的inverse值为false, 这样你才有权限去设置值。   删除员工方,(多方) 对对方没有影响 删除部门方   (一方)虽然也可以删除,但是首先是将员工方的值设置为null 然后才能正常删除   --> <set name="employeeSet"  inverse="true">   <key column="departmentId"></key>    <one-to-many class="Employee"/> </set> ========================================================================== <class name="Employee" table="employee"> <id name="id">             <generator class="native"/> </id> <property name="name"/> <!--department属性,表达的是本类与Department的多对一关系    class属性:写的是少的一方的类   column:外键列 --> <many-to-one name="department" class="Department" column="departmentId"> </many-to-one> 6.多对多的关联关系  (这个也需要设置inverse属性,否者    如果不设置的话,就需要你在 添加数据的时候,你要两边都添加数据,否者的话就会出现这样的错误 )   <!-- 这个类是student类 --> <!-- teachers属性,set集合,表达的是本类与Teacher的多对多 table:  这里表示的是中间表    key:集和外键,(引用当前表主键的那个外键) --> <set name="teachers" table="teacher_student">  <key column="studentId"></key> <many-to-many class="Teacher" column="teacherId"></many-to-many> </set> ============================================ <!-- 这个类是Teacher类 --> <!--students属性,set集合,本类与Student类的多对多 table:  这里表示的是中间表    key:集和外键,(引用当前表主键的那个外键)  --> <set name="students" table="teacher_student">   <key column="teacherId"></key> <many-to-many class="Student" column="studentId"></many-to-many> </set> 7.关联关系的设置信息:   1,没有关联对方的话,能删除。   2,有关联的话且inverse=flase,由于可以维护关联关系,他就会把有关联关系的对象的外键设置null值,再删除自己。    3,有关联的话且inverse=true,由于不能维护关联关系,所有就会直接执行删除自己,就会有异常 8. 级联的关系:(一般一对多或者一对一使用的比较多,多对多方式使用的少,不然删除一方,另外一方也会删除。) 关联关系的表,其实最直接的方法,就使用级联的方式,可以直接删除, 跟inverse和外键没有关系。  cascade=""  delete  (删除对象的时候,关联的对象也直接删除) 9.外键约束和唯一性约束 <!-- 外键约束和唯一性约束 --> <!--person属性,Person类型,表达的是本类与Person的一对一   采用外键的方式一对一映射关系,本方有外键。 unique属性:设置为唯一值,不可以修改,用在身份证中   --> <many-to-one name="person" class="Person" column="personId" unique="true"/> <!-- idCard属性,IdCard类型,本类与IdCard的一对一 property-ref:对方映射中,外键的属性名字 --> <one-to-one name="idCard" class="IdCard" property-ref="person"/> 10. HQL语句没有写仔细    hql="select e.name,count(e.id) as c"+   "from Employee e"+ "where id<9"+ "group by e.name"+ "having count(e.id)>1"+  在having子句中不能使用列别名就是前面写的 c "order by c ASC";        可以使用列别名   11.懒加载:   也叫延迟加载,不是在执行获取操作时马上生成SQL,而是在第一次使用时生成SQL   分成两种:    类级别的;     <class 。。。。lazy=“true/flase”>   属性级别的:     <set/list/map/bag   ....lazy="...">     <many-to-one ....lazy="...">      <one-to-one ....lazy="...">         在使用懒加载 特性时,可能会有lazyinitialzationEXCEPTION      原因   :     真正去获取数据时,session已经没有了,   解决办法: 方法一:让session在真正加载后在关闭   方法二:或是在session关闭前执行hibernate。initialize 12.使用二级缓存,默认是打开的
    转载请注明原文地址: https://ju.6miu.com/read-969401.html

    最新回复(0)