Hibernate的CRUD以及junit测试

时间:2023-03-09 08:44:33
Hibernate的CRUD以及junit测试

Hibernate的CRUD以及junit测试

1:第一步创建动态工程引包,省略。

2:第二步,创建数据库和数据表,省略。

3:第三步,创建实体类,如User.java,源码如下所示:

  对于实体类,一般实现构造方法,而构造方法一般实现三个:

    一个无参构造方法;

    一个有参的构造方法;

    一个不带id的构造方法;

 package com.bie.po;
/**
* @author BieHongLi
* @version 创建时间:2017年3月8日 下午5:17:23
*
*/
public class User { private int id;
private String name;
private String password;
private String email;
private String phone;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
+ "]";
}
public User(String name, String password, String email, String phone) {
super();
this.name = name;
this.password = password;
this.email = email;
this.phone = phone;
}
public User(int id, String name, String password, String email, String phone) {
super();
this.id = id;
this.name = name;
this.password = password;
this.email = email;
this.phone = phone;
}
public User() {
super();
} }

4:配置数据表和实体类之间的映射,起名如实体类.hbm.xml,源码如下所示:

 <?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.bie.po">
<!-- 操作条件:
1:对象与表
2:属性与字段的对应
3:类型的对应,类型默认采用属性的类型,type不写的话
-->
<class name="User" table="user">
<!-- 主键,映射 -->
<id name="id" column="id">
<generator class="native"></generator>
</id> <!-- 非主键,映射 -->
<property name="name" column="name"></property>
<property name="password" column="password"></property>
<property name="email" column="email"></property>
<property name="phone" column="phone"></property> </class> </hibernate-mapping>

5:完成实体类和数据表之间的配置,就开始配置数据库连接和加载映射,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>
<!--
1:数据连接配置
2:加载所有的映射(*.hbm.xml)
--> <!-- 1:数据连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!-- mysql数据库的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.show_sql">true</property> <!-- 2:加载所有的映射(*.hbm.xml) -->
<mapping resource="com/bie/po/User.hbm.xml"/> </session-factory>
</hibernate-configuration>

6:提取工具类HibernateUtils.java,简化开发:

 package com.bie.utils;

 import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; /**
* @author BieHongLi
* @version 创建时间:2017年3月10日 下午1:47:55
* 创建工具类
*/
public class HibernateUtils { private static SessionFactory sf;
static{
//加载主配置文件,并且创建session的工厂
sf=new Configuration().configure().buildSessionFactory();
} //创建session对象
public static Session getSession(){
return sf.openSession();
}
}

7:最后完成Dao层的替换,由之前使用的基本的Connection创建连接替换成为session创建连接;

  首先创建接口再实现接口;

  注意:

     更新的时候,索引是从0开始的,不是从1开始的,切记;

 package com.bie.dao;

 import java.util.List;

 import com.bie.po.User;

 /**
* @author BieHongLi
* @version 创建时间:2017年3月10日 下午1:35:14
*
*/
public interface UserDao { /***
* 用户信息保存的方法
* @param user
*/
public void insertUser(User user); /***
* 用户信息更改的方法
* @param user
*/
public void updateUser(User user); /***
* 根据用户的编号用户信息查询的方法
* @param id
* @return
*/
public User selectUserId(int id); /**
* 用户查询所有的信息
* @return
*/
public List<User> selectAll(); /***
*
* @param name
* @return
*/
public List<User> selectAll(String name); /***
* 分页查询的方法
* @param index
* @param count
* @return
*/
public List<User> selectPage(int index,int count); /***
* 删除的方法
* @param id
*/
public void deleteUser(int id);
}
 package com.bie.dao.impl;

 import java.util.List;

 import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.bie.dao.UserDao;
import com.bie.po.User;
import com.bie.utils.HibernateUtils; /**
* @author BieHongLi
* @version 创建时间:2017年3月10日 下午1:35:27
*
*/
public class UserDaoImpl implements UserDao{ @Override
public void insertUser(User user) {
Session session=null;
Transaction tx=null;
try {
//获取session
session=HibernateUtils.getSession();
//开启事务
tx=session.beginTransaction();
//插入即保存
session.save(user);
} catch (Exception e) {
throw new RuntimeException(e);
}finally{
//提交事务
tx.commit();
//关闭session
session.close();
} } @Override
public void updateUser(User user) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtils.getSession();
tx=session.beginTransaction();
session.update(user);
} catch (Exception e) {
throw new RuntimeException(e);
}finally{
//提交事务
tx.commit();
//关闭事务
session.close();
} } @Override
public User selectUserId(int id) {
//获取session
Session session=null;
//事务
Transaction tx=null;
try {
//获取session
session=HibernateUtils.getSession();
//开启事务
tx=session.beginTransaction(); return (User)session.get(User.class, id);
} catch (Exception e) {
throw new RuntimeException(e);
}finally{
//提交事务
tx.commit();
//关闭session
session.close();
}
} @Override
public List<User> selectAll() {
//session
Session session=null;
//事务
Transaction tx=null;
try {
//获取session
session=HibernateUtils.getSession();
//开启事务
tx=session.beginTransaction();
//HQL语句
Query q=session.createQuery("from User"); List<User> list=q.list();
return list;
} catch (Exception e) {
throw new RuntimeException(e);
}finally{
//提交事务
tx.commit();
//关闭session
session.close();
}
} @Override
public List<User> selectAll(String name) {
//session
Session session=null;
//事务
Transaction tx=null;
try {
//获取session
session=HibernateUtils.getSession();
//开启事务
tx=session.beginTransaction();
//HQL语句
Query q = session.createQuery("from User user where user.name=? ");
//注意:参数索引从0开始
q.setString(0, name); return q.list();
} catch (Exception e) {
throw new RuntimeException();
}finally{
//提交事务
tx.commit();
//关闭session
session.close();
}
} @Override
public List<User> selectPage(int index, int count) {
//session
Session session=null;
//事务
Transaction tx=null;
try {
//获取session
session=HibernateUtils.getSession();
//开启事务
tx=session.beginTransaction();
//HQL查询
Query q = session.createQuery("from User ");
//设置分页参数
q.setFirstResult(index);//查询起始行
q.setMaxResults(count);//查询返回的行数 return q.list();
} catch (Exception e) {
throw new RuntimeException();
}finally{
//提交事务
tx.commit();
//关闭session
session.close();
}
} @Override
public void deleteUser(int id) {
Session session=null;
Transaction tx=null;
try {
session=HibernateUtils.getSession();
tx=session.beginTransaction();
//先根据id查询出用户的信息再删除
Object obj=session.get(User.class, id);
if(obj!=null){
session.delete(obj);
}
} catch (Exception e) {
throw new RuntimeException();
}finally{
//提交事务
tx.commit();
//关闭session
session.close();
}
} }

8:最后一步,完成测试。源码如下所示:

 package com.bie.test;

 import java.util.List;

 import org.junit.Test;

 import com.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User; /**
* @author BieHongLi
* @version 创建时间:2017年3月10日 下午2:34:48
*
*/
public class UserCRUD { private UserDao dao=new UserDaoImpl(); @Test
public void insertUser(){
dao.insertUser(new User("曹操","111","111111","111111@163.com")); } @Test
public void updateUser(){
User user=new User();
user.setId(1);
user.setName("刘备222"); dao.updateUser(user);
} @Test
public void deleteUser(){
dao.deleteUser(30);
} @Test
public void selectUserId(){
//根据用户的编号进行查询
User user=dao.selectUserId(1);
System.out.println(user);
} @Test
public void selectUser(){
//查询用户的所有信息
List<User> list = dao.selectAll();
System.out.println(list);
} @Test
public void selectUserName(){
//根据用户姓名查询信息
List<User> list=dao.selectAll("李四");
System.out.println(list);
} @Test
public void selectPage(){
//分页查询,第一个参数是起始行,第二个参数是每页的个数
List<User> list=dao.selectPage(0, 5);
System.out.println(list);
}
}

运行效果如下所示:

Hibernate的CRUD以及junit测试


路在远方,人丑就该多码Coding!!!