培训第30天----Hibernate初识(1)

本文详细介绍了Hibernate框架的基础知识,包括配置文件设置、实体类定义、SessionFactory工具类使用等关键环节,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

               接下来我就总结一下关于hibernate的一些基础知识。

一.导入jar包

              使用Hibernate框架的功能,导入jar包是必不可少的。其中还包括MySql的驱动包。

二.Hibernate的核心配置文件

               hibernate的核心配置文件,一般名为hibernate.cfg.xml,并且放在src目录下。如果核心配置文件不满足

上述要求的任意一点,那么在加载核心配置文件时就要通过configure()方法来指定wen'文件所在路径。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--  -->
<hibernate-configuration>
	<session-factory>
         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>	
         <property name="connection.url">jdbc:mysql://localhost:3306/ssgl?characterEncoding=GBK</property>	
         <property name="connection.username">root</property>	
         <property name="connection.password">root</property>	
         <!-- 配置数据库的方言 -->
         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
         
         <property name="show_sql">true</property>
         
             	<!-- 要使主配置文件找到 表和实体类对应的配置文件 -->  
         <mapping resource="com/java/Hbm/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

                上述是一个简单的核心配置文件代码。用于程序的初始化,当程序运行时,它会被加载进内存。

三.映射配置文件

                 映射配置文件的文件名通常定义为  实体类名.hbm.xml,通常放在实体类所在的包下。但是,这些都不是

问题,我们只需要在将映射配置文件引入核心配置文件时,将映射配置文件确切的路径写入即可。它用来将数据库

中的表和java中的实体类一 一对应,这样我们就能用这个实体类的对象 来操作数据库。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<!-- 配置实体类对应的数据库中的表 -->
<hibernate-mapping>
   <class name="com.java.Bean.User" table="t_user">
             <!--id属性定义的列,应该对应表中的主键,而property则是表中普通的属性  -->
   		<id name="userId" column="userid"></id>
   		<!-- property标签中,可以没有column,但是name和colunm要一致。 -->
   		<property name="userPassword" column="userpassword"></property>
   		<property name="userName" column="username"></property>
   		<property name="userSex" column="usersex"></property>
   		<property name="userRole" column="userrole"></property>
   		<property name="userCollege" column="usercollege"></property>
   		<property name="userMajor" column="usermajor"></property>
   		<property name="userClass" column="userclass"></property>
   		<property name="dormitoryId" column="dormitoryId"></property>
   		
   </class>
</hibernate-mapping>

                   上述简单的代码就是将实体类与表一 一对应。

四.实体类

                要想用hibernate来操作数据库,那么实体类是必不可少的。

package com.java.Bean;

public class User 
{
	/*
		 CREATE TABLE "t_user" (
				  "userid" varchar(30) NOT NULL,
				  "userpwd" varchar(30) NOT NULL,
				  "username" varchar(30) NOT NULL,
				  "usersex" varchar(5) NOT NULL,
				  "userrole" varchar(5) NOT NULL,
				  "usercollege" varchar(30) DEFAULT NULL,
				  "usermajor" varchar(30) DEFAULT NULL,
				  "userclass" varchar(30) DEFAULT NULL,
				  "dormitoryid" varchar(30) DEFAULT NULL,
				  PRIMARY KEY ("userid")
				);
	*/
	/*  数据库表中对应的实体类 */
	private String userId;
	private String userPassword;
	private String userName;
	private String userSex;
	private String userRole;
	private String userCollege;//学院
	private String userMajor;//专业
	private String userClass;
	private String dormitoryId;
	public User() {
		super();
		// TODO Auto-generated constructor stub
	}
	public User(String userId, String userPwd, String userName, String userSex, String userRole, String userCollege,
			String userMajor, String userClass, String dormitoryId) {
		super();
		this.userId = userId;
		this.userPassword = userPassword;
		this.userName = userName;
		this.userSex = userSex;
		this.userRole = userRole;
		this.userCollege = userCollege;
		this.userMajor = userMajor;
		this.userClass = userClass;
		this.dormitoryId = dormitoryId;
	}
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	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;
	}
	public String getUserRole() {
		return userRole;
	}
	public void setUserRole(String userRole) {
		this.userRole = userRole;
	}
	public String getUserCollege() {
		return userCollege;
	}
	public void setUserCollege(String userCollege) {
		this.userCollege = userCollege;
	}
	public String getUserMajor() {
		return userMajor;
	}
	public void setUserMajor(String userMajor) {
		this.userMajor = userMajor;
	}
	public String getUserClass() {
		return userClass;
	}
	public void setUserClass(String userClass) {
		this.userClass = userClass;
	}
	public String getDormitoryId() {
		return dormitoryId;
	}
	public void setDormitoryId(String dormitoryId) {
		this.dormitoryId = dormitoryId;
	}
	@Override
	public String toString() {
		return "User [userId=" + userId + ", userPwd=" + userPassword + ", userName=" + userName + ", userSex=" + userSex
				+ ", userRole=" + userRole + ", userCollege=" + userCollege + ", userMajor=" + userMajor
				+ ", userClass=" + userClass + ", dormitoryId=" + dormitoryId + "]";
	}
	
}

                 我的习惯是将数据库中的字段小写,实体类中的属性使用小驼峰命名法。。。。。

五.SessionFactory工具类

                 hibernate对数据库的操作是基于Session对象的,session对象是线程不安全的,每一个事务应该对应一个

session对象,但是,在一个项目中(一个数据库),通常只允许有一个SessionFactory。故名思意,SessionFactory

就是一个制作Session的工厂。(它用来启动hibernate框架)。

package com.java.Session;

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

public class HibernateSessionFactory {
   private static final SessionFactory sessionFactory;
   static {
	   /*默认寻找src下的hibernate.cfg.xml。 如果hibernate的主配置文件名和路径不再src下,
	               就需要用configure("")的方法来指定寻找。
	   */
	   sessionFactory=new Configuration().configure().buildSessionFactory();
   }
 
  /* 
   * public static void main(String[] args) {
	   HibernateSessionFactory hibernateSessionFactory=new HibernateSessionFactory();
	   Session session=hibernateSessionFactory.getSession();
	   System.out.println(session);
	  
   }
   */
   /* 访问数据库的一次会话*/
   public Session getSession() {
	Session session =sessionFactory.openSession();
	   return session;
   }
   
}

六.在Dao层中定义操作数据库的方法

package com.java.Dao;

import java.util.List;

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

import com.java.Bean.User;
import com.java.Session.HibernateSessionFactory;

public class UserDao {
	public static void main(String[] args) {
	//	query_SQLQuery();
	//	UserDao.query_HQLQuery();
		add();
	}
      
	 public static void query_SQLQuery() {
		 HibernateSessionFactory hibernateSessionFactory=new HibernateSessionFactory();
		 Session session=hibernateSessionFactory.getSession();
		 /*得到SQLQuery,将数据库中数据封装成数组对象,返回的是地址。
		  *要想得到对象的属性,就要将SQLQuery定义泛型。
		 */
		 SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");//用的是sql语言
		 List list = sqlQuery.list();   //将查询出来的对象地址封装为集合
	  
		 SQLQuery sqlQuery2 = session.createSQLQuery("select * from t_user");
		 //要想得到对象的属性,要在集合前添加泛型
		 List<Object[]> list2 = (List<Object[]>)sqlQuery2.list();   //强转一下
		 for(Object[] list0:list2){
				 for(Object obj:list0) {
					 System.out.print(obj+"-");
				 }
				     System.out.println();
			 }
		 }
	 
	 public static void query_HQLQuery() {
		 //SessionFactory在一个项目中(一个数据库中)通常只能有一个
		 HibernateSessionFactory hibernateSessionFactory=new HibernateSessionFactory();
		 Session session=hibernateSessionFactory.getSession();
		 Query query = session.createQuery("From User where usersex='man'");
		 List<User> list =(List<User>) query.list(); 
		 for(User user:list) {
			System.out.println(user);
		   }
	    }
	 
	 public static void add(){
		 //添加用户信息
		 HibernateSessionFactory hibernateSessionFactory=new HibernateSessionFactory();
		 Session session=hibernateSessionFactory.getSession();
		 User uesr=new User("1","1","1","1","1","1","1","1","1");
		 //获取并打开事务
		 Transaction transaction = session.beginTransaction();
		 /*saveOrUpdate 方法,向数据库发送两条sql语句,第一个是查询,如果数据主键存在,那么
		  *将根据主键更新数据。如果查询的数据主键不存在,那么就将该条数据保存到数据库中。
		  */
		  session.saveOrUpdate(uesr); 
		  //提交事务,前提是数据库中 的表是用事务管理的
		 transaction.commit();
	  }
	 
	 }
	 

                 为了代码简单,我就直接在Dao中定义main方法,并进行测试。

                 代码中所说的 表用事务管理,在数据库中是可以自定义的。你可以选择用事务管理表,也可以不用。

  

 

                如果在创建表的时候有这句代码,那么就是用事务管理的 ,那么怎么取消事务管理呢?

                按下设计表 ------选项,到达页面后,将页面中的引擎 选为如图标红的字段,那么就表就不再用事务

管理了。

七.总结

                我应该会转发几篇(或者看完后自己总结一下)博客------关于在学习hibernate中遇到的一些问题的博客。

转发 或者 总结(自己写)到时候再议,哈哈哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值