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項目需要服務器。