hibernate学习第一天笔记

本文展示了如何使用Java ORM框架(如Hibernate)配置连接池、设置基本参数、显示SQL语句、自动创建表以及映射关系。同时,通过Java代码实现数据的增删改查操作,并详细介绍了User类及其映射XML文件User.hbm.xml,以及测试类TestDao的使用。本文旨在提供Java ORM框架与数据库交互的基础实践案例。

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

 主配置文件

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>
		<!-- 
			1,默认情况主配置文件的名称 :hibernate.cfg.xml
			2,默认情况下位置:src ,(classpath , WEB-INF/classes/)
			
			3 <property> 用于给hibernate设置基本参数的
				name:参数名称,常用的名称 hibernate. 前置可以省略
					hibernate.connection.driver_class 与 connection.driver_class 相同的
				标签体:参数的值
			4 配置内容参考:%h%/project/etc/hibernate.properties  (key=value)
				
		-->
	
		<!-- 1 基本4项 -->
		<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_day01DB</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">1234</property>
		<!-- 2方言-->
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
		
		<!-- 3 显示sql与  格式化sql -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		
		<!-- 4 自动创建表 , 一般不用,学习中、测试中,开发中慎用(编写程序时,数据库和表已经创建,DBA数据库管理员|项目经理 )
			create,每一次都创建表 ,测试
			update,如果表不存在,创建;如果存在,且结构发生改变,将修改表结构(维护添加,不维护删除)
			create-drop,每一次都创建表 ,当执行factory.close();时,删除表
			validate , 运行时校验 hbm.xml映射文件是否与表结构匹配
		 -->
		<property name="hibernate.hbm2ddl.auto">update</property>
		
		<!-- 5 取消bean验证 -->
		<property name="javax.persistence.validation.mode">none</property>
		
		<!-- 6  映射关系 -->
		<!--  不允许 类名重复
		-->
		<mapping resource="cn/itcast/a_hello/User.hbm.xml"/>
		<!--  
		<mapping resource="cn/itcast/b_hbm/User.hbm.xml"/>
		-->
	
	</session-factory>

</hibernate-configuration>


log4j.properties

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=d\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=info, stdout

</pre><p></p><h2>cn.itcast.a_hell</h2><p></p><h3>TestDao.java</h3><p></p><pre code_snippet_id="416719" snippet_file_name="blog_20140704_3_1754754" name="code" class="java">package cn.itcast.a_hello;

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

public class TestDao {
	
	public static void main(String[] args) {
		User user = new User();
		user.setUsername("小龙女");
		user.setPassword("1234");
		
		
		Configuration config = new Configuration().configure();		//必须调用方法
		SessionFactory factory = config.buildSessionFactory();	//连接池
		Session session = factory.openSession();	//连接
		Transaction transaction = session.beginTransaction();	//事务
		
		//操作
		session.save(user);	//保存
		
		transaction.commit();		//提交
		session.close();
		factory.close();
		
		
	}

}

User.java

package cn.itcast.a_hello;

public class User implements java.io.Serializable{
	
	private static final long serialVersionUID = 4535354274079526418L;
	
	
	private Integer userId; //必须有
	private String username;
	private String password;
	
	
	
	public User() {	//必须有
		super();
	}


	@Override
	public String toString() {
		return "User [userId=" + userId + ", username=" + username
				+ ", password=" + password + "]";
	}



	public Integer getUserId() {
		return userId;
	}



	public void setUserId(Integer userId) {
		this.userId = userId;
	}



	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;
	}
	
}

User.hbm.xml

package cn.itcast.a_hello;

public class User implements java.io.Serializable {

	private static final long serialVersionUID = 4535354274079526418L;

	private Integer userId; // 必须有
	private String username;
	private String password;

	public User() { // 必须有
		super();
	}

	@Override
	public String toString() {
		return "User [userId=" + userId + ", username=" + username
				+ ", password=" + password + "]";
	}

	public Integer getUserId() {
		return userId;
	}

	public void setUserId(Integer userId) {
		this.userId = userId;
	}

	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;
	}

}

cn.itcast.b_hbm

TestDao

package cn.itcast.b_hbm;

import java.io.File;
import java.io.FileInputStream;
import java.util.Date;

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

public class TestDao {

	public static void main(String[] args) throws Exception {

		FileInputStream is = new FileInputStream(new File("47.jpg"));
		byte[] photo = new byte[is.available()];
		is.read(photo);
		is.close();

		User user = new User();
		user.setUsername("jack");
		user.setAge(18);
		user.setBirthday(new Date());
		user.setGender(true);
		user.setPhoto(photo);
		user.setDesc("描述此处省略5W字....");

		// api
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();

		session.save(user);

		transaction.commit();
		session.close();
		// factory.close();

	}

}

user.java

package cn.itcast.b_hbm;

import java.util.Date;

public class User {

	private Integer id; // 必须存在,并且为整形
	private String username;
	private int age;
	private Date birthday;
	private boolean gender; // 性别
	private byte[] photo; // 照片
	private String desc; // 描述description

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public boolean isGender() { // 相当于getter方法
		return gender;
	}

	public void setGender(boolean gender) {
		this.gender = gender;
	}

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	public byte[] getPhoto() {
		return photo;
	}

	public void setPhoto(byte[] photo) {
		this.photo = photo;
	}

}

User.hbm.xml

<?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>
	<!-- 
		<class> 配置对象(类)
			name : 类的全限定名称(包 + 类名) 
			table : 对应的表名
			catalog : 数据库的名称,默认使用的URL中设置的数据库名称 jdbc:mysql://localhost:3306/hibernate_day01DB
		<id> 必须配置,设置主键(唯一标识)
			name : javabean的属性值,##必须有
			存在子元素:用于设置主键生成策略(下午讲)
				<generator class="native"></generator>
		<property> 用于配置普通属性
			name : javabean的普通属性名称
			column : 设置表字段(列)的名称,默认值name的值
			length : 表字段的长度,默认值255
			type : 表字段的类型
				* java类型:java.lang.String 等,类的全限定名称,区分大小写
				* hibernate类型:string 等
				* 数据库类型
	-->
	<class name="cn.itcast.b_hbm.User" table="m_user" catalog="hibernate_day01DB">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="username" column="t_username" length="30" type="java.lang.String"></property>
		<property name="age" type="integer"></property>
		<property name="birthday">
			<column name="birthday" sql-type="timestamp"></column>
		</property>
		<property name="gender"></property>
		<property name="photo" type="binary" length="2000000"></property>
		<property name="desc" column="`desc`"></property>
	</class>
</hibernate-mapping>

cn.itcast.c_curd

TextCURD.java

package cn.itcast.c_curd;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import cn.itcast.a_hello.User;

public class TextCURD {
	
	@Test
	public void demo01(){
		//录入
		User user = new User();
		user.setUsername("tom");
		user.setPassword("9999");
		
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();
		
		//操作录入
		session.save(user);
		
		transaction.commit();
		session.close();
		factory.close();
		
	}
	
	@Test 
	public void demo02(){
		// 更新
		User user = new User();
		user.setUserId(2);
		user.setUsername("肉丝");
		user.setPassword("longlong");
		
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();
		
		//操作
		session.update(user);	//通过id更新数据
		
		transaction.commit();
		session.close();
		factory.close();
		
		
		
		
	}
	
	@Test 
	public void demo03(){
		// 删除 id =3
		User user = new User();
		user.setUserId(3);
		
		
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();
		
		//操作
		session.delete(user);	//通过id删除用户
		
		transaction.commit();
		session.close();
		factory.close();
		
		
	}
	
	@Test 
	public void demo04(){
		// 通过id查询
		
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();
		
		//操作
		Integer id = 2;
		User user = (User)session.get(User.class, id);  // 底层 User.class.newInstance()
		System.out.println(user);
		
		transaction.commit();
		session.close();
		factory.close();
		
		
	}
	
	@Test 
	public void demo05(){
		// 查询所有用户
		
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();
		
		/* 操作 , 执行HQL语句 ,hibernate的查询语言,类似于sql,使用的是对象和对象的属性
		 * 	* sql 语句 表的字段
		 *  * HQL 可以省略select
		 */
		
		//session.createQuery("from cn.itcast.a_hello.User");
		Query query = session.createQuery("from User");
		List<User> allUser = query.list();	//查询所有
		for (User user : allUser) {
			System.out.println(user);
		}
		
		transaction.commit();
		session.close();
		factory.close();
		
		
	}
	
	@Test 
	public void demo06(){
		/*
		 *  分页:
		 *  mysql分页格式:select ... limit 开始索引startIndex,每页显示的个数pageSize
		 *  	* pageNum :当前页(第几页)
		 */
		
		
		Configuration config = new Configuration().configure();
		SessionFactory factory = config.buildSessionFactory();
		Session session = factory.openSession();
		Transaction transaction = session.beginTransaction();
		
		Query query = session.createQuery("from User");
		//第一页
//		query.setFirstResult(0);	//开始索引  startIndex = (pageNum - 1) * pageSize
//		query.setMaxResults(2);		//每页显示个数
		//第二页
		query.setFirstResult(2);	
		query.setMaxResults(2);	
		List<User> allUser = query.list();	//查询所有
		for (User user : allUser) {
			System.out.println(user);
		}
		
		transaction.commit();
		session.close();
		factory.close();
		
		
	}

}


资料jar包

antlr-2.7.6.jar

commons-collections-3.1.jar
dom4j-1.6.1.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate3.jar
javassist-3.12.0.GA.jar
jta-1.1.jar
log4j-1.2.17.jar
mysql-connector-java-5.1.22-bin.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.7.5.jar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值