Flask接口签名sign原理与实例代码浅析
298
2023-01-19
Hibernate之CRUD操作实践
Hibernate作为一个高度封装的持久层框架,曾经是非常牛逼的,现在虽然应用不是特别广,比如我前公司主要是做OA的,应用的框架就是Spring+SpringMVC+Hibernate。
Hibernate与MyBatis相比,虽然应用面不是特别广,但是并不代表就没有用武之地。
今天讲讲Hibernate的CRUD,本文主要告诉读者Hibernate是什么,为什么要使用HibernateHibernate的优缺点,Hibernate的基础实例应用。
一、Hibernate是什么
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/jsP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任(这里引用百度的描述)
二、为什么要使用Hibernate
为什么要使用Hibernate,先不回答为什么要使用它,因为一项技术入世,一定有其应用的场景。
那么Hibernate的优点有哪些呢?
(1)标准的orm框架,程序员不需要编写SQL语句
(2)具有良好的数据库无关性,即数据库发生变化的话,代码无需再次编写;
任何事情有利也有弊
那么Hibernate的缺点有哪些呢?
(1)学习门槛高,需要对数据关系模型有良好的基础,而且在设置OR映射的时候,需要考虑好性能和对象模型的权衡;
(2)程序员不能自主的去进行SQL性能优化;
那么Hibernate的应用场景有哪些呢?
例如需求明确、业务固定的项目,比如OA项目、ERP、CRM等项目
三、Hibernate的基础实例
记得很久之前在初学Hibernate时,虽然网上有不少例子,但是我觉得都不是我想要的,因为很残缺不是特别系统,但是如果太系统化的话,必然会连载,但是我觉得对于初学者而言,有些时候看连载确实有点昏昏欲睡,没意思。这次实例是以maven工程作为示例,maven是当前最流行的项目管理工具之一。
接下来示例演示与说明:
1.导入maven依赖
2.编写hibernate的主要配置文件
hibernate.cfg.xml
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-configuration-3.0.dtd">
数据库四要素:加载驱动、建立连接、用户名、密码。这些我就不多说了。
hibernate.dialect:数据库方言 hibernate的良好的可移植性就在这里体现,面对不同TyjHqirt的数据库只需改方言即可适用
hibernate.show_sql:是否打印SQL语句 开发环境建议 生产环境不建议
hibernate.hbm2ddl.auto: 一般建议使用update 而不是使用create
current_session_context_class:这里主要针对session对象,后面我会有针对性地讲解
3.编写实体
User.java
package cn.blog.entity;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private static final long serialVersionUID = 1L;
/**
* 用户主键
*/
private Integer userId;
/**
* 用户编码(登录账户) 手机号 邮箱号
*/
private String loginCode;
/**
* 用户名
*/
private String userName;
/**
* 密码
*/
private String password;
/**
* 性别
*/
private Integer sex;
/**
* 身份证
*/
private String identityCard;
/**
* 创建时间
*/
private String createTime;
/**
* 创建人
*/
private String createBy;
/**
* 更新时间
*/
private String updateTime;
/**
* 更新人
*/
private String updateBy;
/**
* 状态:0注册新用户 1邮件认证用户 2管理员 3黑名单
*/
private Integer status;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getLoginCode() {
return loginCode;
}
public void setLoginCode(String loginCode) {
this.loginCode = loginCode;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public String getIdentityCard() {
return identityCard;
}
public void setIdentityCard(String identityCard) {
this.identityCard = identityCard;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", loginCode=" + loginCode +
", userName=" + userName +
", password=" + password +
", sex=" + sex +
", identityCard=" + identityCard +
", createTime=" + createTime +
", createBy=" + createBy +
", updateTime=" + updateTime +
", updateBy=" + updateBy +
", status=" + status +
"}";
}
}
4.编写实体对应的映射文件
User.hbm.xml
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
column中的name属性作用:主要是使对象实体与表映射
type:实体属性
length:长度
not-null:是否为空 默认为false 不为空
unique 独特的唯一的
5.封装工具类
HibernateUtils.java
package cn.blog.utils;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil extends Object{
private static SessionFactory sessionFactory;
static
{
try{
Configuration configuration=new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
}catch (Throwable ex){
throw new ExceptionInInitializerError(ex);
}
}
private static final ThreadLocal
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getSession() throws HibernateException
{
Session session = (Session) threadLocal.get();
if (session == null){
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session != null)
session.close();
threadLocal.set(null);
}
public static void shutdown(){
getSessionFactory().close();
}
}
6.编写测试类
下面就是具体的crud操作 有部分注释了,只需去除注释即可测验效果。
package cn.blog.test;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import cn.blog.entity.User;
import cn.blog.utils.HibernateUtil;
public class BlogTest {
public static void main(String[] args) {
//删除数据
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
User user = new User();
user.setUserId(2);
user.setLoginCode("yc@163.com");
user.setUserName("聪哥哥");
user.setPassword("test123");
user.setIdentityCard("1234");
user.setCreateBy("系统");
user.setCreateTime("2018-10-21 10:00");
user.setUpdateBy("系统");
user.setUpdateTime("2018-10-21 10:00");
user.setSex(1);
user.setStatus(1);
session.delete(user);
tx.commit();
/**
根据主键查询单条数据
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
User user = (User) session.get(User.class, 1);
System.out.println(user.getUserName());
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}finally {
HibernateUtil.closeSession();
}
*/
/*
更新数据
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
User user = new User();
user.setUserId(2);
user.setLoginCode("yc@163.com");
user.setUserName("聪哥哥");
user.setPassword("test123");
user.setIdentityCard("1234");
user.setCreateBy("系统");
user.setCreateTime("2018-10-21 10:00");
user.setUpdateBy("系统");
user.setUpdateTime("2018-10-21 10:00");
user.setSex(1);
user.setStatus(1);
session.saveOrUpdate(user);
System.out.println("update succes");
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
System.out.println("update fail");
}finally {
HibernateUtil.closeSession();
}
*/
/*
模糊查询数据
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
String userName="Y";
Criteria c= session.createCriteria(User.class);
c.add(Restrictions.like("userName", "%"+userName+"%"));
List
for (User user2 : user) {
System.out.println(user2.getUserName());
}
tx.commit();
*/
/*
新增数据
Session session = HibernateUtil.getSession();
Transaction tx = session.beginTransaction();
try {
User user = new User();
user.setLoginCode("yc@163.com");
user.setUserName("Y先生");
user.setPassword("test123");
user.setIdentityCard("1234");
user.setCreateBy("系统");
user.setCreateTime("2018-10-21 10:00");
user.setUpdateBy("系统");
user.setUpdateTime("2018-10-21 10:00");
user.setSex(1);
user.setStatus(1);
session.save(user);
System.out.println("insert data success");
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
System.out.println("insert data fail");
}finally {
HibernateUtil.closeSession();
}*/
}
}
小结:
本文代码放置处为:https://github.com/youcong1996/study_simple_demo.git
分支为hibernate-crud分支
如果在复用我的这篇文章在实际遇到较多的问题而无法解决,可直接clone我的git仓库本地运行
如图所示:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~