hibernate

jar:antlr-2.7.7.jar

​ Hibernate利用它从HQL到SQL的转换。

byte-buddy01.8.17.jar  ->基于动态类型的超类名称来随机生成类名

dom4j-2.1.1.jar  解析XML配置文件和XML映射文件

hibernate-commons-annotations-5.0.4.Final.jar.    Hibernate注解包

hibernate-core-5.3.7.Final.jar    Hibernate 核心包

jandex-2.0.5.Final.jar      用来索引Anotation的

javassist-3.23.1-GA.jar     Hibernate用它来实现PO字节码的动态生成

javax.persistence-api-2.2.jar    持久化api

jboss-logging-3.3.2.Final.jar   日志服务通用库

jboss-transaction-api_1.2_spec-1.1.1.Final.jar    JTA规范包

ORM思想:关系对象映射
O:object
R:relation
M:mapping

XML
核心配置文件:名称:hibernate.cfg.xml,位置src目录下
文件约束:hibernate-configuration

     <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE hibernate-configuration PUBLIC
         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <hibernate-configuration>
     <session-factory>
         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
         <property name="hibernate.connection.url">jdbc:mysql:///webcrud</property>
         <property name="hibernate.connection.username">root</property>
         <property name="hibernate.connection.password">123</property>
 
         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
 
         <property name="hibernate.show_sql">true</property>
         <property name="hibernate.format_sql">true</property>
         <property name="hibernate.hbm2ddl.auto">update</property>
 
         <mapping resource="domain/User.hbm.xml" />
     </session-factory>
 </hibernate-configuration>

参数:
    必选:
        数据库连接参数
	hibernate.dialect	//数据库方言MySql值为org.hibernate.dialect.MySQLDialect
    可选:	
	hibernate.show_sql	//打印数据库语句
	hibernate.format_sql    //格式化数据库语句
	hibernate.hbm2ddl.auto  
		/**建表策略
		*create-drop 创建表再删除表
		*create	     表存在就删除再创建表
		*update      一般用
		*validate    表不存在就报错
		*/
     mapping:引入映射文件


ORM映射文件: 名字任意,一般与类同一个包
	 文件dtd约束,hibernate-mapping,参考hibernate-core.jar中的org.hibernate中的dtd文件

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
	 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	  "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
	<!-- 配置表与实体对象的关系 -->
<hibernate-mapping>
  <class name="com.shop.domain.User" table="user">
     <id name="uid" column="uid">
     <generator class="native"></generator>
     </id>
     <property name="username" column="username"></property>
  </class>
</hibernate-mapping>   
 
id元素:
    name: 属性名
    column: 主键列名
    type(可选):   填写列的类型,hibernate会自动检测实体的属性类型
    not-null(可选):是否不能为空,默认false
    length(可选): 数据库中列的长度,默认数据库类型的最大长度
  
    generator:主键生成策略
       <generator class="native"></generator>
       值:
         ldentity:
	 increment:
	 sequence:
	 hilo:
         native:
	 uuid:
	 assigned:

property元素的属性:
    name: 属性名
    column(可选): 列名
    type(可选):   填写列的类型,hibernate会自动检测实体的属性类型
    not-null(可选):是否不能为空,默认false
    length(可选): 数据库中列的长度,默认数据库类型的最大长度

增加
session.save(obj);
删除
session.delete(obj);
修改
session.update(obj);
查询:
get:没有使用懒加载机制
load:默认使用懒加载机制
映射文件中表的属性lazy设置懒加载机制默认true开启栏加载机制

session.get(obj.class,1);

对象导航查询:

OID查询:

Query:
   List:  list
	 String hql = "from com.shop.domain.User";
     Query createQuery = session.createQuery(hql);
 List<User> list = createQuery.list();
  
   条件查询:  uniqueResult()
     1.
	  String hql = "from com.shop.domain.User where uid = 1";
  Query createQuery = Session.createQuery(hql);
  Object uniqueResult = createQuery.uniqueResult();
 2.
  String hql = "from com.shop.domain.User where uid = ?";
  Query createQuery = Session.createQuery(hql);
  createQuery.setInteger(0,1);
  Object uniqueResult = createQuery.uniqueResult();
 3.
  String hql = "from com.shop.domain.User where uid = ?";
  Query createQuery = Session.createQuery(hql);
  createQuery.setParameter(0, 1);
  User  user = (User) createQuery.uniqueResult();
 4.
  String hql = "from com.shop.domain.User where uid = :uid";
  Query createQuery = Session.createQuery(hql);
  createQuery.setParameter("uid",1);
 5.分页
  String hql = "from com.shop.domain.User";
  Query Query = Session.createQuery(hql);
  Query.setFirstResult(0);// 从第几条开始查询
  Query.setMaxResults(1); //每次查询显示几条
  List<User> list = Query.list();


Criteria:
   List:list
  Criteria criteria = Session.createCriteria(User.class);
  List list = criteria.list();
条件查询:
  Criteria criteria = Session.createCriteria(User.class);
  criteria.add(Restrictions.eq("uid", 1));
  User rs = (User) criteria.uniqueResult();
分页:
  Criteria criteria = Session.createCriteria(User.class);
  criteria.setFirstResult(0);
  criteria.setMaxResults(5);
  List list = criteria.list();
  System.out.println(list);
聚合函数:
  Criteria criteria = Session.createCriteria(User.class);
      criteria.setProjection(Projections.rowCount());
  Long count = (Long) criteria.uniqueResult();


SQLQuery:
   String sql = "select * from t_user";
   SQLQuery query = session.createSQLQuery(sql);
   query.addEntity(User.class);
   List<User> list = query.list();

多表查询:
级联:

//


 cascade:
	增删改	
 inverse:
 	true,不级联维护
	false,级联维护

多对多



 name属性:填写我引用别人的集合属性名称
     table属性:填写中间表的表名
     key标签的column属性:填写别人引用我的外键名称
     class属性:填写我引用别人类的全路径名称
     man-to-many标签的column属性:填写我引用别人的外键名称

<set name="users" table="tb_user_role">
  <key column="id"></key>
  <many-to-many class="com.shop.domain.User" column="uid"></many-to-many>
</set>

注:取消一边的级联维护
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值