初识hibernate,使用idea maven项目搭建

来源:互联网 发布:域名注册排行榜 编辑:程序博客网 时间:2024/06/17 19:14
hibernate 简介:
hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。
hibernate核心接口
session:负责被持久化对象CRUD操作
sessionFactory:负责初始化hibernate,创建session对象
configuration:负责配置并启动hibernate,创建SessionFactory
Transaction:负责事物相关的操作
Query和Criteria接口:负责执行各种数据库查询


hibernate工作原理:

1.通过Configuration config = new Configuration().configure();//读取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的<mapping resource="xx/xx/User.hbm.xml"/>读取并解析映射信息
3.通过SessionFactory sf = config.buildSessionFactory();//创建SessionFactory
4.Session session = sf.openSession();//打开Sesssion
5.Transaction tx = session.beginTransaction();//创建并启动事务Transation
6.persistent operate操作数据,持久化操作
7.tx.commit();//提交事务
8.session.close()//关闭Session

9.sf.close()//关闭SesstionFactory

hibernate搭建:

1.具体搭建过程体系省略,下面是搭建好的结构图:


2.pom节点如下:

   <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-core</artifactId>            <version>RELEASE</version>        </dependency>        <dependency>            <groupId>javaee</groupId>            <artifactId>javaee-api</artifactId>            <version>5</version>        </dependency>            <!-- hibernate核心jar包 -->        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-core</artifactId>            <version>5.1.5.Final</version>        </dependency>        <!-- hibernate注解 -->        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-annotations</artifactId>            <version>3.5.0-Final</version>        </dependency>        <dependency>            <groupId>org.testng</groupId>            <artifactId>testng</artifactId>            <version>RELEASE</version>        </dependency>    </dependencies>


3.大配置的编写:

  创建一个hibernate.cfg.xml文件,将之放入resource目录下,其内容如下:

    

<!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="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>        <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>        <property name="connection.username">jjz</property>        <property name="connection.password">jjz</property>        <property name="show_sql">true</property>        <property name="hbm2ddl.auto">update</property>        <mapping resource="cn/jjz/pojo/Rs.hbm.xml"/>    </session-factory></hibernate-configuration>

4.持久层的搭建:

   将之放置在pojo下,以及相应的映射文件,如下所示:


 RS类中代码:

public class Rs {    private int id;    private String name;    private int age;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

Rs.hbm.xml映射文件如下:

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!-- package声明pojo类所在的包,如果不写 那么在class中需要指明pojo类所在的包       schema指数据库模式 一个模式下可以有多张表   --><hibernate-mapping package="cn.jjz.pojo">    <!-- class指映射一个实体类entity       提供了公共的无参构造方法-通过反射产生对象       属性用private修饰,并且生成对应的get/set方法       类不能用final来修饰-hibernate会产生代理类(cglib)       类需要指明标识       name表示pojo类名       table表示pojo类对应数据库中的表名;如果不写默认是类名    -->    <class name="Rs" table="Rs">        <!--              id表示实体类的标识(OID)              对应数据库表中的主键              name指实体类的标识属性名              column表示对应数据库表的列名:如果不写 则数据库表中列名和属性名一致              length表示数据库表中 对应数据类型的长度 ,如果不写有默认长度              type表示类型如果不写hibernate可以找到对应pojo类的属性的类型           -->        <id name="id" column="id">            <generator class="sequence"></generator>        </id>        <property name="name" column="name"></property>        <property name="age" column="age"></property>    </class></hibernate-mapping>


5.测试一下,将对应的测试类建在test下:

  

public class RsTest {    Configuration cfg = null;    SessionFactory sf = null;    Session session = null;    Transaction tx = null;    @Test    public void c() {        /*        * 查询        * */               cfg = new Configuration().configure();        sf = cfg.buildSessionFactory();        session = sf.openSession();        tx = session.beginTransaction();        Rs r = new Rs();        session.load(Rs.class, 2);        System.out.println(r.getName());        session.close();        sf.close();    }    @Test    public void b(){     /*     * 删除     * */        cfg=new Configuration().configure();        sf= cfg.buildSessionFactory();        session=sf.openSession();        tx=session.beginTransaction();        Rs r=new Rs();        r.setId(1);        session.delete(r);        tx.commit();        session.close();        sf.close();    }    @Test    public void a(){          //*         // ** 添加          //*        cfg=new Configuration().configure();        ServiceRegistry registry=new StandardServiceRegistryBuilder().configure().build();        sf=cfg.buildSessionFactory(registry);        session=sf.openSession();        tx=session.beginTransaction();        Rs stu=new Rs();        stu.setName("海四达");        stu.setAge(23);        session.save(stu);        tx.commit();        if (session!=null&&session.isOpen()){            session.close();            sf.close();        }}}

  


原创粉丝点击