第一天
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要求持久化类,必须提供一个不带参数的构造器.