[Java web]-- hibernate3(1)

0.  M  V  C
M model JDBC/hibernate/mybatis
V view  JSP
C contorller  struts2


java                          DataBase
User{id,name,age}         t_user(id,name,age)
User user         -->            1   c35  18
User user2        <--            2   c36  19
Connection conn
String sql="insert into t_user values(?,?,?)"
PreparedStatement psta
psta.setXXX(1,user.getId());
psta.setXXX(1,user.getName());
psta.setXXX(1,user.getAge());
psta.executeUpdate();


Connection conn
String sql="select * from t_user where id=?";
PreparedStatement psta
psta.setInt(1,2);
ResultSet res=psta.executeQuery();
User user2=new User();
user2.setId(res.getInt("id"));
..
..
user2
=============================================================================================
1.hibernate  持久层框架  开源
  *是一个底层封装了jdbc的orm框架
  *orm:Object(java对象)  r(关系型数据库)   m(mapping映射)  搭建java和数据库间的通信桥梁
    1.将java对象和数据库表映射在一起
2.对象中的属性和库表中列映射在一起
3.在java对象和数据库之间,直接通信。
  User user=new User(1,"c35",18);
  insert(user);
  User user2=getUser(2);
=============================================================================================
2.hibernate 开发流程
  2.1 导入依赖:
       核心jar:hibernate.jar
  第三方依赖jar
  2.2 建立hibernate配置文件:
      名称:hibernate.cfg.xml
 位置:src下
<hibernate-configuration>
<session-factory>
<!-- 数据库连接参数 -->
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">hr</property>
<property name="hibernate.connection.password">hr</property>
<!-- hibernate自身属性 -->
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<!-- 方言:指定连接的数据种类 -->
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<!-- 
防止j2ee6冲突配置
<property name="javax.persistence.validation.mode">none</property> 
-->
<!-- 注册映射 -->
<mapping resource="com/c35/entity/user.hbm.xml"/>
</session-factory>
</hibernate-configuration>
   2.3 在映射文件中搭建orm 映射
       名称:任意   xxx.hbm.xml
  位置:任意
<hibernate-mapping>
<!-- 映射java类和库表 -->
<class name="com.c35.entity" table="t_user35">
<!--映射类的属性和库表的列  -->
<!-- 映射表中的ID列 -->
<id name="id" column="id" type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一 
increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" column="name" type="java.lang.String"></property>
<property name="age" column="age" type="java.lang.Integer"></property>
</class>
</hibernate-mapping>
   2.4 在配置文件中注册映射
<!-- 注册映射 -->
<mapping resource="com/c35/entity/user.hbm.xml"/>
   2.5 测试  api
        *Configuration  -->加载配置信息
Configuration cfg=new Configuration().configure();//加载src下hibernate.cfg.xml文件
   *SessionFactory -->session工厂,用户生成session
         SessionFactory sf=cfg.buildSessionFactory();
*Session -->用以执行curd操作(内置了Connection)
*注意:其中Configuration和SessionFactory全局唯一,Session独享。
        *Session api: (在做增删改操作时,需要控制事务。)
 *查询:session.get(Class,ID);//查询某张表中的id为xx的数据
        User user=(User)session.get(User.class, 1);//查询id为1的用户
 *增加:
//创建User
User user=new User(null,"c36",19);
//在做增删改操作时,需要控制事务。
Transaction tx=session.beginTransaction();
//插入User
session.save(user);
System.out.println(user.getId());
tx.commit();
//tx.rollback();
 *更新:
//在做增删改操作时,需要控制事务。
Transaction tx=session.beginTransaction();
//查询出要更新的数据
User user=(User)session.get(User.class,4);
user.setAge(21);
user.setName("c37");
session.update(user);//更新用户
tx.commit();
//tx.rollback();
 *删除:
//在做增删改操作时,需要控制事务。
Transaction tx=session.beginTransaction();
//选择要删除的数据
User user=(User)session.get(User.class,4);
session.delete(user);//删除数据
tx.commit();
//tx.rollback();
 *关闭资源:
       session.close();
==============================================================================================
2.Session创建方式:
    SessionFactory sf=xxx;
*sf.openSession();//创建一个崭新的Session对象
*sf.getCurrentSession();//初次被调用,创建一个Session对象session1,之后的在同一个线程内的调用
                      //就不再创建新的Session对象了,而是依然使用session1
*注意:当使用getCurrentSession获取session时,需要添加一行配置:
  //开启currentSession方法,使得getCurrentSession可用来获得线程唯一的Session
      <property name="current_session_context_class">thread</property>
*getCurrentSession获得的Session对象的特点:
   1.curd都需要控制事务
2.在事务提交后,会自动close.
==============================================================================================
3.技巧:
<!-- 
package="com.c35.entity" 指定java实体的包路径【技巧1】
 -->
<hibernate-mapping package="com.c35.entity">
<!-- 映射java类和库表 
在影射属性和列时,如果属性和列同名,则column可省略【技巧2】
-->
<class name="User" table="t_user35">
<!--映射类的属性和库表的列  -->
<!-- 映射表中的ID列 -->
<id name="id"  type="java.lang.Integer">
<!-- id生成器(生成策略),保证在插入数据时id唯一 
    increment:递增策略
-->
<generator class="increment"></generator>
</id>
<property name="name" type="java.lang.String"></property>
<property name="age"  type="java.lang.Integer"></property>
</class>
</hibernate-mapping>
==============================================================================================

  
      
















 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往事随风ing

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值