本文演示了springboot下,实用spring-data-jpa来实现crud操作,视图层采用freemarker
这里我们先把application.properties修改成application.yml 主流格式
内容也改成yml规范格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
server: port: 8888 context-path: / helloworld: spring boot\u4f60\u597d msyql: jdbcname: com.mysql.jdbc.driver dburl: jdbc:mysql: //localhost:3306/db_diary username: root password: 123456 spring: datasource: driver- class -name: com.mysql.jdbc.driver url: jdbc:mysql: //localhost:3306/db_book username: root password: passwd jpa: hibernate.ddl-auto: update show-sql: true |
yml格式有个注意点 冒号后面一定要加个空格
还有我们把context-path改成/方便开发应用
先写一个bookdao接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package com.hik.dao; import org.springframework.data.jpa.repository.jparepository; import com.hik.entity.book; /** * 图书dao接口 * @author jed * */ public interface bookdao extends jparepository<book, integer>{ } |
要求实现jparepository,jparepository是继承pagingandsortingrepository,pagingandsortingrepository是继承crudrepository。crudrepository实现了实体增删改查操作
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
108
109
110
111
112
113
114
115
|
/* * copyright 2008-2011 the original author or authors. * * licensed under the apache license, version 2.0 (the "license"); * you may not use this file except in compliance with the license. * you may obtain a copy of the license at * * http://www.apache.org/licenses/license-2.0 * * unless required by applicable law or agreed to in writing, software * distributed under the license is distributed on an "as is" basis, * without warranties or conditions of any kind, either express or implied. * see the license for the specific language governing permissions and * limitations under the license. */ package org.springframework.data.repository; import java.io.serializable; /** * interface for generic crud operations on a repository for a specific type. * * @author oliver gierke * @author eberhard wolff */ @norepositorybean public interface crudrepository<t, id extends serializable> extends repository<t, id> { /** * saves a given entity. use the returned instance for further operations as the save operation might have changed the * entity instance completely. * * @param entity * @return the saved entity */ <s extends t> s save(s entity); /** * saves all given entities. * * @param entities * @return the saved entities * @throws illegalargumentexception in case the given entity is {@literal null}. */ <s extends t> iterable<s> save(iterable<s> entities); /** * retrieves an entity by its id. * * @param id must not be {@literal null}. * @return the entity with the given id or {@literal null} if none found * @throws illegalargumentexception if {@code id} is {@literal null} */ t findone(id id); /** * returns whether an entity with the given id exists. * * @param id must not be {@literal null}. * @return true if an entity with the given id exists, {@literal false} otherwise * @throws illegalargumentexception if {@code id} is {@literal null} */ boolean exists(id id); /** * returns all instances of the type. * * @return all entities */ iterable<t> findall(); /** * returns all instances of the type with the given ids. * * @param ids * @return */ iterable<t> findall(iterable<id> ids); /** * returns the number of entities available. * * @return the number of entities */ long count(); /** * deletes the entity with the given id. * * @param id must not be {@literal null}. * @throws illegalargumentexception in case the given {@code id} is {@literal null} */ void delete(id id); /** * deletes a given entity. * * @param entity * @throws illegalargumentexception in case the given entity is {@literal null}. */ void delete(t entity); /** * deletes the given entities. * * @param entities * @throws illegalargumentexception in case the given {@link iterable} is {@literal null}. */ void delete(iterable<? extends t> entities); /** * deletes all entities managed by the repository. */ void deleteall(); } |
再写一个bookcontroller类
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
|
package com.hik.controller; import javax.annotation.resource; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.getmapping; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.servlet.modelandview; import com.hik.dao.bookdao; import com.hik.entity.book; /** * book控制类 * @author jed * */ @controller @requestmapping ( "/book" ) public class bookcontroller { @resource private bookdao bookdao; /** * 查询所有图书 * @return */ @requestmapping (value= "/list" ) public modelandview list() { modelandview mav = new modelandview (); mav.addobject( "booklist" , bookdao.findall()); mav.setviewname( "booklist" ); return mav; } /** * 添加图书 * @param book * @return */ @requestmapping (value= "/add" , method=requestmethod.post) public string add(book book) { bookdao.save(book); return "forward:/book/list" ; } @getmapping (value= "/preupdate/{id}" ) public modelandview preupdate( @pathvariable ( "id" ) integer id) { modelandview mav = new modelandview(); mav.addobject( "book" , bookdao.getone(id)); mav.setviewname( "bookupdate" ); return mav; } /** * 修改图书 * @param book * @return */ @postmapping (value= "/update" ) public string update(book book) { bookdao.save(book); return "forward:/book/list" ; } /** * 删除图书 * @param id * @return */ @requestmapping (value= "/delete" ,method = requestmethod.get) public string delete(integer id) { bookdao.delete(id); return "forward:/book/list" ; } } |
实现了 crud
这里的@getmapping(value="xxx") 类似 @requestmapping(value="xxx",method=requestmethod.get)
以及@postmapping(value="xxx") 类似 @requestmapping(value="xxx",method=requestmethod.post)
booklist.ftl 展示数据
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
|
<!doctype html> <html> <head> <meta charset= "utf-8" > <title>图书管理页面</title> </head> <body> <a href= "/bookadd.html" rel= "external nofollow" >添加图书</a> <table> <tr> <th>编号</th> <th>图书名称</th> <th>操作</th> </tr> <#list booklist as book> <tr> <td>${book.id}</td> <td>${book.bookname}</td> <td> <a href= "/book/preupdate/${book.id}" rel= "external nofollow" >修改</a> <a href= "/book/delete?id=${book.id}" rel= "external nofollow" >删除</a> </td> </tr> </#list> </table> </body> </html> |
bookadd.html 图书添加页面
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!doctype html> <html> <head> <meta charset= "utf-8" > <title>图书添加页面</title> </head> <body> <form action= "book/add" method= "post" > 图书名称:<input type= "text" name= "bookname" /><br/> <input type= "submit" value= "提交" /> </form> </body> </html> |
bookupdate.ftl图书修改页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<!doctype html> <html> <head> <meta charset= "utf-8" > <title>图书修改页面</title> </head> <body> <form action= "/book/update" method= "post" > <input type= "hidden" name= "id" value= "${book.id}" /> 图书名称:<input type= "text" name= "bookname" value= "${book.bookname}" /><br/> <input type= "submit" value= "提交" /> </form> </body> </html> |
浏览器请求:http://localhost:8888/book/list
进入:
点击 “添加图书”:
进入:
我们随便输入名称,点击“提交”,
选择刚才添加的测试图书,进行修改
转发执行到列表页面,然后点“修改”,
进入修改页面,修改下名称,点击“提交”,
选择测试图书,进行删除操作
再次转发到列表页面,我们点击“删除”,
删掉数据后,再次转发到列表页面;
ok完成!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://www.cnblogs.com/jedjia/p/CRUD.html