`

初识hibernate

 
阅读更多
hibernate接口关系:




代码结构:



hibernate.cfg.xml代码:
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
	<session-factory>
		<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
		<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
		<property name="connection.username">root</property>
		<property name="connection.password">admin</property>
		<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="format_sql">true</property>
		<property name="show_sql">true</property>
		<mapping resource="com/hibernate/beans/User.hbm.xml" />
	</session-factory>
</hibernate-configuration>

HibernateSessionFactory.java代码:
package com.hibernate.util;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactory {

	private static String CONFIG_FILE_LOCATION="/hibernate.cfg.xml";
	
	private static final ThreadLocal threadLocal = new ThreadLocal();
	
	private static final Configuration cfg = new Configuration();
	
	private static SessionFactory sessionFactory;
	
	public static Session currentSession() throws HibernateException{
		Session session = (Session)threadLocal.get();
		if(session == null){
			if(sessionFactory == null){
				try{
				cfg.configure(CONFIG_FILE_LOCATION);
				sessionFactory = cfg.buildSessionFactory();
				}catch(Exception e){
					e.printStackTrace();
				}
			}
			session = sessionFactory.openSession();
			threadLocal.set(session);
		}
		return session;
	}
	
	public static void closeSession() throws HibernateException{
		Session session = (Session)threadLocal.get();
		threadLocal.set(null);
		if(session!=null){
			session.close();
		}
	}
	
}



User.java代码:
package com.hibernate.beans;

public class User {
	
	private int id;

	private String username;

	private String password;

	private String email;
	
	public User(){
		
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	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 String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

}


User.hbm.xml代码:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
  <class name="com.hibernate.beans.User" table="t_user">
    <id name="id" column="id" type="integer">
       <generator class="increment"/>
    </id>
    <property  name="username" column="username" type="string"/>
    <property  name="password" column="password" type="string"/>
    <property  name="email" column="email" type="string"/>
  </class>
</hibernate-mapping>


UserDAO.java代码:
package com.hibernate.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hibernate.beans.User;
import com.hibernate.util.HibernateSessionFactory;

public class UserDAO {

	public User getUser(String username) throws HibernateException{
		Session session = null;
		Transaction tx = null;
		User user = null;
		try{
			session = HibernateSessionFactory.currentSession();
			tx = session.beginTransaction();
			Query query = session.createQuery("from User where username=?");
			query.setString(0, username.trim());
			user = (User)query.uniqueResult();
			query = null;
			tx.commit();
		}catch(HibernateException e){
			e.printStackTrace();
		}finally{
			if(tx!=null){
				//tx.rollback();
			}
			HibernateSessionFactory.closeSession();
		}
		return user;
	}
	
	public void saveUser(User user) throws HibernateException{
		Session session = null;
		Transaction tx = null;
		try{
			session = HibernateSessionFactory.currentSession();
			tx = session.beginTransaction();
			session.save(user);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(tx!=null){
				//tx.rollback();
			}
			HibernateSessionFactory.closeSession();
		}
	}
	
	public List<User> getUsers(){
		Session session = null;
		Transaction tx = null;
		List users = null;
		try{
			session = HibernateSessionFactory.currentSession();
			tx = session.beginTransaction();
			Criteria criteria = session.createCriteria(User.class);
			criteria.setMaxResults(50);
			users = criteria.list();
			tx.commit();
		}catch(HibernateException e){
			e.printStackTrace();
		}finally{
			HibernateSessionFactory.closeSession();
		}
		return users;
	}
}



UserService.java代码:
package com.hibernate.service;

import com.hibernate.beans.User;
import com.hibernate.dao.UserDAO;

public class UserService {
	
	public boolean valid(String username,String password){
		UserDAO userDao = new UserDAO();
		User user = userDao.getUser(username);
		if(user.getPassword().equals(password)){
			return true;
		}else{
			return false;
		}
	}
	
	public void saveUser(User user){
		UserDAO userDao = new  UserDAO();
		userDao.saveUser(user);
	}
	
	public int  getUserCount(){
		UserDAO userDao = new UserDAO();
		return userDao.getUsers().size();
	}
	
	public static void main(String[] args) {
		UserService userService = new UserService();
		User user = new User();
		user.setUsername("yangjianzhou");
		user.setPassword("123456");
		user.setEmail("yangjianzhouctgu@126.com");
		userService.saveUser(user);
		boolean bool = userService.valid("yangjianzhou", "123456");
		System.out.println("验证结果:"+bool);
		int count = userService.getUserCount();
		System.out.println("用户数为:"+count);
	}

}


运行结果:
Hibernate: 
    select
        max(id) 
    from
        t_user
Hibernate: 
    insert 
    into
        t_user
        (username, password, email, id) 
    values
        (?, ?, ?, ?)
Hibernate: 
    select
        user0_.id as id0_,
        user0_.username as username0_,
        user0_.password as password0_,
        user0_.email as email0_ 
    from
        t_user user0_ 
    where
        user0_.username=?
验证结果:true
Hibernate: 
    select
        this_.id as id0_0_,
        this_.username as username0_0_,
        this_.password as password0_0_,
        this_.email as email0_0_ 
    from
        t_user this_ limit ?
用户数为:1

  • 大小: 60.8 KB
  • 大小: 23.4 KB
分享到:
评论

相关推荐

    西门子S7-200与组态王构建自动配料装车系统:梯形图程序、接线图及IO分配详解

    内容概要:本文详细介绍了利用西门子S7-200 PLC和组态王软件构建的自动配料装车系统。主要内容涵盖梯形图程序的设计,包括配料逻辑、启动条件、PID控制优化以及信号处理方法;接线图和IO分配的具体细节,如输入输出端口的功能定义、模拟量模块的应用;组态王的画面设计及其与PLC的数据交互方式。此外,还分享了一些实用的调试经验和维护技巧,如解决通信干扰问题的方法。 适用人群:自动化工程技术人员、PLC编程爱好者、工业控制系统集成商。 使用场景及目标:适用于需要提高生产效率的企业,尤其是那些希望通过引入先进的自动化技术来减少人为错误并提升作业精度的场合。目标是在确保安全的前提下,实现高效稳定的物料配送流程。 其他说明:文中提供的实例不仅有助于理解理论概念,还能指导实际项目的实施。对于希望深入掌握PLC编程和HMI界面开发的人来说,是一份非常有价值的学习资料。

    自动驾驶车辆二自由度动力学MPC任意路径跟踪技术及其Carsim-Simulink联合仿真应用

    内容概要:本文详细介绍了基于二/三自由度动力学模型的MPC(模型预测控制)在自动驾驶中的应用,重点讨论了任意路径跟踪技术和Carsim-Simulink联合仿真的实现方法。首先解释了MPC的基本概念及其在自动驾驶中的重要性,然后阐述了二/三自由度动力学模型的作用。接着展示了如何利用Carsim和Simulink进行联合仿真,以实现对自定义路径的精确跟踪。最后提供了简化的代码片段,演示了MPC控制器的工作流程,并展望了未来的发展方向。 适合人群:从事自动驾驶技术研发的专业人士,尤其是对MPC和车辆动力学感兴趣的工程师和技术研究人员。 使用场景及目标:适用于需要深入了解自动驾驶路径跟踪技术的研究机构和企业,旨在提升车辆在复杂路况下的自主导航能力和安全性。 其他说明:文中提到的技术和工具对于推动自动驾驶技术的进步具有重要意义,同时也为相关领域的创新提供了理论支持和技术指导。

    实训商业源码-苹果CMS V10仿乐琪影视网站模板-毕业设计.zip

    实训商业源码-苹果CMS V10仿乐琪影视网站模板-毕业设计.zip

    为开发人员打造的低代码开发平台 Mybatis-plus关联查询,关联无SQL,性能高10倍,前后端代码本地可视化生成,flowable工作流,spring cloud微服务

    为开发人员打造的低代码开发平台。Mybatis-plus关联查询,关联无SQL,性能高10倍,前后端代码本地可视化生成,flowable工作流,spring cloud微服务,强大的无代码模型表单页面流程设计能力等全方位赋能!

    更新后的库,不会死机,不含代码以及其他各种信息

    更新后的库,不会死机,不含代码以及其他各种信息

    实训商业源码-语音变声器-毕业设计.zip

    实训商业源码-语音变声器-毕业设计.zip

    实训商业源码-坤坤鸡乐盒小程序-毕业设计.zip

    实训商业源码-坤坤鸡乐盒小程序-毕业设计.zip

    2001年数二顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

    数学复习

    实训商业源码-微信自动发卡商业小程序-毕业设计.zip

    实训商业源码-微信自动发卡商业小程序-毕业设计.zip

    高空视角飞机跑道船只目标检测数据集.zip

    数据集介绍:高空视角飞机跑道船只目标检测数据集 一、基础信息 数据集名称:高空视角飞机跑道船只目标检测数据集 图片数量: - 训练集:3,375张图片 - 验证集:331张图片 - 测试集:164张图片 分类类别: - airplane:涵盖多种机型的高空目标检测样本 - runway:包含机场跑道及地面辅助设施的关键区域标注 - ship:覆盖不同尺寸和航向的船只检测样本 标注格式: YOLO格式,包含目标检测所需的归一化坐标及类别标签 数据特性: - 无人机及高空平台采集视角 - 覆盖陆地、海洋、机场等多场景 - 包含目标小尺寸、密集排列等真实检测挑战 二、适用场景 航空交通管理系统开发: 支持构建自动识别空中飞行器与地面跑道的AI模型,提升空域管理效率 无人机自主导航系统: 为无人机提供机场跑道识别与障碍物避让的基准训练数据 港口船舶监控解决方案: 训练船舶检测模型,支持海上交通流量统计与异常行为识别 遥感图像分析工具: 适用于卫星/航拍影像中的基础设施识别与地理信息系统开发 三、数据集优势 多目标协同检测能力: 同时包含空中目标(飞机)、地面设施(跑道)、海上目标(船舶)的关联场景数据 高适应性标注: 兼容YOLOv5/YOLOv8等主流目标检测框架,支持快速模型迭代 视角多样性: 涵盖不同高度、角度、光照条件下的无人机及高空拍摄视角 专业数据分割: 严格划分训练集/验证集/测试集,符合工业级模型开发标准

    锂电行业C#通信库:涵盖RS232、RS485、Modbus RTU及PLC通信程序的源代码实现

    内容概要:本文详细介绍了锂电行业中C#通信库的开发及其应用。首先概述了锂电行业背景下主流PLC(如三菱、欧姆龙)的通信需求,接着具体分析了C#通信库文件中涉及的各种通信程序,包括PLC通信程序、电池测试仪器通信程序、扫码枪通信程序以及到期锁机控制程序。文中还探讨了模块化设计、数据处理优化、安全保障和兼容性优化等方面的建议,旨在提升软件性能和稳定性。 适合人群:从事锂电行业自动化控制系统的开发人员、工程师和技术爱好者。 使用场景及目标:①理解和掌握锂电行业中C#通信库的具体实现方法;②应用于实际生产环境中,实现高效的数据采集、控制及通信任务;③优化现有系统,提高软件性能和安全性。 其他说明:本文不仅提供了详细的通信程序源代码,还提出了多项优化建议,帮助开发者更好地应对工业自动化控制领域的挑战。

    实训商业源码-王者荣耀故事站小程序含vue后台-毕业设计.zip

    实训商业源码-王者荣耀故事站小程序含vue后台-毕业设计.zip

    实训商业源码--原生开发淘系统-毕业设计.zip

    实训商业源码--原生开发淘系统-毕业设计.zip

    相空间重构与混沌特征验证:基于Matlab的一维实验数据分析

    内容概要:本文详细介绍了如何利用Matlab对一维实验数据进行相空间重构,重点在于确定延迟时间t和嵌入维数m这两个关键参数。文中采用互信息法来确定延迟时间,并通过计算不同嵌入维数下重构相空间的拓扑性质选择合适的嵌入维数。此外,还探讨了如何通过计算关联维数来验证一维实验数据是否具有混沌特性。关联维数的计算涉及将一维时间序列转化为高维数据,再计算各点间距离矩阵及其关联积分,最终得出关联维数并判断是否存在混沌现象。 适合人群:从事非线性动力学、复杂系统研究的专业人士,尤其是需要处理一维实验数据的研究人员。 使用场景及目标:适用于希望深入了解相空间重构理论及其应用的研究者,旨在帮助他们掌握用Matlab实现相空间重构的具体方法,从而更好地理解和分析复杂系统的混沌特征。 其他说明:本文不仅提供了一种有效的技术手段,而且强调了理论与实际操作相结合的重要性,鼓励读者在实践中不断探索和完善自己的研究思路。

    COMSOL固体超声导波二维仿真:汉宁窗调制正弦信号的应用与实现

    内容概要:本文详细介绍了如何利用COMSOL软件进行固体超声导波的二维仿真。主要内容包括仿真的准备工作,如设定材料属性和模型尺寸;汉宁窗调制的5周期正弦函数作为激励信号的具体实现方法及其优势;以及如何通过指定位移来添加激励信号。此外,还讨论了仿真的过程和结果分析,展示了声波在固体中的传播路径和振幅分布等情况。 适合人群:对超声波仿真感兴趣的科研人员、工程技术人员以及相关专业的学生。 使用场景及目标:适用于需要研究声波在固体中传播特性的项目,旨在提高对超声导波的理解并优化仿真效果。 其他说明:文中提供了具体的代码片段用于生成汉宁窗调制的正弦波形,有助于读者快速上手实践。同时强调了汉宁窗调制对于减少信号边缘效应的重要作用。

    太阳影子定 位模型的研究及应用.pdf

    太阳影子定 位模型的研究及应用.pdf

    实训商业源码-聚合登录平台网站源码-毕业设计.zip

    实训商业源码-聚合登录平台网站源码-毕业设计.zip

    基于PyTorch的多尺度一维卷积神经网络用于CWRU轴承故障诊断

    内容概要:本文详细介绍了如何利用多尺度一维卷积神经网络(MS-1DCNN)在PyTorch框架下进行轴承故障诊断。首先,通过对凯斯西储大学(CWRU)提供的轴承数据集进行预处理,提取振动信号并将其转换为适合模型输入的格式。然后,构建了一个包含三个不同尺度卷积核的MS-1DCNN模型,能够捕捉到不同时间尺度的特征。接下来,采用AdamW优化器和余弦退火学习率调度器对模型进行了训练,并加入了早停机制以避免过拟合。最终,在验证集上实现了超过97.5%的高精度。此外,还展示了如何使用混淆矩阵对预测结果进行可视化。 适合人群:对机器学习尤其是深度学习感兴趣的初学者以及从事机械故障诊断的研究人员。 使用场景及目标:本教程旨在帮助读者掌握从数据准备到模型部署的完整故障诊断流程,特别适合希望快速入门故障诊断领域的学生和技术人员。 其他说明:文中提供了详细的代码片段,涵盖了数据读取、预处理、模型定义、训练及评估等多个方面,确保读者能够复现实验结果。同时,针对可能出现的问题给出了相应的解决方案。

    电力电子入门:PSIM DC-DC仿真技术与降压斩波电路Buck详解

    内容概要:本文介绍了PSIM的DC-DC仿真技术及其在降压斩波电路Buck中的应用。首先阐述了电力电子技术的发展背景,接着详细解释了PSIM作为一种集成化的仿真工具的功能特点,特别是在DC-DC变换器仿真方面的作用。然后重点讲解了降压斩波电路Buck的基本概念、特点及其广泛应用领域,包括电源适配器、UPS电源、车载电源等。最后探讨了利用PSIM进行降压斩波电路仿真的具体方法和技术要点,强调了仿真对于理解和优化电路设计的重要性。 适合人群:对电力电子感兴趣的初学者,尤其是希望深入了解DC-DC变换器和降压斩波电路的技术爱好者。 使用场景及目标:适用于希望通过理论学习和实际操作相结合的方式掌握电力电子基础知识的人群。目标是在实践中理解降压斩波电路的工作原理,学会使用PSIM进行电路仿真,从而提升电路设计能力。 其他说明:文中不仅提供了详细的理论介绍,还结合实例展示了具体的仿真步骤,帮助读者更好地理解和应用所学知识。

    基于Matlab GUI的语音信号去噪处理:正弦噪声与高斯噪声的巴特沃斯低通滤波器与小波分解应用

    内容概要:本文详细介绍了利用Matlab及其图形用户界面(GUI)对语音信号进行去噪处理的方法。主要内容包括加载语音信号并显示其时域和频域图,随后依次添加正弦噪声和高斯白噪声,并采用巴特沃斯低通滤波器和小波变换两种方法进行去噪处理。每一步处理后均可播放处理后的音频,以便直观感受去噪效果。此外,文中还强调了GUI界面在提高操作便捷性和结果可视化方面的重要作用。 适合人群:对语音信号处理感兴趣的初学者以及有一定Matlab基础的研发人员。 使用场景及目标:适用于需要对语音信号进行预处理的研究项目或实际应用场景,如语音识别系统、通信工程等领域。目标是掌握Matlab中常用的去噪技术和工具,提升语音信号质量。 其他说明:建议使用Matlab 2022b及以上版本,低版本可能无法兼容部分功能。同时提供了非GUI版本的代码供选择。

Global site tag (gtag.js) - Google Analytics