爪哇2博客
爪哇2博客

弹簧 休眠休眠示例

在上一篇文章中,我们已经看到 春季休息例子 。在本文中,我们将扩展相同的示例并将其与 冬眠的MySQL的.
我们将在CRUD操作中使用以下注释。

方法
描述
得到
用于读取资源
发布
它用于创建新资源。
不是幂等方法
通常用于更新资源。是幂等方法
删除
用于删除资源

幂等 表示多个成功请求的结果在初始应用后不会更改资源状态
例如 :
删除是幂等方法,因为当您第一次使用delete时,它将删除资源(初始应用程序),但是之后,所有其他请求都将没有结果,因为资源已被删除。

发布不是幂等方法,因为当您使用post创建资源时,它将为每个新请求继续创建资源,因此多个成功请求的结果将不同。

源代码:

以下是创建具有休眠集成的Spring Restful Web服务的步骤。

1) 创建一个 在Eclipse中使用Maven的动态Web项目 named “SpringRestHibernateExample”

马文依赖

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类

建立课程 国家.java包装内 组织.arpit.java2blog.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对象。

创建服务类

6) 在包中创建一个类CountryService.java 组织.arpit.java2blog.service
这是服务级别的类。它将调用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构建了。

Right click on 项目 -> Run as -> 马文 建立

马文构建在Eclipse中
8) 提供目标作为全新安装(如下所示)并单击运行
马文构建在Eclipse中

运行应用程序

9) Right click on 项目 -> run as -> run on server
选择Apache tomcat,然后单击完成
10) 我们将在  邮差 ,基于UI的客户端,用于测试宁静的Web应用程序。这是chrome插件。启动邮递员。如果您想要基于Java的客户端,那么您也可以使用 如何在Java中发送get或post请求.

发布方式

12) Post方法用于创建新资源。在这里,我们将新的“国家/地区印度”添加到国家/地区列表中,因此您可以看到我们在帖子正文中使用了新的国家/地区json。
网址: “http:// localhost:8080 / 弹簧RestHibernateExample / addCountry”.

让我们在数据库的“国家/地区”表中查看相应的条目。

让我们以类似的方式再创建3个国家/地区,即中国,尼泊尔和美国。

放置方法

13) Put方法用于更新资源。这里将使用put方法更新尼泊尔人口。
我们将在请求正文中更新国家/地区json。
网址: “http:// localhost:8080 / 弹簧RestHibernateExample / 更新Country”

让我们检查尼泊尔’数据库中的人口。

删除方式

14) Delete方法用于删除资源。我们将需要删除的国家/地区的ID传递为PathParam。我们将要删除ID:3,即尼泊尔,以演示删除方法。

网址: “http:// localhost:8080 / 弹簧RestHibernateExample / 删除Country / 3”

现在检查数据库中的条目。

如您所见,我们已删除 ID为3的国家(即尼泊尔)

项目结构:


我们完成了Spring Restful Web服务json CRUD示例。如果您仍然遇到任何问题,请发表评论。

如果您在执行上述步骤时遇到404错误,则可能需要执行以下步骤:


1) 如果您在Tomcat启动控制台日志中收到此警告,则可能导致此问题
警告:[SetPropertiesRule] {服务器/服务/引擎/主机/上下文}设置属性‘source’ to ‘org.eclipse.jst.j2ee.server:JAXRSJsonCRUDExample’找不到匹配的属性。
此特定警告基本上意味着Tomcat中的元素’s server.xml包含未知属性源,而Tomcat不包含’不知道如何处理此属性,因此将忽略它​​。
为了解决这个问题,
Remove the 项目 from the server from the Server View. Right click on server -> add 和 remove
然后从服务器配置中删除项目。
然后在同一服务器下运行该项目。警告应立即删除
或者,如果警告仍然存在,则
  • 转到服务器视图
  • 双击您的tomcat服务器。它将打开服务器配置。
  • 在服务器选项下,选中“将模块内容发布到单独的XML文件”复选框。
  • 重新启动服务器。这次,您的页面将没有任何问题。
2) 尝试更新Maven项目。
Right click on 项目 ->马文-> 更新 项目
更新Maven项目
然后

这应该可以解决您的问题。

恩蒂


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 4月29日

    春季靴 Rest示例

    在本教程中,我们将看到如何使用Spring boot创建Restful Web服务。使用Spring 剩余JSON创建Rest API之间没有太多区别,我们之前已经看到过。 春季靴使得Rest API更容易。你不’不必在类路径中提供任何其他JSON依赖关系。春天[…]

  • 9月14日

    弹簧 休息+春季安全示例

    在本文中,我们将在Spring Rest示例中应用Spring Security。 Web服务教程:Web服务介绍Web服务访谈问题SOAP Web服务介绍RESTful Web服务介绍SOAP和REST Web服务之间的区别使用Eclipse的Java中的SOAP Web服务示例JAX-WS Web服务Eclipse教程JAX-WS […]

  • 8月19日

    弹簧 @RestController示例

    在本文中,我们将看到另一个名为@RestController的重要注释。通常在与Spring Restful Web服务实现一起使用时使用。 春季MVC教程:Spring MVC你好世界示例Spring MVC休眠MySQL示例Spring MVC拦截器示例Spring MVC angularjs示例Spring MVC @RequestMapping示例Spring Component,Service,Repository和Controller […]

  • 8月08

    春季MVC @RequestMapping注释示例

    我们已经看到了Spring MVC的hello世界示例。 @RequestMapping是在Spring MVC中使用的重要注释之一。 春季MVC教程:Spring MVC你好世界示例Spring MVC休眠MySQL示例Spring MVC拦截器示例Spring MVC angularjs示例Spring MVC @RequestMapping示例Spring Component,Service,Repository和Controller示例Spring MVC @ModelAttribute注解[…]

  • 8月06

    春季MVC angularjs示例

    在本教程中,我们将看到Spring MVC angularjs示例。 春季MVC教程:Spring MVC hello世界示例Spring MVC休眠MySQL示例Spring MVC拦截器示例Spring MVC angularjs示例Spring MVC @RequestMapping示例Spring Component,Service,Repository和Controller示例Spring MVC @ModelAttribute注释示例Spring MVC @RestController注释示例Spring MultiActionController春季示例[…]

  • 八月04

    春季休息ful Web服务XML示例

    这篇文章是Web服务教程(第-10部分)的继续。在本教程中,我们将看到Spring Restful Web服务xml示例。 Web服务教程内容:Web服务介绍Web服务访谈问题SOAP Web服务介绍RESTful Web服务介绍SOAP和REST Web服务之间的区别[…]

Comments

  1. 我已经在mysql中制作了数据库,并创建了hiberate.cfg,但是如何使用该项目访问数据库中的数据

    1. 罗希特(Hi Rohit),
      您需要配置mysql和休眠模式。我想你已经做到了。
      您还需要在数据库中创建一个表,如下所示,然后运行该应用程序。它应该工作。让我知道您是否仍然遇到任何问题。

      创建表格国家
      (
      ID 整型 主 键 不 空值 自动递增,
      国家的名字 varchar(100)NOT 空值,
      人口int 不 空值
      )
      ;

  2. 我已经实现了示例,我能够以json格式从数据库中获取数据,但是其他方法(如getById,addDetails,Update,delete)无效。状态500。请帮助我解决此问题

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇2博客