搭建簡單的hibernate框架,完成對mysql的增刪改查
搭建hibernate的步驟:
1.首先下載hibernate原始碼https://nchc.dl.sourceforge.net/project/hibernate/hibernate4/4.3.11.Final/hibernate-release-4.3.11.Final.zip
2.建立一個java專案,hibernate是對資料庫操作的,所以建立一個普通的java專案就可以了。然後把解壓的hibernate-release-4.3.11.Final中lib裡的required中的所有jar包放到專案中
3.配置hibernate.cfg.xml(名稱隨意,但一般是這個名稱,因為Configuration呼叫configure時預設的檔名稱就是它)
4.建立實體類,並配置實體類的對映配置檔案
開始建立java專案:
1.在建立完java專案後,再建立一個lib資料夾,把所有的jar放到lib中,然後選中所有jar,右鍵add,把它加入就可以了。(注:建立的動態web專案是不用add的,直接放到lib中它會自動新增的)
2.建立 hibernate.cfg.xm檔案
在src下建立xml檔案,然後在hibernate-core的jar包中找到dtd校驗的檔案頭
配置連線資料庫的相關內容
<?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 name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=UTF-8
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
123
</property>
</session-factory>
</hibernate-configuration>
建立實體類
package com.pojo; /** * 使用者實體類 * @author zy * */ public class UserInfo { private int userId; private String userName; private String userSex; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserSex() { return userSex; } public void setUserSex(String userSex) { this.userSex = userSex; } @Override public String toString() { return "UserInfo [userId=" + userId + ", userName=" + userName + ", userSex=" + userSex + "]"; } }
建立實體類的對映檔案
<?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 package="com.pojo">
<!-- 配置UserInfo的ORM對映 :配置package可以讓class中的name只寫類名-->
<class name="UserInfo" table="t_user">
<!-- 配置主鍵對映 -->
<!-- id ->name:UserInfo類中的主鍵屬性名稱 ,區分大小寫
column->name:不區分大小寫,資料庫表中的欄位
-->
<id name="userId" type="int">
<column name="user_id"/>
<!-- 配置主鍵的生成策略
identity
increment
native
如果設定了主鍵自動增長就把下面generator的註釋開啟
-->
<!-- <generator class="native"></generator> -->
</id>
<!-- 屬性對映 -->
<property name="userName" column="user_name"></property>
<property name="userSex" column="user_sex"></property>
</class>
</hibernate-mapping>
再在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 name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:mysql://127.0.0.1:3306/testdb?useUnicode=true&characterEncoding=UTF-8
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
123
</property>
<!-- 加入ORM對映檔案 -->
<mapping resource="com/pojo/UserInfo.hbm.xml"/>
</session-factory>
</hibernate-configuration>
建立測試類:
package com.test;
/**
* 測試hibernate的使用
* @author zy
*
*/
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import com.pojo.UserInfo;
@SuppressWarnings("all")
public class Test {
private static SessionFactory sessionFactory;
//SessionFactory是重量級的物件,很佔記憶體,所以使用靜態塊只建立一次。
static{
//載入並解析hibernate的配置檔案configure()中可以不寫,因為預設的就是/hibernate.cfg.xml
Configuration cfg=new Configuration().configure("/hibernate.cfg.xml");
//建立註冊服務物件
ServiceRegistry serviceRegistry=new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
//建立SessionFactory物件
sessionFactory=cfg.buildSessionFactory(serviceRegistry);
}
public static void main(String[] args) {
myquery();
}
//單條查詢
private static void queryOne(){
Session session = sessionFactory.openSession();
//簡單單條查詢,查詢表中的第一條資料
UserInfo userInfo=(UserInfo) session.get(UserInfo.class, 1);
System.out.println(userInfo);
}
//更新
private static void update(){
Session session = sessionFactory.openSession();
//開啟事務
Transaction tx=session.beginTransaction();
//簡單單條查詢,查詢表中的第2條資料
UserInfo userInfo=(UserInfo) session.get(UserInfo.class, 2);
//更新
userInfo.setUserName("胡歌");
session.update(userInfo);
tx.commit();
}
//新增
private static void save(){
Session session = sessionFactory.openSession();
//開啟事務
Transaction tx=session.beginTransaction();
UserInfo userInfo=new UserInfo();
userInfo.setUserId(5);
userInfo.setUserName("怎麼說");
userInfo.setUserSex("男");
session.save(userInfo);
tx.commit();
}
//刪除
private static void delete(){
Session session = sessionFactory.openSession();
//開啟事務
Transaction tx=session.beginTransaction();
//簡單單條查詢,查詢表中的第3條資料
UserInfo userInfo=(UserInfo) session.get(UserInfo.class,3);
session.delete(userInfo);
tx.commit();
}
//自定義查詢yuj
private static void myquery(){
Session session = sessionFactory.openSession();
//查詢特定類屬性,from+類名不是表名
String hql="from com.pojo.UserInfo";
//查詢某個欄位
hql="select us.userName from UserInfo us";
//where條件查詢
hql="from UserInfo us where us.userId=2";
Query query = session.createQuery(hql);
//使用命名引數查詢
/* String hql = "FROM UserInfo us WHERE us.userId = :us_id";
Query query = session.createQuery(hql);
query.setParameter("us_id",4);
List results = query.list();*/
List lists = query.list();
for (Object list : lists) {
System.out.println(list);
}
session.close();
}
/**
* UPDATE 語句能夠更新一個或多個物件的一個或多個屬性。下面是使用 UPDATE 語句的簡單的語法:
String hql = "UPDATE UserInfo set userName = :userName " +
"WHERE userId = :userId";
Query query = session.createQuery(hql);
query.setParameter("userName", "忽悠");
query.setParameter("userId", 10);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
*/
/**
* DELETE 語句可以用來刪除一個或多個物件。以下是使用 DELETE 語句的簡單語法:
String hql = "DELETE FROM UserInfo " +
"WHERE userId = :userId";
Query query = session.createQuery(hql);
query.setParameter("userId", 10);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
*/
/**
* HQL 只有當記錄從一個物件插入到另一個物件時才支援 INSERT INTO 語句。下面是使用 INSERT INTO 語句的簡單的語法:
String hql = "INSERT INTO UserInfo(userId, userName, userSex)" +
"SELECT userId, userName, userSex FROM old_UserInfo";
Query query = session.createQuery(hql);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);
*/
}