1. 程式人生 > >Hibernate實現資料庫增、刪、改、查

Hibernate實現資料庫增、刪、改、查

1.匯入hibernate jar包和mysql jar包,修改配置檔案hibernate.cfg.xml

<?xml version="1.0" encoding="gbk"?>
<!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 name="foo">
		<!-- 配置資料庫資訊 --> 
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.url">jdbc:mysql:///hibernate1</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="connection.username">root</property>
		<property name="hibernate.connection.password">123</property>

		<!-- 其他配置 -->
		<property name="hibernate.show_sql">true</property>
		
		<!-- 匯入對映檔案 
		
		-->
		<mapping resource="demo/User.hbm.xml"/>
	
	
	
	</session-factory>
</hibernate-configuration>
2.建立資料庫中的表,根據表建立實體物件
package demo;

public class User {
	private int id;
	private String name;
	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;
	}
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "id="+id+" name="+name;
	}
}

3.根據表和物件,配置對映關係 User.hbm.xml
<?xml version="1.0" encoding="gbk"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- 

  This mapping demonstrates 

     (1) a table-per-subclass mapping strategy
         
     (2) a simple component mapping
     
     (3) recursive associations withing an inheritance tree
     
-->

<hibernate-mapping 
	package="demo">
	
	<class name="User" table="t_user">
		
		<id name="id" type="int" column="id" >
			<generator class="native"/> <!--表示自動增長-->
		</id>

        <property name="name" type="string" column="name" />
		
	</class>
	

</hibernate-mapping>

4.寫個HIbernate小工具,方便快速得到SessionFactory,得到session
package demo;


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

public class HibernateUtils {
	private static SessionFactory sessionFactory;
	
	//初始化SessionFactory
	static{
//		Configuration cfg=new Configuration();
//		cfg.configure();//讀取預設的配置檔案hibernate.cfg.xml
//		cfg.configure("hibernate.cfg.xml");
//		sessionFactory=cfg.buildSessionFactory();
		sessionFactory=new Configuration()
						.configure()
						.buildSessionFactory();
	}
	/**
	 * 獲取全域性唯一的SessionFactory
	 * @return
	 */
	public static SessionFactory getSessionFactory() {
		
		return sessionFactory;
	}
	/**
	 * 從全域性唯一的SessionFactory開啟session
	 * @return
	 */
	public static Session openSession() {
		return sessionFactory.openSession();
		
	}
}

5.在UserDao中完成具體功能
package demo;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class UserDao {
	/**
	 * 增
	 * @param user
	 */
	public void add(User user){
		Session session=HibernateUtils.openSession();
		Transaction tx=null;
		try{
			tx=session.beginTransaction();
			session.save(user);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException(e);
			} finally{
				session.close();
			}
	}
	/**
	 * 刪
	 * @param user
	 */
	public void delete(int id){
		Session session=HibernateUtils.openSession();
		Transaction tx=null;
		try{
			tx=session.beginTransaction();
			session.delete(session.get(User.class, id));
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException(e);
			} finally{
				session.close();
			}
	}
	/**
	 * 改
	 * @param user
	 */
	public void update(User user){
		Session session=HibernateUtils.openSession();
		Transaction tx=null;
		try{
			tx=session.beginTransaction();
			session.update(user);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException(e);
			} finally{
				session.close();
			}
	}
	/**
	 * 查
	 * @param id
	 */
	public User getById(int id){
		Session session=HibernateUtils.openSession();
		Transaction tx=null;
		try{
			tx=session.beginTransaction();
			User user=(User) session.get(User.class, id);
			tx.commit();
			return user;
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException(e);
			} finally{
				session.close();
			}
	}
	
	public List<User> findAll(){
		Session session=HibernateUtils.openSession();
		Transaction tx=null;
		try{
			tx=session.beginTransaction();
			List<User> list=session.createQuery( //使用HQL查詢
					"FROM User")
					.list();//根據條件得到list
			tx.commit();
			return list;
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException(e);
			} finally{
				session.close();
			}
		
	}
	
	/**
	 * 分頁,返回一頁的資料列表
	 * @param firstResult 從結果列表中的那個索引開始取資料
	 * @param maxResults 最多取多少條資料
	 * @return  list+count返回的條數
	 */
	public QueryResult findAll(int firstResult, int maxResults){
		Session session=HibernateUtils.openSession();
		Transaction tx=null;
		try{
			tx=session.beginTransaction();
			//查詢一頁的資料列表
			//方式一
//			Query query=session.createQuery("FROM User");
//			query.setFirstResult(firstResult);
//			query.setMaxResults(maxResults);
//			List<User> list=query.list();
			//方式二
			List<User> list=session.createQuery("FROM User")
					.setFirstResult(firstResult)
					.setMaxResults(maxResults)
					.list();
			//查詢總記錄數
			Long count=(Long)session.createQuery("SELECT COUNT(*) FROM User")
					.uniqueResult();
			tx.commit();
			return new QueryResult(count.intValue(),list);
		} catch (Exception e) {
			tx.rollback();
			throw new RuntimeException(e);
			} finally{
				session.close();
			}
	}
}

6.右擊包名-new-Junit Test Case,也可以一一測試,對UserDao進行測試 
package demo;

import static org.junit.Assert.*;

import java.util.List;

import org.hibernate.SessionFactory;
import org.junit.Test;

public class UserDaoTest {
	private UserDao userDao=new UserDao();
	@Test
	public void testAdd() {
		User user=new User();
		user.setName("Lily");
		userDao.add(user);
		
	}
	
	@Test
	public void testAdd_25() {
		for(int i=1;i<=25;i++){
			User user=new User();
			user.setName("test_"+i);
			userDao.add(user);
		}
		
	}

	@Test
	public void testDelete() {
		userDao.delete(1);
	}

	@Test
	public void testUpdate() {
		//從資料庫中獲取一條已存在的資料
		User user=userDao.getById(1);
		user.setName("haha");
		userDao.update(user);
	}

	@Test
	public void testGetById() {
		User user =userDao.getById(1);
		System.out.println(user);
	}

	@Test
	public void testFindAll() {
		List<User> users=userDao.findAll();
		for(User user:users){
			System.out.println(user);
		}
	}

	@Test
	public void testFindAllIntInt() {
//		QueryResult qr=userDao.findAll(0,10); //第1頁,每頁10條
//		QueryResult qr=userDao.findAll(10,10);
		QueryResult qr=userDao.findAll(20,10);
		
		//顯示結果
		System.out.println("總記錄數:"+qr.getCount());
		for(Object user:qr.getList()){
			System.out.println(user);
		}
	}

}


相關推薦

Hibernate實現資料庫

1.匯入hibernate jar包和mysql jar包,修改配置檔案hibernate.cfg.xml <?xml version="1.0" encoding="gbk"?> <!DOCTYPE hibernate-configuration PUB

shell指令碼操作mysql資料庫,使用mysql的-e引數可以執行各種sql的(建立,刪除,)等各種操作

來源:http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520114116289991/ mysql  -hhostname -Pport -uusername -ppassword  -e  相關mysql的

mybatis的傳統的實現

3.2.1、儲存使用者 <insert id="saveUser" parameterType="com.atguigu.mybatis.pojo.User"> insert into t_user(`last_name`,`sex`) valu

Mapper介面方式的mybatis的實現

4.1、Mapper介面程式設計的命名習慣Mapper介面方式的程式設計,需要先有一個介面。這個介面的命名一般是xxxxMapper。 比如: User模組的Mapper,介面命名為UserMapper。 Book模組的Mapper,介面命名為BookMappe

java連結mysql以及對資料庫

package com.jdbcdemo; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.PreparedStateme

dict的

date 關聯 print none 必須 數據類型 相同 一個 code dict是無序的 ,數據關聯性強,鍵值對,唯一一個個映射的數據類型 字典的鍵必須是可哈希的數據類型 (字符串,數字,bool,元祖)並且是唯一的. 不可哈希的:(列表,字典) dict的增 1

Javascript操作Cookie(

time() add return jna mts cap 關閉 nbsp expire 1 //1. 獲得指定名稱為ObjName的Cookie的值 2 function getCookie(ObjName){ 3 var arrStr = documen

MySql cmd下的學習筆記 —— 有關表的操作(

strong .com nsh utf str tab 主鍵 test har (知識回顧) 連接數據庫 mysql -uroot -p111 先建立一個新庫 create database test1; use test1; 由於今天的主要內容是表的操作,建立表的詳細過

mysql基本功能

增 ==》 insert into 庫.表(欄位名列表) values(值列表); mysql> create table meinvdb.mm(-> id int(4) not null primary key,-> name varchar(18) not null-> );Que

mysql基本功能

cat dup pda key null cte insert value creat 增 ==》 insert into 庫.表(字段名列表) values(值列表); mysql> create table meinvdb.mm(-> id

MySQL基礎操作

一,SQL語言概述1,SQL語言是關係型資料庫的標準語言,用於維護管理資料庫,如資料查詢,資料更新,訪問控制,物件管理等功能。 2,建表 這是需要掌握的。(1)#Show databases; 檢視資料庫裡所有的小資料庫名。 show看 databases 資料庫小庫 (2)#Create databa

python第四天課程:列表(),元祖

''' #1.增加 append insert li = ['alex',[1,2,3],'wusir','egon','女神','taibai'] li.append('日天') print(li) li.append(1) print(li) while 1: name = input('請

asp.net core 2.1 dotnet(三)EF.core 的

1.呼叫方式:    增加引用:          using Microsoft.EntityFrameworkCore;         using Newtonsoft

Java中List的

package Colection; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; //備選課程類 public class L

斷電導致oracle的ORA-01207錯誤完全解決辦法(重做日誌檔案(redo log files)管理(,切))

彙總整理一下有關重做日誌檔案(redo log files)管理相關的操作(增,刪,改,查,切)。供參考。1.當前日誌相關資訊[email protected]> select * from v$log;    GROUP#    THREAD#  SEQUENCE#      BYTES  

GreenDao3.2使用詳解(,升級)

首先看一下效果圖: 專案結構如下圖所示: 第一步:在build中新增配置如下: projet 目錄下的build.gradle dependencies { classpath 'org.greenrobot:greendao-gradl

表的完整語法( 子查詢 )

多行 教學 pan 比較 nbsp 匹配 字段 values 數據 表的完整語法增刪該查 表的完整 增 語法 1.所有數據按順序插入 insert [into] 表名 values (值1,……值n),[值1,……值n] 2.指定字段匹配插入,可以任意順序

SQL server中常見的的操作

--增-- /*增加列*/ alter table 表名 add 列名 varchar(20) check(你的約束條件); 如:在學生情況表中增加一個Email列,要求檢查輸入的是否為Email; alter table 學生情況表 add Email varchar

基於SpringMVC框架,完成使用者的,以及json資料處理

package org.ksea.controller; import java.io.File; import java.io.IOException; import java.util.List; import javax.servlet.http.HttpServletRequest; import j

MySQL資料庫中表記錄的操作

來源:Java聯盟 好的各位小夥伴~ 今天我們要了解的就是關於 MySQL資料庫中 有關於表記錄的操作 修改表記錄 插入表記錄 語法: 向表中插入某些列 insert into 表 (列名1,列名2,列名3...) values  (值1,值2,值3.