Hibernate学习——建立一个简单的Hibernate项目

最近老师让做个web小应用,大三的时候学习过一点J2EE的东西,也做过一些web相关的XXX管理系统,都是用servlet,jsp这些完成的,虽然勉强能够完成任务,但其中各种代码掺杂在一起,不好看而且维护起来也很麻烦,出了一点问题要调试好久才能解决。这次打算让自己多学一点东西,在项目的架构上我使用了struts2实现了多层代码的分离,在数据库方面,因为以往的经历都需要对连接数据库进行一个封装,里面包含有数据库的连接,记录的添加,查询,修改和删除等操作,每次使用的过程中都需要先实现一个连接对象然后再进行数据库的操作,而面向对象编程中对于不同对象,传统的数据库操作只能够完成一个泛化的任务,不同的对象需要不同的处理方式,所以我们需要一个使用面向对象思想描述数据库的一个框架来完成这样的任务,通过度娘就找到了Hibernate。

那么在这里我将记录下我学习Hibernate框架的过程,以免用过之后又给忘记了。。。

今天我将完成环境的配置以及建立一个简单的Hibernate的工程,使用的开发工具为myeclipse10,数据库为mysql。

在此之前我们要做一些必要的准备:java jdk还有mysql的问题我就不说了,这里只涉及项目配置以及必要代码的编写,我们要先下载Hibernate的jar包,解压后找到这几个文件:hibernate-annotations.jar,hibernate-commons-annotations.jar,hibernate-entitymanager.jar,hibernate-validator.jar,hibernate3.jar

打开myeclipse后建立一个web项目,将上述的Jar包导入到项目中,这里我自己建立一个数据库lan,里面有一个表叫user,其中包括U_ID,U_NAME,U_PASSWORD三个,我们的任务就是在程序中实现一个User类,完成User类与数据库中user表的映射,并向表中添加一个记录。

一个hibernate的项目有必不可少的两个文件,一个是hibernate.cfg.xml,用于完成项目与数据库的映射。另一个是xxx.hbm.xml,即表与类对象映射的文件,实现类属性与表中属性的映射。

首先要完成项目与数据库的映射关系,在这里需要写一个配置文件来完成,命名为hibernate.cfg.xml,路径放在src根目录就好。

 1 <?xml version='1.0' encoding='UTF-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 
 6 <!-- Generated by MyEclipse Hibernate Tools.                   -->
 7 <hibernate-configuration>
 8 
 9     <session-factory>
10         <property name="dialect">
11             org.hibernate.dialect.MySQLDialect
12         </property>
13         <property name="hibernate.connection.url"><!-- 填写数据库路径 -->
14             jdbc:mysql://127.0.0.1:3306/lan
15         </property>
16         <property name="connection.username">root</property><!-- 填写数据库用户名 -->
17         <property name="connection.password">root</property><!-- 填写数据库密码 -->
18         <property name="connection.driver_class"><!-- 填写数据库驱动 -->
19             com.mysql.jdbc.Driver
20         </property>
21         <property name="myeclipse.connection.profile">lan</property>
22         <mapping resource="./User.hbm.xml" /><!-- 表映射文件-->
23     
24     </session-factory>
25 
26 </hibernate-configuration>

 

其中的表映射文件我们下面说。

然后写一个User类(注意我们的模型类和表内容必须是一一对应的,即属性之间是一一对应的关系):

 1 class User{
 2     private int id;
 3     private String name;
 4     private String password;
 5 
 6     public void setId(int id){
 7         this.id = id;
 8     }
 9     public void setName(String name){
10         this.name = name;
11     }
12     public void setPassword(String password){
13         this.password = password;
14     }
15 
16     public int getId(){
17         return id;
18     }
19     public String getName(){
20         return name;
21     }
22     public String getPassword(){
23         return password;
24     }
25 }

 

其中的数据成员分别对应数据库user表中的三个元素:U_ID,U_NAME,U_PASSWORD。

有了user类,我们下一步就是要实现数据库表user与程序中的模型类User的映射关系了,此时我们需要一个表映射文件:XXX.hbm.xml(本文我们将其命名为user.hbm.xml)

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- 
 5     Mapping file autogenerated by MyEclipse Persistence Tools
 6 -->
 7 <hibernate-mapping>
 8     <class name="model.User" table="user" catalog="lan">
 9         <id name="id" type="int">
10             <column name="U_ID" length="11" />
11             <generator class="assigned"></generator>
12         </id>
13         <property name="name" type="string">
14             <column name="U_NAME" length="20" not-null="true" />
15         </property>
16         <property name="password" type="string">
17             <column name="U_PASSWORD" length="20" not-null="true" />
18         </property>
19     </class>
20 </hibernate-mapping>

 

其中class name选项是项目中数据库表对应的类路径,table选项为表名,catalog为数据库名。

完成了上述的准备过程,我们下面就要尝试对项目进行测试了,我们向数据库中添加一个的记录的代码如下:

 1 User user;    //定义一个model
 2 user.setId(1);   //设置user的属性值 
 3 user.setName("name");
 4 user.setPassword("password");
 5 Session session;
 6 // 找到Hibernate配置
 7 Configuration config=new Configuration().configure();
 8 //从配置中取出SessionFactory
 9 SessionFactory factory=config.buildSessionFactory();
10 //从SessionFactory中取出一个Session
11 session=factory.openSession();
12 Transaction tran=session.beginTransaction();
13 //执行语句
14 this.session.save(user);
15 //提交事务
16 tran.commit();//

以上的语句实现了向数据库中添加一条记录的效果,第一次写思维有点混乱。。。

转载于:https://www.cnblogs.com/mickeygao/p/3947066.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python列表生成多个号码_python遍历多个列表生成列表或字典

原博文 2017-03-10 18:30 − key[a,b,c,d] value[1,2,3,4] mydictdict(zip(key,value)) print mydict 输出结果&#xff1a; {a: 1, c: 3, b: 2, d: 4} 也可以用zip同时遍历多个列表&#xff0c;生成一个多维列表 key... 相关推荐 2019-12-18 21:27 − 一.zip函数描述和使用 zi…

Cisco 胖AP和瘦AP的区别

无线接入点&#xff08;AP&#xff0c;Access Point&#xff09;也称无线网桥、无线网关&#xff0c;也就是所谓的“瘦”AP。此无线设备的传输机制相当于有线网络中的集线器&#xff0c;在无线局域网中不停地接收和传送数据&#xff1b;任 何一台装有无线网卡的PC均可通过AP来…

linux之head命令

head 与 tail 就像它的名字一样的浅显易懂&#xff0c;它是用来显示开头或结尾某个数量的文字区块&#xff0c;head 用来显示档案的开头至标准输出中&#xff0c;而 tail 想当然尔就是看档案的结尾。 1&#xff0e;命令格式&#xff1a; head [参数]... [文件]... 2&#xf…

NCC CAP 6.0 发布 —— 新增支持 OpenTelemetry

前言今天&#xff0c;我们很高兴宣布 CAP 发布 6.0 版本正式版&#xff0c;在这个版本中&#xff0c;我们主要致力于对 OpenTelemetry 提供支持&#xff0c;以及更好的适配 .NET 6。那么&#xff0c;接下来我们具体看一下吧。总览可能有些人还不知道 CAP 是什么&#xff0c;老规…

朴素贝叶斯--文档分类

原文&#xff1a;http://ihoge.cn/2018/MultinomialNB.html 把文档转换成向量 TF-IDF是一种统计方法&#xff0c;用以评估一个词语对于一份文档的重要程度。 TF表示词频&#xff0c; 即&#xff1a;词语在一片文档中出现的次数 词语总数IDF表示一个词的逆向文档频率指数&am…

USENIX 最佳论文奖:擦除 Windows Azure 存储编码

&#xfeff;&#xfeff;我们发表了一篇介绍Windows Azure 存储如何用编码方式擦除数据的论文&#xff0c;此论文在 2012 年 6 月的 USENIX 技术年会上荣获最佳论文奖。这是 MicrosoftResearch 和 Windows Azure 存储团队共同努力的成果。 您可以在此处找到此论文。 Windows …

Linux I/O 模型(待修改)

2019独角兽企业重金招聘Python工程师标准>>> 最近看到“服务器并发处理能力”章节&#xff0c;被里面的“I/O模型“搞得有点头晕&#xff0c;所以这里希望通过概念的辨析和对比&#xff0c;能更好的理解Linux的 I/O模型。 同步&#xff08;synchronous&#xff09;…

linux之ls只显示文件或者文件夹

只显示文件夹 ls -l | grep ^d 只显示文件 ls -l | grep ^- 解释一下&#xff1a; ls -l 之后会得到下面的内容 drwx------ 4 jinwang users 4096 2012-02-09 15:00 .xchat2 -rw-r--r-- 1 jinwang users 1690399 2012-06-04 12:16 45s.txt 文件是以 &q…

git代码提交流程

从master创建任务分支1.需要先将master分支代码更新到最新然后再切新分支&#xff1b;2.新需求和hotfix需要从master切分支&#xff0c;若是在QA测试阶段或者预发布阶段的bug&#xff0c;则需要再该功能分支上进行修改&#xff1b;提交代码到自己的任务分支commit之后一定要pus…

PCA主成分分析+SVM实现人脸识别

原文地址&#xff1a; http://ihoge.cn/2018/PCASVM人脸识别.html 加载数据 这里使用的测试数据共包含40位人员照片&#xff0c;每个人10张照片。也可登陆http://www.cl.cam.ac.uk/research/dtg/attarchive/facesataglance.html 查看400张照片的缩略图。 import time impo…

Lua 学习笔记(一)

Lua学习笔记 1、lua的优势 a、可扩张性 b、简单 c、高效率 d、和平台无关 2、注释 a、单行注释 -- b、多行注释 --[[ --]] 3、类型和值 8个基本类型&#xff0c;检测变量类型用type a、nil print(type(nil)) -->nil 全局变量没有…

python inspect模块解析

来源&#xff1a;https://my.oschina.net/taisha/blog/55597 inspect模块主要提供了四种用处&#xff1a; (1) 对是否是模块&#xff0c;框架&#xff0c;函数等进行类型检查。 (2) 获取源码 (3) 获取类或函数的参数的信息 (4) 解析堆栈 使用inspect模块可以提供自省功能&#…

龙芯发布.NET 6.0.100开发者内测版

龙芯在龙芯开源社区发布了LoongArch64-.NET-SDK-6.0.100开发者内测版的新闻 &#xff0c;龙芯.NET基于上游社区 版本 适配支持龙芯平台架构。目前支持LoongArch64架构和MIPS64架构&#xff0c;LoongArch64架构的.NET-SDK-3.1已完成&#xff0c;安装包下载地址LoongArch64-.NET …

Redis系统性介绍

虽然Redis已经很火了&#xff0c;相信还是有很多同学对Redis只是有所听闻或者了解并不全面&#xff0c;下面是一个比较系统的Redis介绍&#xff0c;对Redis的特性及各种数据类型及操作进行了介绍。是一个很不错的Redis入门教程。 1.介绍 1.1 Redis是什么 REmote DIctionary Ser…

mysql 不支持 select into

替代方案 insert into newTableName(column1,column2) select * from oldTableName INSERT INTO aw_daily_call_task(tenantId,sub_product_name, call_type,call_date,expire_date,username,customer_type,start_date,end_date,budget,product_type) SELECT t1.tenant_id …

linux之wc命令

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数&#xff0c;并将统计结果显示输出。 1&#xff0e;命令格式&#xff1a; wc [选项]文件... 2&#xff0e;命令功能&#xff1a; 统计指定文件中的字节数、字数、行数&#xff0c;并将统计结果显示输…

数据挖掘的9大成熟技术和应用

http://ihoge.cn/2018/DataMining.html 数据挖掘的9大成熟技术和应用 基于数据挖掘的9大主要成熟技术以及在数据化运营中的主要应用&#xff1a; 1、决策树 2、神经网络 3、回归 4、关联规则 5、聚类 6、贝叶斯分类 7、支持向量机 8、主成分分析 9、假设检验 1 决…

LVS:三种负载均衡方式与八种均衡算法

1、什么是LVS&#xff1f; 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西&#xff0c;其实它是一种集群(Cluster)技术&#xff0c;采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率&#xff0c;将请求均衡地转移到不同的服务器上执行&#xff0…

排查 .NET开发的工厂MES系统 内存泄漏分析

一&#xff1a;背景 1. 讲故事上个月有位朋友加微信求助&#xff0c;说他的程序跑着跑着就内存爆掉了&#xff0c;寻求如何解决&#xff0c;截图如下&#xff1a;从聊天内容看&#xff0c;这位朋友压力还是蛮大的&#xff0c;话说这貌似是我分析的第三个 MES 系统了&#xff0c…