Hibernate的使用(一)

一,hibernate的介绍

hibernate是一款基于ORM的数据库开源框架,所谓的ORM即Object Realational Mapping(对象关系映射),简单的说就是可以让使用该框架的人通过面向对象的语言去操控关系型数据库。与传统的通过JDBC来完成数据库的操作相比,使用该框架可以大大降低开发者的工作量,使其从关系型数据库的各种操作中脱离出来(加载驱动,创建连接等)。JAVA中一个POJO的类是通过hibernate中的SQlSessionFactory维护,然后映射到数据库中相应的表。常用的ORM框架还有Mybatis等。

二,hibernate的使用

hibernate有两种使用方式,一种是通过配置相应的xml文件,然后进行各种初始化工作;另一种便是通过注解的方式。

2.1 项目的搭建

(1)通过Eclipse创建一个maven项目

(2)修改pom.xml文件引入hibernate所需要的一些jar包

本项目maven使用了3.5.4的版本,jdk使用了1.8,hibernate的版本是3.5.4-Final,pom文件内容如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mytest</groupId>

  <artifactId>Hibernatetest</artifactId>

  <packaging>war</packaging>

  <version>0.0.1-SNAPSHOT</version>

  <name>Hibernatetest Maven Webapp</name>

  <url>http://maven.apache.org</url>

  <dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

    <!-- 添加hibernate的依赖 开始-->

    <dependency>

        <groupId>dom4j</groupId>

        <artifactId>dom4j</artifactId>

        <version>1.6.1</version>

    </dependency>

    <dependency>

        <groupId>commons-logging</groupId>

        <artifactId>commons-logging</artifactId>

        <version>1.1.1</version>

    </dependency>

    <!-- https://mvnrepository.com/artifact/log4j/log4j -->

    <dependency>

      <groupId>log4j</groupId>

      <artifactId>log4j</artifactId>

      <version>1.2.17</version>

    </dependency>

    <dependency>

        <groupId>commons-collections</groupId>

        <artifactId>commons-collections</artifactId>

        <version>3.2.1</version>

    </dependency>

    <dependency>

        <groupId>cglib</groupId>

        <artifactId>cglib-nodep</artifactId>

        <version>3.1</version>

    </dependency>

    <!-- Hibernate library dependecy end -->

    <dependency>

        <groupId>javax.transaction</groupId>

        <artifactId>jta</artifactId>

        <version>1.1</version>

    </dependency> 

    <!-- 添加hibernate的依赖 结束-->

    <!-- mysql数据库的驱动包 -->

    <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.1.6</version>

      </dependency>

      <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-annotations -->

      <!-- 添加maven的注解功能 -->

    <dependency>

      <groupId>org.hibernate</groupId>

      <artifactId>hibernate-annotations</artifactId>

      <version>3.5.4-Final</version>

    </dependency>

  <!-- https://mvnrepository.com/artifact/org.javassist/javassist -->

<dependency>

    <groupId>org.javassist</groupId>

    <artifactId>javassist</artifactId>

    <version>3.24.0-GA</version>

</dependency>

<!--    https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->

    <dependency>

      <groupId>org.slf4j</groupId>

      <artifactId>slf4j-log4j12</artifactId>

      <version>1.7.25</version>

      <scope>test</scope>

    </dependency>

<!--    https://mvnrepository.com/artifact/org.slf4j/slf4j-nop -->

  <dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-nop</artifactId>

    <version>1.7.2</version>

  </dependency>

  <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api-->

  <dependency>

    <groupId>org.slf4j</groupId>

    <artifactId>slf4j-api</artifactId>

    <version>1.7.25</version>

</dependency>

  </dependencies>

  <build>

    <finalName>Hibernatetest</finalName>

    <plugins>

<!-- define the project compile level -->

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-compiler-plugin</artifactId>

<version>2.3.2</version>

<configuration>

<source>1.8</source>

<target>1.8</target>

</configuration>

</plugin>

</plugins>

  </build>

</project>

注意:在最后运行的时候要是报某某class文件找不到的错误,那就是说明引入的jar包少了,在网上搜一下报错信息找到缺少的jar包,然后引入相应的jar包依赖即可,我在刚开始用的时候也是前前后后添加了好几个依赖...以上pom文件在我的机器上是不存在问题的。

2.2 使用

创建项目相应的文件,最后整个项目的主要文件结构如下:

 

其中domain包下放JavaBean,test包下放相应的测试例子,mapping路径下放映射文件,hibernate.cfg.xml是hibernate的配置文件,里面配置有数据库连接属性等内容,hibernate就是通过该文件进行初始化的。

(1)在domain包下建一个Student类,内容如下:

package com.domain;

public class Student {

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;

}

}

该类将与数据库中的表进行映射,类中的属性便为数据库中的字段。

(2)在数据库中进行建表操作

create table tb_student(

  id int(10) primary key auto_increment, 

  name varchar(20),

  age int(3)

);

(3)修改hibernate.cfg.xml文件,其实使用properties文件一样可以,但是我比较习惯使用xml文件。具体内容如下:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="hibernate.connection.password">root</property>

        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mytest</property>

        <property name="hibernate.connection.username">root</property>

        <!-- 方言设置,不同的数据库有不同的方言信息,以下为mysql的 -->

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!--2.2.显示Hibernate在运行的时候执行的sql语句-->

        <property name="hibernate.show_sql">true</property>

        <!--2.3.格式化sql-->

        <property name="hibernate.format_sql">true</property>

        <!--2.4.自动建表-->

        <!-- 使用了该配置要是相应的表还没有被创建,那么在运行时hibernate会自动新建一个相应的表 -->

        <property name="hibernate.hbm2ddl.auto">update</property>

        <mapping resource="mapping/StudentMapping.hbm.xml"></mapping>

    </session-factory>

</hibernate-configuration>

//注意上面的mapping resource节点指明了映射文件所在路径

(4)在mapping文件夹新建一个StudentMapping.hbm.xml文件,该文件配置了映射类的信息,具体内容如下:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="com.domain.Student" table="tb_student">

        <!-- id字段表示数据库主键生成策略

        native 使 Hibernate 可以使用 identity, sequence 或 hilo 算法根据底层数据库的情况来创建主键。

        -->

        <id name="id" column="id" type="int">

            <generator class="native"/>

        </id>

        <!-- type属性会将Java类型转换为sql数据类型,name指实体类中的属性名称,column指在数据库中的列名 -->

        <property name="name" column="name"  type="java.lang.String" length="20"/>

        <property name="age" column="age" type="int"></property>

    </class>

</hibernate-mapping>

(5)在com.test包下新建一个测试类,具体内容如下:

package com.test;

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.Transaction;

import org.hibernate.cfg.Configuration;

import com.domain.Student;

public class HibernateTest {

public static void main(String[] args) {

Configuration config = new Configuration().configure("hibernate.cfg.xml");

//开启会话工厂

SessionFactory sessionFactory = config.buildSessionFactory();

//开启会话

Session session = sessionFactory.openSession();

//开启事务

Transaction tr = session.beginTransaction();

try {

Student stu = new Student();

stu.setName("隔壁老王");

stu.setAge(17);

//保存数据

session.save(stu);

//记得要提交事务,不然不会保存的呀

tr.commit();

}catch(Exception e) {

e.printStackTrace();

tr.rollback();

   }

 }

}

运行,若控制台打印如下信息则表示执行成功:

查找tb_student表,看看数据是否被保存:

此处由于我们使用了mysql的主键自增,所以在进行保存的时候不用在显式的指明id的值。

常见的错误:

(1)保证自己的mysql在本地是可以被访问的

(2)hibernate.cfg.xml中关于数据库的配置信息要替换成自己的

(3)如何插入中文报错,说明数据库的默认编码方式不对,需要设置为utf-8。

下一节将记录hibernate注解的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate是一个对象关系映射框架,它将Java实体类映射到数据库表中,并将Java实体类成员变量数据类型映射到数据库表字段数据类型中。在使用Hibernate时,需要进行以下步骤: 1. 根据配置信息创建配置对象。 2. 使用配置对象创建sessionFactory对象,用于配置Hibernate。 3. 使用sessionFactory对象创建session对象,与数据库进行物理连接并进行交互。 4. 可以选择性地创建Transaction对象,用于管理事务。 5. 可以创建Query对象,用于执行HQL语句。 6. 可以创建Criteria对象,用于执行标准化查询。 7. 可以创建sqlQuery对象,用于执行原生的SQL语句。 此外,Hibernate还支持使用命名参数进行HQL查询。通过使用命名参数,可以接受用户的简单输入而无需担心SQL注入攻击。例如,可以使用以下方式进行HQL查询: ```java String hql = "FROM Employee E WHERE E.id = :employee_id"; Query query = session.createQuery(hql); query.setParameter("employee_id", 10); List results = query.list(); ``` 通过以上步骤和技术,开发人员可以直接操作对象,避免大量的数据编程(SQL编写),从而提升开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [hibernate使用](https://blog.csdn.net/u011582840/article/details/115208330)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值