IDEA+hibernate操作數據庫

1.hibernate操作數據庫

是數據庫訪問層的框架,對JDBC進行封裝,簡化數據庫訪問層的開發
(1)確認IDEA已使用hibernate插件
(2)IDEA配置Hibernate
(3) 也可以參考how2j
實施例:
(1)配置文件
在src新建一個package,新建一個實體類User,用於映射數據庫中的表

package entity;

/**
 * @ author: 曲夢瑤
 * @ date: 2020/2/3-12 : 02
 */
public class User {
    //創建實體類用於映射數據庫中的表
    int id;
    String name;
    float height;
    int grade;
    public int getId(){return this.id;}
    public void setId(int num){this.id=num;}
    public String getName(){return this.name;}
    public void setName(String name){this.name=name;}
    public float getHeight(){return this.height;}
    public void setHeight(float num){this.height=num;}
    public int getGrade(){return this.grade;}
    public void setGrade(int gra){this.grade=gra;}
}

(2)建立該類的hbm.xml配置文件

User.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">

<hibernate-mapping package="entity">
    <class name="User" table="students">
        <id name="id" column="id">
            <generator class="native">
            </generator>
        </id>
        <property name="name" />
        <property name="height" />
        <property name="grade"/>
    </class>

</hibernate-mapping>
<?xml version="1.0"?>

cfg.xml文件配置如下:(要注意配置文件不識別換行,不能隨便換行)

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!--數據庫信息 -->
        <property name="connection.url">jdbc:mysql://localhost:3306/jdbctest?characterEncoding=UTF-8</property>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.username">root</property>
        <property name="connection.password">admin</property>
        <!--數據庫方言信息 -->
        <property name="dialect">org.hibernate.dialect.MySQL57Dialect</property>
        <property name="current_session_context_class">thread</property>
        <property name="show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <mapping resource="entity/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

(3)配置完成之後,新建一個類用來測試hibernate是否能用

package test;

import entity.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import java.util.Scanner;

/**
 * @ author: 曲夢瑤
 * @ date: 2020/2/3-13 : 03
 */
public class TestHibernate {
    public static void main(String[] args) {
        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session s = sf.openSession();
        s.beginTransaction();
        System.out.println("請輸入要寫入的數據");
        //在後臺輸入數據並寫入數據庫的表
        Scanner sc= new Scanner(System.in);
        String rec=sc.nextLine();
        String[] datas=rec.split(",");
        while(datas.length>1){
            User qmy=new User();
            qmy.setName(datas[0]);
            qmy.setHeight(Float.parseFloat(datas[1]));
            qmy.setGrade(Integer.parseInt(datas[2]));
            //使用session的save方法來插入數據
            s.save(qmy);
            rec=sc.nextLine();
            datas=rec.split(",");
        }
        s.getTransaction().commit();
        s.close();
        sf.close();
    }
}
2.實體類對象在hibernate的三種狀態:

瞬態、永久和脫管
瞬態:產生的對象沒和hibernate產生關係,沒有進行數據庫的訪問
永久:在數據庫保存了一條記錄
脫管:斷開session之後的對象

3.利用Hibernate對數據庫進行操作
//get方法獲取數據
for(int i=10;i<16;i++){
    User ge=(User)s.get(User.class,i);
    System.out.println(ge.getId()+ge.getName()+ge.getHeight()+ge.getGrade());
}
//刪除數據,首先要獲取數據
User ge;
for(int i=10;i<16;i++){
    ge=s.get(User.class,i);
    System.out.println(ge.getId()+ge.getName()+ge.getHeight()+ge.getGrade());
    s.delete(ge);
}
//修改數據,首先要獲取數據
User ge;
        for(int i=20;i<25;i++){
            ge=s.get(User.class,i);
            //修改數據
            if(ge !=null){//如果不判斷,當主鍵不存在時可能會出現空指針異常
                ge.setName("學生"+i);
                s.update(ge);
            }
        }
java web 和java application的區別:

https://blog.csdn.net/HongRi_/article/details/88225071
最主要的區別是Web項目中的JAVA文件是tomcat服務器來觸發的,但是java項目裏的是Main()方法來開始的。還有一點是Web項目需要服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章