1.1 问题
使用Hibernate实现对员工表的增、删、改、查。
1.2 方案
Hibernate使用步骤:
导入Hibernate包,以及数据库驱动包。
引入Hibernate主配置文件hibernate.cfg.xml。
创建实体类。
创建映射关系文件。
使用Hibernate常用API执行增删改查操作。
1.3 步骤
实现此案例需要按照如下步骤进行。
环境为:myeclipse 6.5 ,mysql 5.0 ,Hibernate 3 。
步骤一:准备工作创建员工表EMP,建表语句如下:
CREATE TABLE `emp` (
`ID` INT(4) NOT NULL AUTO_INCREMENT,
`NAME` VARCHAR(50) NOT NULL,
`AGE` INT(11) DEFAULT NULL,
`SALARY` DOUBLE(7,2) DEFAULT NULL,
`MARRY` CHAR(1) DEFAULT NULL,
`BIRTHDAY` DATE DEFAULT NULL,
`LAST_LOGIN_TIME` DATE DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
创建一个WEB项目,名为Hibernate。
步骤二:导入Hibernate开发包,以及数据库驱动包,完成后项目的包结构如下图:
网盘下载jar包: http://yunpan.cn/cmRG5gzdMtGMX 访问密码 3747
步骤三:引入Hibernate主配置文件
将Hibernate主配置文件hibernate.cfg.xml复制到项目中,放在src根路径下。并在主配置文件中配置好数据库连接信息,以及Hibernate框架参数,代码如下:
/p>
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
jdbc:mysql://localhost:3306/souvc
root
123456
com.mysql.jdbc.Driver
true
true
步骤四:创建实体类
创建包com.souvc.entity,并在该包下创建员工表对应的实体类Emp.java,用于封装员工表的数据,代码如下:
packagecomsouvc.entity;importjava.sql.Date;importjava.sql.Timestamp;public classEmp {privateInteger id;privateString name;privateInteger age;privateDouble salary;privateBoolean marry;privateDate birthday;privateTimestamp lastLoginTime;publicInteger getId() {returnid;
}public voidsetId(Integer id) {this.id =id;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}publicDouble getSalary() {returnsalary;
}public voidsetSalary(Double salary) {this.salary =salary;
}publicBoolean getMarry() {returnmarry;
}public voidsetMarry(Boolean marry) {this.marry =marry;
}publicDate getBirthday() {returnbirthday;
}public voidsetBirthday(Date birthday) {this.birthday =birthday;
}publicTimestamp getLastLoginTime() {returnlastLoginTime;
}public voidsetLastLoginTime(Timestamp lastLoginTime) {this.lastLoginTime =lastLoginTime;
}
}
步骤五:创建映射关系文件
在com.souvc.entity包下,创建员工实体类的映射关系文件,名为Emp.hbm.xml,并在该文件中配置实体类和表的关系,以及类中属性和表中字段的关系,代码如下:
/p>
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
步骤六:声明映射关系文件
在主配置文件hibernate.cfg.xml中,声明映射关系文件Emp.hbm.xml,代码如下:
完成代码如下:
/p>
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
jdbc:mysql://localhost:3306/souvc
root
123456
com.mysql.jdbc.Driver
true
true
步骤七:创建Session工具类
创建HibernateUtil工具类,用于创建Session对象,代码如下:
packagecom.souvc.util;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;public classHibernateUtil {private staticSessionFactory sessionFactory;static{//加载Hibernate主配置文件
Configuration conf = newConfiguration();
conf.configure("/hibernate.cfg.xml");
sessionFactory=conf.buildSessionFactory();
}/*** 创建session*/
public staticSession getSession() {returnsessionFactory.openSession();
}public static voidmain(String[] args) {
System.out.println(getSession());
}
}
输出效果:
SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
步骤八:练习使用Hibernate对员工表进行增删改查
创建包com.souvc.test,并在该包下创建一个JUNIT测试类,并在类中使用Hibernate写出对EMP表的增删改查的方法,代码如下:
packagecom.souvc.test;importjava.sql.Date;importjava.sql.Timestamp;importjava.util.List;importorg.hibernate.HibernateException;importorg.hibernate.Query;importorg.hibernate.Session;importorg.hibernate.Transaction;importorg.junit.Test;importcom.souvc.util.HibernateUtil;importcomsouvc.entity.Emp;/*** 演示Hibernate的基本使用*/
public classTestEmp {/*** 新增emp*/@Testpublic voidadd() {//模拟要新增的emp
Emp e = newEmp();
e.setName("ggg");
e.setAge(29);
e.setMarry(false);
e.setSalary(8000.00);
e.setBirthday(Date.valueOf("1983-10-20"));
e.setLastLoginTime(newTimestamp(System.currentTimeMillis()));//获取session
Session session =HibernateUtil.getSession();//开启事务
Transaction ts =session.beginTransaction();try{//执行新增
session.save(e);//提交事务
ts.commit();
}catch(HibernateException e1) {
e1.printStackTrace();//回滚事务
ts.rollback();
}finally{
session.close();
}
}/*** 根据ID查询emp*/@Testpublic voidfindById() {
Session session=HibernateUtil.getSession();
Emp emp= (Emp) session.get(Emp.class, 1);
System.out.println(emp.getName());
System.out.println(emp.getBirthday());
System.out.println(emp.getLastLoginTime());
session.close();
}/*** 修改emp*/@Testpublic voidupdate() {
Session session=HibernateUtil.getSession();//查询要修改的数据
Emp emp = (Emp) session.get(Emp.class, 1);//开启事务
Transaction ts =session.beginTransaction();try{//模拟修改数据
emp.setName("ee");
emp.setAge(20);//执行修改
session.update(emp);//提交事务
ts.commit();
}catch(HibernateException e) {
e.printStackTrace();//回滚事务
ts.rollback();
}finally{//关闭连接
session.close();
}
}/*** 删除emp*/@Testpublic voiddelete() {
Session session=HibernateUtil.getSession();
Emp emp= (Emp) session.get(Emp.class, 1);
Transaction ts=session.beginTransaction();try{
session.delete(emp);
ts.commit();
}catch(HibernateException e) {
e.printStackTrace();
ts.rollback();
}finally{
session.close();
}
}/*** 查询全部emp*/@Testpublic voidfindAll() {
String hql= "from Emp";
Session session=HibernateUtil.getSession();
Query query=session.createQuery(hql);
List emps =query.list();for(Emp e : emps) {
System.out.println(e.getName());
}
session.close();
}
}
九、实例的效果图如下:
增加:
通过id查询:
查询全部:
更新:
删除:
温馨提示:注意数据库要存在id为1 的数据,才能进行这些数据的操作。根据自己里面的数据来定id。
源码如下: http://yunpan.cn/cmR97XCh6SvB6 访问密码 afb4