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 ...
随机推荐
- 解决win10无线无故断网,重启才恢复正常的情况【原】
最初以为是路由器问题 ,但是别人电脑都好好的呀,而且我自己的手机也是好好的能正常上网,所以只能从自身电脑找问题了,目测就是无线网卡出问题了.经过一番百度,原来是win10自动开启了省模式,运行一段时间 ...
- Study 7 —— while循环中止语句
循环的终止语句break #用于完全结束一个循环,跳出循环体执行循环后面的语句continue #只终止本次循环,接着执行后面的循环 1. 打印0-100,截止到第6次 count = 0 while ...
- Android studio 自动导入(全部)包 import
http://blog.csdn.net/buaaroid/article/details/44979629 1 Android studio 只有import单个包的快捷键:Alt+Enter.没有 ...
- 破解WEP工具wesside-ng
1.关于wesside-ng wesside-ng是一款自动化的WEP破解工具,该工具采用了多种WEP加密破解技术.它首先会自动明确目标无线网络,然后尝试与之相关联,在获得PRGA(伪随机生成算法)异 ...
- MHA-手动Failover流程(传统复制>ID复制)
本文仅梳理手动Failover流程.MHA的介绍详见:MySQL高可用架构之MHA 一.基本环境 1.1.复制结构 VMware10.0+CentOS6.9+MySQL5.7.21 ROLE HOST ...
- saltstack系列~第四篇
简介 针对mysql的sls编写0 软件包推送部分 tool_rsync: file.recurse: - source: salt://files/mysql ...
- mac系统在配置navicat时连接数据的时候提示can't connect to mysql server on '127.0.0.1'
新建数据库连接的时候,将默认的端口号更改掉,改为3307,即可解决这个问题. 具体是为什么我也不清楚,我自己想的一个可能就是mac电脑 上的某个程序可能已经占用了3306那个默认的端口,因 ...
- 生成eps图形
(1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...
- Python爬虫-爬取糗事百科段子
闲来无事,学学python爬虫. 在正式学爬虫前,简单学习了下HTML和CSS,了解了网页的基本结构后,更加快速入门. 1.获取糗事百科url http://www.qiushibaike.com/h ...
- ES系列六、ES字段类型及ES内置analyzer分析
一.背景知识 在Es中,字段的类型很关键: 在索引的时候,如果字段第一次出现,会自动识别某个类型,这种规则之前已经讲过了. 那么如果一个字段已经存在了,并且设置为某个类型.再来一条数据,字段的数据不与 ...