弹簧 休眠休眠示例
我们将在CRUD操作中使用以下注释。
方法
|
描述
|
得到
|
用于读取资源
|
发布
|
它用于创建新资源。
不是幂等方法 |
放
|
通常用于更新资源。是幂等方法
|
删除
|
用于删除资源
|
幂等 表示多个成功请求的结果在初始应用后不会更改资源状态
例如 :
删除是幂等方法,因为当您第一次使用delete时,它将删除资源(初始应用程序),但是之后,所有其他请求都将没有结果,因为资源已被删除。
发布不是幂等方法,因为当您使用post创建资源时,它将为每个新请求继续创建资源,因此多个成功请求的结果将不同。
源代码:
以下是创建具有休眠集成的Spring Restful Web服务的步骤。
马文依赖
2) 我们需要在类路径中添加Jackson json实用程序。
1 2 3 4 5 6 7 |
<依赖> <groupId>com.fastxml.杰克逊.核心</groupId> <artifactId>杰克逊-数据绑定</artifactId> <版>2.4.1</版> </依赖> |
弹簧将自动将Jackson2JsonMessageConverter加载到其应用程序上下文中。每当您使用接受的标头=”接受= application / json”,然后Jackson2JsonMessageConverter进入图片并将资源转换为json格式。
现在,按如下所示更改pom.xml:
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
<项目 XML文件ns="http://maven.apache.org/POM/4.0.0" XML文件ns:si="http://www.w3.org/2001/XMLSchema-instance" si:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <模型Version>4.0.0</模型Version> <groupId>com.Arpit.爪哇2blog</groupId> <artifactId>弹簧RestHibernateExample</artifactId> <打包>战争</打包> <版>0.0.1-快照</版> <名称>弹簧RestHibernateExample 马文 网络应用</名称> <网址>http://maven.apache.org</url> <依存关系> <依赖> <groupId>unit</groupId> <artifactId>unit</artifactId> <版>3.8.1</版> <范围>测试</范围> </依赖> <依赖> <groupId>爪哇x.小服务程序</groupId> <artifactId>爪哇x.小服务程序-api</artifactId> <版>3.1.0</版> </依赖> <依赖> <groupId>组织.弹簧框架</groupId> <artifactId>弹簧-核心</artifactId> <版>${弹簧.版}</版> </依赖> <依赖> <groupId>组织.弹簧框架</groupId> <artifactId>弹簧-网路mvc</artifactId> <版>${弹簧.版}</版> </依赖> <依赖> <groupId>com.fastxml.杰克逊.核心</groupId> <artifactId>杰克逊-数据绑定</artifactId> <版>2.4.1</版> </依赖> <!- 冬眠 -> <依赖> <groupId>组织.冬眠的</groupId> <artifactId>冬眠的-核心</artifactId> <版>${冬眠的.版}</版> </依赖> <依赖> <groupId>组织.冬眠的</groupId> <artifactId>冬眠的-实体经理</artifactId> <版>${冬眠的.版}</版> </依赖> <!- 阿帕奇 公地 DBCP -> <依赖> <groupId>公地-数据库</groupId> <artifactId>公地-数据库</artifactId> <版>1.4</版> </依赖> <!- 弹簧 ORM -> <依赖> <groupId>组织.弹簧框架</groupId> <artifactId>弹簧-奥姆</artifactId> <版>${弹簧.版}</版> </依赖> <!- 纵横比 -> <依赖> <groupId>组织.方面</groupId> <artifactId>方面</artifactId> <版>${组织.方面-版}</版> </依赖> <依赖> <groupId>MySQL的</groupId> <artifactId>MySQL的-连接器-爪哇</artifactId> <版>5.1.6</版> </依赖> </依存关系> <建立> <finalName>弹簧RestHibernateExample</finalName> <外挂程式> <插入> <groupId>组织.阿帕奇.专家.外挂程式</groupId> <artifactId>专家-编译器-插入</artifactId> <版>3.1</版> <组态> <资源>${杰克.版}</资源> <目标>${杰克.版}</目标> </组态> </插入> <插入> <groupId>组织.阿帕奇.专家.外挂程式</groupId> <artifactId>专家-战争-插入</artifactId> <组态> <failOnMissingWebXml>假</failOnMissingWebXml> </组态> </插入> </外挂程式> </建立> <属性> <弹簧.版>4.2.1。发布</弹簧.版> <安全.版>4.0.3发布</安全.版> <杰克.版>1.7</杰克.版> <冬眠的.版>4.3.5。最终</冬眠的.版> <组织.方面-版>1.7.4</组织.方面-版> </属性> </项目> |
4) 在/ WEB-INF /文件夹中创建一个名为spring-servlet.xml的xml文件。
如果您想使用不同的弹簧包来搜索控制器,请更改context:component-scan。请参考 春季MVC Hello World示例 了解更多。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?XML文件 版="1.0" 编码方式=“ UTF-8”?> <豆子:豆子 XML文件ns="http://www.springframework.org/schema/mvc" XML文件ns:si="http://www.w3.org/2001/XMLSchema-instance" XML文件ns:豆子="http://www.springframework.org/schema/beans" XML文件ns:语境="http://www.springframework.org/schema/context" XML文件ns:发射="http://www.springframework.org/schema/tx" si:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"> <注解-驱动的 /> <资源 映射=“ /资源/ **” 地点=“ /资源/” /> <豆子:豆 ID=“数据源” 类=“ 组织.apache.commons.dbcp.BasicDataSource” 破坏-方法=“关”> <豆子:属性 名称=“ driverClassName” 值=“ com.mysql.jdbc.Driver” /> <豆子:属性 名称=“网址” 值=“ jdbc:mysql:// localhost:3306 / 国家Data” /> <豆子:属性 名称=“用户名” 值=“根” /> <豆子:属性 名称=“密码” 值=” /> </豆子:豆> <!- 冬眠 4 会话工厂 豆 定义 -> <豆子:豆 ID=“ 冬眠的4AnnotatedSessionFactory” 类=“ 组织.springframework.orm.hibernate4.LocalSessionFactoryBean”> <豆子:属性 名称=“数据源” 参考=“数据源” /> <豆子:属性 名称=“带注释的类”> <豆子:清单> <豆子:值>组织.Arpit.爪哇2blog.模型.国家</豆子:值> </豆子:清单> </豆子:属性> <豆子:属性 名称=“ 冬眠的Properties”> <豆子:道具> <豆子:支柱 键=“休眠。方言”>组织.冬眠的.方言.MySQL方言 </豆子:支柱> <豆子:支柱 键=“ 冬眠的.show_sql”>真正</豆子:支柱> </豆子:道具> </豆子:属性> </豆子:豆> <语境:零件-扫描 基础-包=“ 组织.arpit.java2blog” /> <发射:注解-驱动的 交易-经理=“ 交易Manager”/> <豆子:豆 ID=“ 交易Manager” 类=“ 组织.springframework.orm.hibernate4.HibernateTransactionManager”> <豆子:属性 名称=“ 会议Factory” 参考=“ 冬眠的4AnnotatedSessionFactory” /> </豆子:豆> </豆子:豆子> |
在Spring-servlet.xml中,我们完成了休眠配置。
数据源 豆 is used to specify 爪哇 data 资源. We need to provide driver, URL , Username 和 Password.
交易Manager 豆用于配置休眠事务管理器。 冬眠的4AnnotatedSessionFactory 豆用于配置创建Hibernate 会话工厂的FactoryBean。这是在Spring应用程序上下文中设置共享Hibernate 会话工厂的常用方法,因此您可以使用此SessionFactory注入Hibernate数据访问对象。
创建bean类
4) Create a 豆 名称 “Country.java”在org.arpit.java2blog.bean中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
包 组织.Arpit.爪哇2blog.模型; 进口 爪哇x.坚持不懈.柱; 进口 爪哇x.坚持不懈.实体; 进口 爪哇x.坚持不懈.产生价值; 进口 爪哇x.坚持不懈.GenerationType; 进口 爪哇x.坚持不懈.ID; 进口 爪哇x.坚持不懈.表; / * *这是我们的模型类,它对应于数据库中的“国家/地区”表 * / @实体 @表(名称=“国家”) 上市 类 国家{ @ID @柱(名称=“ID”) @产生价值(战略=GenerationType.身份) 整型 ID; @柱(名称=“国家的名字”) 串 国家的名字; @柱(名称=“人口”) 长 人口; 上市 国家() { 超(); } 上市 国家(整型 i, 串 国家的名字,长 人口) { 超(); 这个.ID = i; 这个.国家的名字 = 国家的名字; 这个.人口=人口; } 上市 整型 getId() { 返回 ID; } 上市 虚空 设置名称(整型 ID) { 这个.ID = ID; } 上市 串 getCountryName() { 返回 国家的名字; } 上市 虚空 setCountryName(串 国家的名字) { 这个.国家的名字 = 国家的名字; } 上市 长 getPopulation() { 返回 人口; } 上市 虚空 setPopulation(长 人口) { 这个.人口 = 人口; } } |
@实体 用于创建持久性pojo类。对于此java类,您将在数据库中具有相应的表。 @Column用于将带注释的属性映射到表中的相应列。因此,使用以下代码在mysql数据库中创建Country表:
1 2 3 4 5 6 7 8 9 |
创造 表 国家 ( ID 整型 主 键 不 空值 自动递增, 国家的名字 varchar(100) 不 空值, 人口 整型 不 空值 ) ; |
创建控制器
5) 创建一个名为的控制器“CountryController.java” 包装内 组织.arpit.java2blog.controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
包 组织.Arpit.爪哇2blog.控制者; 进口 爪哇.实用程序.清单; 进口 组织.Arpit.爪哇2blog.模型.国家; 进口 组织.Arpit.爪哇2blog.服务.国家服务; 进口 组织.弹簧框架.豆子.厂.注解.自动接线; 进口 组织.弹簧框架.网路.捆绑.注解.路径变量; 进口 组织.弹簧框架.网路.捆绑.注解.RequestBody; 进口 组织.弹簧框架.网路.捆绑.注解.请求映射; 进口 组织.弹簧框架.网路.捆绑.注解.请求方法; 进口 组织.弹簧框架.网路.捆绑.注解.RestController; @RestController 上市 类 国家Controller { @自动接线 国家服务 国家Service; @请求映射(值 = “ / getAllCountries”, 方法 = 请求方法.得到, 标头 = "接受= application / json") 上市 清单 getCountries() { 清单 清单OfCountries = 国家Service.getAllCountries(); 返回 清单OfCountries; } @请求映射(值 = “ / getCountry / {id}”, 方法 = 请求方法.得到, 标头 = "接受= application / json") 上市 国家 getCountryById(@路径变量 整型 ID) { 返回 国家Service.getCountry(ID); } @请求映射(值 = “ / addCountry”, 方法 = 请求方法.开机自检, 标头 = "接受= application / json") 上市 虚空 addCountry(@RequestBody 国家 国家) { 国家Service.addCountry(国家); } @请求映射(值 = “ / 更新Country”, 方法 = 请求方法.放, 标头 = "接受= application / json") 上市 虚空 更新Country(@RequestBody 国家 国家) { 国家Service.更新Country(国家); } @请求映射(值 = “ / 删除Country / {id}”, 方法 = 请求方法.删除, 标头 = "接受= application / json") 上市 虚空 删除Country(@路径变量(“ID”) 整型 ID) { 国家Service.删除Country(ID); } } |
创建DAO类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
包 组织.Arpit.爪哇2blog.道; 进口 爪哇.实用程序.清单; 进口 组织.Arpit.爪哇2blog.模型.国家; 进口 组织.冬眠的.届会; 进口 组织.冬眠的.会话工厂; 进口 组织.弹簧框架.豆子.厂.注解.自动接线; 进口 组织.弹簧框架.刻板印象.资料库; @资料库 上市 类 国家 { @自动接线 私人的 会话工厂 会议Factory; 上市 虚空 setSessionFactory(会话工厂 科幻) { 这个.会议Factory = 科幻; } 上市 清单 getAllCountries() { 届会 会议 = 这个.会议Factory.getCurrentSession(); 清单 国家List = 会议.createQuery(“来自国家”).清单(); 返回 国家List; } 上市 国家 getCountry(整型 ID) { 届会 会议 = 这个.会议Factory.getCurrentSession(); 国家 国家 = (国家) 会议.加载(国家.类, 新 整数(ID)); 返回 国家; } 上市 国家 addCountry(国家 国家) { 届会 会议 = 这个.会议Factory.getCurrentSession(); 会议.坚持(国家); 返回 国家; } 上市 虚空 更新Country(国家 国家) { 届会 会议 = 这个.会议Factory.getCurrentSession(); 会议.更新(国家); } 上市 虚空 删除Country(整型 ID) { 届会 会议 = 这个.会议Factory.getCurrentSession(); 国家 p = (国家) 会议.加载(国家.类, 新 整数(ID)); 如果 (空值 != p) { 会议.删除(p); } } } |
@存储库为 专业组件注释 用于在DAO层创建bean。我们使用了自动装配注释将休眠的SessionFactory注入CountryDAO类。我们已经在Spring-Servlet.xml文件中配置了休眠的SessionFactory对象。
创建服务类
这是服务级别的类。它将调用DAO层类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
包 组织.Arpit.爪哇2blog.服务; 进口 爪哇.实用程序.清单; 进口 组织.Arpit.爪哇2blog.道.国家; 进口 组织.Arpit.爪哇2blog.模型.国家; 进口 组织.弹簧框架.豆子.厂.注解.自动接线; 进口 组织.弹簧框架.刻板印象.服务; 进口 组织.弹簧框架.交易.注解.交易性; @服务(“ 国家Service”) 上市 类 国家服务 { @自动接线 国家 国道; @交易性 上市 清单 getAllCountries() { 返回 国道.getAllCountries(); } @交易性 上市 国家 getCountry(整型 ID) { 返回 国道.getCountry(ID); } @交易性 上市 虚空 addCountry(国家 国家) { 国道.addCountry(国家); } @交易性 上市 虚空 更新Country(国家 国家) { 国道.更新Country(国家); } @交易性 上市 虚空 删除Country(整型 ID) { 国道.删除Country(ID); } } |
@服务是 专业组件注释 用于在服务层创建bean。
7) It ‘是时候进行Maven构建了。
运行应用程序
发布方式
12) Post方法用于创建新资源。在这里,我们将新的“国家/地区印度”添加到国家/地区列表中,因此您可以看到我们在帖子正文中使用了新的国家/地区json。
网址: “http:// localhost:8080 / 弹簧RestHibernateExample / addCountry”.
让我们在数据库的“国家/地区”表中查看相应的条目。
让我们以类似的方式再创建3个国家/地区,即中国,尼泊尔和美国。
放置方法
13) Put方法用于更新资源。这里将使用put方法更新尼泊尔人口。
我们将在请求正文中更新国家/地区json。
网址: “http:// localhost:8080 / 弹簧RestHibernateExample / 更新Country”
让我们检查尼泊尔’数据库中的人口。
删除方式
如果您在执行上述步骤时遇到404错误,则可能需要执行以下步骤:
1) 如果您在Tomcat启动控制台日志中收到此警告,则可能导致此问题
- 转到服务器视图
- 双击您的tomcat服务器。它将打开服务器配置。
- 在服务器选项下,选中“将模块内容发布到单独的XML文件”复选框。
- 重新启动服务器。这次,您的页面将没有任何问题。
这应该可以解决您的问题。
恩蒂
Comments
我已经在mysql中制作了数据库,并创建了hiberate.cfg,但是如何使用该项目访问数据库中的数据
下载后,我们应该在哪里更改
罗希特(Hi Rohit),
您需要配置mysql和休眠模式。我想你已经做到了。
您还需要在数据库中创建一个表,如下所示,然后运行该应用程序。它应该工作。让我知道您是否仍然遇到任何问题。
创建表格国家
(
ID 整型 主 键 不 空值 自动递增,
国家的名字 varchar(100)NOT 空值,
人口int 不 空值
)
;
我已经实现了示例,我能够以json格式从数据库中获取数据,但是其他方法(如getById,addDetails,Update,delete)无效。状态500。请帮助我解决此问题
谢谢