用eclipse寫hibernate連線MySQL資料庫案例
阿新 • • 發佈:2018-12-31
專案目錄如下:
需要匯入如下jar包,建議單獨放在一個lib資料夾下。
1.在MySQL中建立一個user表包含id, username,password三個屬性。id設為自動增長,其餘兩個為varchar(20)。
2.javabean user.java程式碼如下:
package habernateOne; public class User { @Override public String toString() { return "User [username=" + username + ", password=" + password + ", id=" + id + "]"; } private String username; private String password; private int id; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getId() { return id; } public void setId(int id) { this.id = id; } public User() { super(); // TODO Auto-generated constructor stub } }
3.全域性配置檔案hibernate.cfg.xml如下:
<?xml version="1.0" encoding="UTF-8"?> <!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 元素用於配置Hibernate中的屬性 鍵:值 --> <!-- hibernate.connection.driver_class : 連線資料庫的驅動 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <!-- hibernate.connection.username : 連線資料庫的使用者名稱 --> <property name="hibernate.connection.username">root</property> <!-- hibernate.connection.password : 連線資料庫的密碼 --> <property name="hibernate.connection.password">YES</property> <!-- hibernate.connection.url : 連線資料庫的地址,路徑 --> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/ssh_hw</property> <!-- show_sql: 操作資料庫時,會 向控制檯列印sql語句 --> <property name="show_sql">true</property> <!-- format_sql: 列印sql語句前,會將sql語句先格式化 --> <property name="format_sql">true</property> <!-- hbm2ddl.auto: 生成表結構的策略配置 update(最常用的取值): 如果當前資料庫中不存在表結構,那麼自動建立表結構. 如果存在表結構,並且表結構與實體一致,那麼不做修改 如果存在表結構,並且表結構與實體不一致,那麼會修改表結構.會保留原有列. create(很少):無論是否存在表結構.每次啟動Hibernate都會重新建立表結構.(資料會丟失) create-drop(極少): 無論是否存在表結構.每次啟動Hibernate都會重新建立表結構.每次Hibernate執行結束時,刪除表結構. validate(很少):不會自動建立表結構.也不會自動維護表結構.Hibernate只校驗表結構. 如果表結構不一致將會丟擲異常. --> <property name="hbm2ddl.auto">update</property> <!-- 資料庫方言配置 org.hibernate.dialect.MySQLDialect (選擇最短的) --> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- hibernate.connection.autocommit: 事務自動提交 --> <property name="hibernate.connection.autocommit">true</property> <!-- 將Session與執行緒繫結=> 只有配置了該配置,才能使用getCurrentSession --> <property name="hibernate.current_session_context_class">thread</property> <!-- 引入ORM 對映檔案 填寫src之後的路徑 --> <mapping resource="habernateOne/User.hbm.xml"/> </session-factory> </hibernate-configuration>
4.區域性配置檔案如下:
<?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"> <!-- ORM元資料 表物件關係對映檔案 package : 配置該配置檔案中類所在的包. --> <hibernate-mapping> <class name="habernateOne.User" table="T_User"> <id name="id" column="id"> <!--generator的class型別 assigned:主鍵的狀態 assigned表示程式生成 sequence:Oracle中的序列 identity:Sql中的自動編號 increment:先查詢最大的編號再增1 uuid:生成32位長的字串 native:根據資料庫自動生成 --> <generator class="assigned" /> </id> <!-- 直接使用property屬性設定 --> <property name="username" column="username" length="20" /> <property name="password" column="password" length="20" /> </class> </hibernate-mapping>
5.測試類如下:
package habernateOne;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
public class Test {
public static void main(String[] args) {
Configuration con = new Configuration().configure();
SessionFactory sessionFactory = con.buildSessionFactory();
//向資料庫插入一條資料
Session session = sessionFactory.openSession();
User user = new User();
user.setPassword("123");
user.setUsername("六六六");
session.save(user);
session.beginTransaction().commit();
//查詢一條資料
User userx = (User)session.load(User.class,3); //懶載入
System.out.println(userx);
session.close();
}
}