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);
}
}
运行效果如下所示:
路在远方,人丑就该多码Coding!!!
Hibernate的CRUD以及junit测试的更多相关文章
- hibernate之CRUD操作
CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...
- java框架篇---hibernate之CRUD操作
CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...
- ssh架构之hibernate(一)简单使用hibernate完成CRUD
1.Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,h ...
- Hibernate之CRUD实践
Hibernate作为一个高度封装的持久层框架,曾经是非常牛逼的,现在虽然应用不是特别广,比如我前公司主要是做OA的,应用的框架就是Spring+SpringMVC+Hibernate. Hibern ...
- JUnit测试工具在项目中的用法
0:33 2013/6/26 三大框架整合时为什么要对项目进行junit测试: |__目的是测试配置文件对不对,能跑通就可以进行开发了 具体测试步骤: |__1.对hibernate进行测试 配置hi ...
- junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
课程设计要求进行junit测试,我是在已经做好的ssh项目上做的测试,测试类代码如下 package com.zhang.web.services; import static org.junit.A ...
- Spring4.2.3+Hibernate4.3.11整合( IntelliJ maven项目)(使用Annotation注解)(Junit测试类)
1. 在IntelliJ中新建maven项目 给出一个建好的示例 2. 在pom.xml中配置依赖 包括: spring-context spring-orm hibernate-core mysql ...
- java之hibernate之crud
这篇文章主要讲解: 1>.对Hibernate使用的一些简单封装: · 2>.在单元测试中,使用Hibernate的封装的工具进行增删改查的测试 1.目录结构展示 2.代码展示 2.0 配 ...
- (2).mybatis单元测试(junit测试)
一.Junit使用步骤:1.创建测试目录,(src.测试目录是test)2.在测试目录test中创建与src中相同的包名3.为需要测试的类创建测试类,例如:UsersMapper,测试类是UsersM ...
随机推荐
- java RSA 加签验签【转】
引用自: http://blog.csdn.net/wangqiuyun/article/details/42143957/ java RSA 加签验签 package com.testdemo.co ...
- SpringRMI远程方法调用【原】
Spring为各种远程访问技术的集成提供了工具类. 该小段引用自 http://www.open-open.com/lib/view/open1408957290478.html Spring远程支持 ...
- FZU - 1688 Binary land
题目链接 Problem 1688 Binary land Accept: 72 Submit: 171Time Limit: 1000 mSec Memory Limit : 3276 ...
- 在O(n) 时间复杂度,O(1)空间复杂度内反转单链表
在LeetCode中看到判断回文的程序:https://leetcode.com/problems/palindrome-linked-list/ 里面用单链表来存储数据,先反转前半部分的单链表,然后 ...
- ELF文件解析(二):ELF header详解
上一篇讲了ELF文件的总体布局,以及section和segment的概念.按照计划,今天继续讲 ELF header. 讲新的内容之前,先更正一个错误:上一篇中讲section header tabl ...
- 八、IIC 接口
8.1 IIC接口介绍 8.1.1 IIC 总线的概念 I2C总线是由Philips公司开发的一种简单.双向二线制同步串行总线.它只需要两根线即可在连接于总线上的器件之间传送信息. 主器件用于启动总线 ...
- entity framework 时间操作
).FirstOrDefault(); if (useractiveentity == null) { UserActive userActive = new UserActive(); userAc ...
- “微信小程序商城构建全栈应用”开发小记
注意事项: 1.application\api\extra下的wx.php记得填写小程序的app_id.app_secret: 2.API测试小工具需要APPID:
- QT中QString 与 int float double 等类型的相互转换
Qt中 int ,float ,double转换为QString 有两种方法 1.使用 QString::number(); 如: long a = 63; QString s = QString:: ...
- caffe-win10-cifar10另
上一篇主要以bat形式实现了leveldb形式的cifar10,因为对于shell脚本不甚熟悉,所以这次专门利用.sh调用来实现lmdb形式的cifar10. 1.下载数据 同上一篇. 2.数据转换和 ...