学习Hibernate初接触

第一天

Hibernate的CRUD

准备工作:

1.建立t_user表

CREATE TABLE `t_user` (
  `uid` bigint(20) PRIMARY KEY AUTO_INCREMENT,
  `uname` varchar(20),
  `usalary` decimal(8,2),
  `uhiredate` date 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.建立模型对象user类

public class User {
	
	private long id;
	private String name;
	private BigDecimal salary;
	private Date hiredate;
	//提供getter,setter,toString()方法
}

3.编写DAO组件:
①、DAO接口:IUserDAO
②、DAO实现类:UserDAOImpl
③、DAO测试类:UserDAOTest
4.使用Hibernate依赖的jar包
①mysql驱动包(最容易忘记)
②核心包(lib下required下)

配置文件:

Hibernate的应用中主要包含两种配置文件:
1.主配置文件(包含连接数据库的基本要素:驱动类名,URL,账号,密码,方言,包含映射文件)
2.每一个domain对象的映射文件(处理对象和表中的映射关系)

映射文件的配置

映射文件(domainName.hbm.xml,如User.hbm.xml),一般存放在domain相同的目录结构。

<?xml version="1.0"?>
<!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.mxl_01_hello.damain">
	<class name="User" table="t_user">
		<id name="id" column="uid">
			<generator class="native"/>
		</id>
		<property name="name" column="uname"/>
		<property name="salary" column="usalary"/>
		<property name="hiredate" column="uhiredate"/>
	</class>
</hibernate-mapping>

关联约束文件Hibernate-mapping-3.0.dtd(eclipse代码提示)

Hibernate的主配置文件

从Hibernate根路径的/project/etc找到.
hibernate.cfg.xml,存储在source folder目录,编译之后在classpath路径。
如何配置hibernate.cfg.xml文件,阅读Hibernate.properties文件,找到连接数据库的基本要素.

#hibernate.dialect org.hibernate.dialect.MySQLDialect
#hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
#hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
#hibernate.connection.driver_class com.mysql.jdbc.Driver
#hibernate.connection.url jdbc:mysql:///test
#hibernate.connection.username gavin
#hibernate.connection.password

hibernate.cfg.xml内容:

<!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.dialect">org.hibernate.dialect.MySQLDialect</property>
	<!--驱动类名 -->
	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
	<!-- 连接URL-->
	<property name="hibernate.connection.url">jdbc:mysql:///hibernatedemo</property>
	<!--数据库账号 -->
	<property name="hibernate.connection.username">root</property>
	<!-- 数据库密码-->
	<property name="hibernate.connection.password">123456</property>
	
	<!-- 关联需要管理的映射文件-->
	<mapping resource="com/mxl_01_hello/damain/User.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

Hibernate的CRUD

实现操作:

DQL操作步骤:
1.创建配置对象
2.读取配置文件
3.创建SessionFactory
4.获取Session
5.具体查询操作
6.关闭Session
7.关闭SessionFactory

public User get(Long id) {
		//创建配置对象
		Configuration config = new Configuration();
		//读取配置文件
		config.configure("/hibernate.cfg.xml");
		//创建sessionFactory
		SessionFactory sf = config.buildSessionFactory();
		//获取session
		Session session = sf.openSession();
		//具体的查询操作
		User u = (User) session.get(User.class, id);
		//关闭session
		session.close();
		//关闭sessionFactory
		sf.close();
		return u;
	}

	@Override
	public List<User> listAll() {
		//创建配置对象
		Configuration config = new Configuration();
		//读取配置文件
		config.configure("/hibernate.cfg.xml");
		//创建sessionFactory
		SessionFactory sf = config.buildSessionFactory();
		//获取session
		Session session = sf.openSession();
		//具体的查询操作
		String hql = "select u from User u";
		Query query = session.createQuery(hql);
		List<User> list = query.list();
		//关闭session
		session.close();
		//关闭sessionFactory
		sf.close();
		return list;
	}

DML操作步骤:
1.创建配置对象
2.读取配置文件
3.创建SessionFactory
4.获取Session
5.打开事务
6.DML操作
7.提交/回滚事务
8.关闭Session
9.关闭SessionFactory

public void save(User u) {
//		1.创建配置对象
//		2.读取配置文件
		Configuration configuration = new Configuration().configure("/hibernate.cfg.xml");
//		3.创建SessionFactory
		SessionFactory sf = configuration.buildSessionFactory();
//		4.获取Session
		Session session = sf.openSession();
//		5.打开事务
		session.getTransaction().begin();
//		6.DML操作
		session.save(u);
//		7.提交/回滚事务
		session.getTransaction().commit();
//		8.关闭Session
		session.close();
//		9.关闭SessionFactory
		sf.close();
		
	}

save()和get()方法执行流程:

常见错误操作:

1).操作数据库,必须拷贝数据库对于的驱动包.
2).Hibernate.cfg.xml中的配置不能出现空格,如:

<property name="hibernate.connection.username ">root</property>

3).忘记调用configure()方法,正确写法:

Configuration cfg = new Configuration().configure();  

configure()默认找的是hebernate.cfg.xml文件

Configuration configuration = new Configuration().configure("/hibernate.cfg.xml");

4).org.hibernate.PropertyNotFoundException: 找不到对象中指定的属性名.(属性property有getter/setter决定,而不是字段Field决定)
5).SessionException : Session is closed:不能再关闭Session之后,使用Session对象.
6).实体类存在无参数构造器(不能带参).
7).Hibernate并不要求持久化类必须实现java.io.Serializable接口,但对于RMI或JavaEE分布式结构的Java应用,必须实现该接口.Hibernate要求持久化类,必须提供一个不带参数的构造器.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值