Hibernateは、オープン ソースのオブジェクト リレーショナル マッピング フレームワークです。非常に軽量のオブジェクトで JDBC をカプセル化します。POJO とデータベース テーブル間のマッピング関係を確立します。完全に自動化された ORM フレームワークです。Hibernate は、SQL ステートメントを自動的に生成し、自動的に実行できます。 Java プログラマーがオブジェクト プログラミングの考え方を使用して、データベースを思い通りに操作できるようになります。
フレームワーク: 実際には再利用可能なアセンブリです。
Hibernate フレームワーク: 完全に自動化された永続層フレームワークです。
使用法:
1. プロジェクトを作成し、関連する jar パッケージをインポートします。または、Maven プロジェクトを直接作成します。Mavenプロジェクトをビルドするにはどうすればよいですか?
関連する依存関係を導入します。
<!-- 全自动持久层框架 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.7.Final</version>
</dependency>
2. クラスパス ディレクトリに構成ファイルを作成します (コードは通常、src/main/resources ディレクトリに配置されます): hibernate.cfg.xml (名前を付ける必要があります)
コア構成情報:
<?xml version='1.0' encoding='UTF-8'?>
<!--hibernate配置文件的相关约束-->
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<!-- 自动建表 -->
<property name="hbm2ddl.auto">update</property>
<!-- 方言 根据不同方言生成不同sql语句 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--数据库相关配置-->
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hibernateDemo?characterEncoding=utf-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<!--是否打印 自动生成的 sql 语句-->
<property name="show_sql">true</property>
<!--是否格式化 生成的sql 语句-->
<property name="format_sql">true</property>
<!--关系映射 在第四点有说明-->
<mapping resource ="demo/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
3. 新しい POJO (通常の Java オブジェクト) の
例を作成します。
public class User {
private int id;
private String name;
private String password;
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4. エンティティクラスとデータベース間のマッピング用に新しい構成ファイル xxx.xml (任意の名前を付けます) を作成します。
hibernate.cfg.xml に構成を追加します。<mapping resource ="xxx.xml"/>
例:
<?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="demo.User" table="user" >
<!--name指类中属性名,column指对应的表中列名 -->
<id name = "id" column ="user_id">
<generator class="identity"></generator> <!--主键从0自增-->
</id>
<property name="name" column ="namedemo" type="string" length ="20"></property>
<!--默认column 和 name 值相同,其他属性也都有默认值-->
<property name="password"></property>
<property name="age"></property>
</class>
</hibernate-mapping>
5. 新しいテストクラスを作成します
。 例:
public class HibernateDemo {
public static void main(String[] args) {
// .configure()方法会读取classpath下的hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
// 会启动一个线程
SessionFactory fac = cfg.buildSessionFactory();
//打开一条数据库会话,底层会建立jdbc连接
Session session = fac.openSession();
System.out.println("Hibernate 已成功连接数据库");
session.getTransaction().begin(); //开启事务
User user = new User();
user.setName("张三");
user.setPassword("123456");
user.setAge(15);
session.save(user); //保存数据
session.getTransaction().commit(); //提交事务
//关闭资源
session.close();
fac.close();
}
}
6. テストを実行します。
プログラムの入力に従って、Hibernate はまずマッピングに基づいてテーブルを作成し、次に挿入ステートメントを実行してデータを追加します。
補足: 削除、変更、クエリ操作。
コード説明:トランザクション開始からトランザクション終了までのコードのみで、その他のコードは追加したコードと同じです。
削除:オブジェクト指向の考え方により削除し、新しいオブジェクトを作成し、削除するレコードの ID を渡します。
session.getTransaction().begin(); //开启事务
try {
User u = new User();
u.setUserId(12);
session.delete(u);
session.getTransaction().commit(); //提交事务
} catch (Exception e) {
session.getTransaction().rollback(); //若有异常 则回滚事务
}
変更:変更する場合は、まず変更が必要なレコードをクエリし、次に属性の 1 つを変更し、最後にそれらを保存する必要があります。
session.getTransaction().begin();//开启事务
try {
//错误方法
/*User u = new User();
u.setUserId(12);
u.setAge(0);
session.update(u);*/
//先查询 再修改 再更新
User u = session.get(User.class, 12);
u.setAge(100);
session.update(u);
session.getTransaction().commit();//提交事务
} catch (Exception e) {
session.getTransaction().rollback();//回滚事务 要么全部执行,要么全不执行。
}
お問い合わせ:
//HQL(Hibernate Query Language)语句,纯查询语句,面向对象的语言,在HQL中没有数据库的概念
//方式一 list集合
String hql = "from User u";
Query<User> query = session.createQuery(hql);
//query.list() 返回list 集合
List<User> list = query.list();
for(User u: list){
System.out.println(u.getName());
}
//方式二 使用迭代器
String hql = "from User u where u.age > 5";
Query query = session.createQuery(hql);
Iterator it = query.iterate(); //先查询符合条件的id
while(it.hasNext()){
User u = (User)it.next(); //再根据id查具体值
System.out.println(u.getName());
}
//方式三 唯一值
String hql = "from User u where u.age = 5";
Query query2 = session.createQuery(hql);
User u =(User) query2.uniqueResult(); //确定只有一个返回值时使用 否则会抛出异常
System.out.println(u.getName());