您的位置:首页 > 其它

hibernate3(1)

2015-09-13 16:28 381 查看
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>

==============================================================================================
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: