From 20928bf8984a642214da34c8ac35c4d66c1d35ab Mon Sep 17 00:00:00 2001 From: rslee Date: Thu, 26 May 2016 14:22:44 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[^]=20=E5=A2=9E=E5=8A=A0.classpath=20?= =?UTF-8?q?=E5=92=8C=20.project=E6=96=87=E4=BB=B6=E7=9A=84=E6=8E=92?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-jpa-demo/.gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-jpa-demo/.gitignore b/spring-jpa-demo/.gitignore index 2968993..eb410fe 100644 --- a/spring-jpa-demo/.gitignore +++ b/spring-jpa-demo/.gitignore @@ -2,4 +2,6 @@ /.settings/ /logs/ /work-ddt/ +.project +.classpath -- Gitee From e3d07a4a8ad8eb7f2f52aa0402469e6e3dde93cc Mon Sep 17 00:00:00 2001 From: rslee Date: Thu, 26 May 2016 14:26:55 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[+]=201.=E6=B7=BB=E5=8A=A0spring-test,?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=9F=BA=E4=BA=8Ejunit=E7=9A=84spring?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95=20=20=20=20=20=20=202.?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0CRUD=E5=AE=9E=E7=8E=B0=20=20=20=20=20=20=203.?= =?UTF-8?q?=E6=B7=BB=E5=8A=A03=E4=B8=AA=E6=96=B9=E6=B3=95=E7=9A=84?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-jpa-demo/pom.xml | 11 +++ .../spring/jpa/service/AccessLogService.java | 95 ++++++++++++++++++- .../jpa/service/AccessLogServiceImpl.java | 37 +++++++- .../jpa/service/AccessLogServiceTest.java | 60 ++++++++++++ 4 files changed, 197 insertions(+), 6 deletions(-) create mode 100644 spring-jpa-demo/src/test/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceTest.java diff --git a/spring-jpa-demo/pom.xml b/spring-jpa-demo/pom.xml index 65eab78..11eb440 100644 --- a/spring-jpa-demo/pom.xml +++ b/spring-jpa-demo/pom.xml @@ -131,6 +131,8 @@ ${spring.version} + + org.hibernate @@ -151,6 +153,15 @@ ${spring.version} + + + + org.springframework + spring-test + ${spring.version} + + + diff --git a/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogService.java b/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogService.java index 9a00995..dfc0c64 100644 --- a/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogService.java +++ b/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogService.java @@ -3,13 +3,19 @@ package cn.rslee.demo.spring.jpa.service; import java.util.List; import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; +import org.apache.cxf.jaxrs.ext.PATCH; +import org.springframework.data.domain.Page; + import cn.rslee.demo.spring.jpa.entity.AccessLog; /** @@ -23,25 +29,110 @@ import cn.rslee.demo.spring.jpa.entity.AccessLog; * **************************************************************************** * * + * 这个是基于jpa的CRUD实现 + * + * rest api 参考如下 + * + * GET /zoos:列出所有动物园 + * POST /zoos:新建一个动物园 + * GET /zoos/ID:获取某个指定动物园的信息 + * PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息) + * PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息) + * DELETE /zoos/ID:删除某个动物园 + * + * 返回信息参考: + * GET /collection:返回资源对象的列表(数组) + * GET /collection/resource:返回单个资源对象 + * POST /collection:返回新生成的资源对象 + * PUT /collection/resource:返回完整的资源对象 + * PATCH /collection/resource:返回完整的资源对象 + * DELETE /collection/resource:返回一个空文档 + * * @author rslee * @since 1.0 */ public interface AccessLogService { - + + /** + * 新增 + * @param log + * @return + * AccessLog + */ @POST @Path("/accesslog") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - public boolean save(AccessLog log); + public AccessLog create(AccessLog log); + /** + * 更新(全部) + * @param log + * @return + * AccessLog + */ + @PUT + @Path("/accesslog/{id}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AccessLog update(@PathParam("id") long id,AccessLog log); + + /** + * 更新(部分) + * @param log + * @return + * AccessLog + */ + @PATCH + @Path("/accesslog/{id}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + public AccessLog patchUpdate(@PathParam("id") long id,AccessLog log); + + + /** + * 读取所有 + * @return + * List + */ @GET @Path("/accesslogs") @Produces(MediaType.APPLICATION_JSON) List findAll(); + + /** + * 分页读取,访问格式为:/accesslogs/page?page=2&size=100 + * @return + * List + */ + @GET + @Path("/accesslogs/page") + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Produces(MediaType.APPLICATION_JSON) + Page findByPage(@FormParam("page") int page,@FormParam("size") int size); + + + /** + * 读取某个 + * @param id + * @return + * AccessLog + */ @GET @Path("/accesslog/{id}") @Produces(MediaType.APPLICATION_JSON) AccessLog get(@PathParam("id") long id); + + /** + * 删除 + * @param id + * @return + * AccessLog + */ + @DELETE + @Path("/accesslog/{id}") + @Produces(MediaType.APPLICATION_JSON) + AccessLog delete(@PathParam("id") long id); } diff --git a/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceImpl.java b/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceImpl.java index 22adca2..0b456ae 100644 --- a/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceImpl.java +++ b/spring-jpa-demo/src/main/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceImpl.java @@ -4,6 +4,8 @@ import java.util.List; import javax.annotation.Resource; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Component; import cn.rslee.demo.spring.jpa.entity.AccessLog; @@ -28,9 +30,23 @@ public class AccessLogServiceImpl implements AccessLogService { private AccessLogRepository accessLogRepository; @Override - public boolean save(AccessLog log) { - accessLogRepository.save(log); - return true; + public AccessLog create(AccessLog log) { + return accessLogRepository.save(log); + } + + @Override + public AccessLog update(long id, AccessLog log) { + return accessLogRepository.save(log); + } + + @Override + public AccessLog patchUpdate(long id, AccessLog log) { + AccessLog al = accessLogRepository.getOne(id); + if(al != null){ + al.setClientIp(log.getClientIp()); + accessLogRepository.save(al); + } + return al; } @Override @@ -42,6 +58,19 @@ public class AccessLogServiceImpl implements AccessLogService { public AccessLog get(long id) { return accessLogRepository.findOne(id); } - + + @Override + public Page findByPage(int page, int size) { + return accessLogRepository.findAll(new PageRequest(page,size)); + } + + @Override + public AccessLog delete(long id) { + AccessLog log = accessLogRepository.findOne(id); + if(log != null){ + accessLogRepository.delete(id); + } + return log; + } } diff --git a/spring-jpa-demo/src/test/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceTest.java b/spring-jpa-demo/src/test/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceTest.java new file mode 100644 index 0000000..e9a64ad --- /dev/null +++ b/spring-jpa-demo/src/test/java/cn/rslee/demo/spring/jpa/service/AccessLogServiceTest.java @@ -0,0 +1,60 @@ +package cn.rslee.demo.spring.jpa.service; + +import static org.junit.Assert.*; + +import java.util.Date; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.data.domain.Page; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import cn.rslee.demo.spring.jpa.entity.AccessLog; + +/** + * 描述: + * + *
HISTORY
+ * ****************************************************************************
+ *  ID   DATE                    PERSON          REASON
+ *  1    2016年5月26日         rslee               Create
+ * ****************************************************************************
+ * 
+ * @author rslee + * @since 1.0 + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration("/spring.xml") +public class AccessLogServiceTest { + + @Resource + AccessLogService accessLogService; + + @Test + public void testCreate() { + AccessLog log = new AccessLog("spring-jpa-demo","java","0.0.0.0","0.0.0.0","test.html","test.html",null,"rslee",new Date()); + AccessLog l = accessLogService.create(log); + assertNotNull(l); + } + + @Test + public void testFindByPage() { + Page page = accessLogService.findByPage(1, 10); + assertNotNull(page.getContent()); + assertEquals(page.getContent().size(), 10); + } + + @Test + public void testDelete() { + AccessLog log = new AccessLog("spring-jpa-demo","java","0.0.0.0","0.0.0.0","test.html","test.html",null,"rslee",new Date()); + AccessLog l = accessLogService.create(log); + assertNotNull(l); + assertNotNull(l.getId()); + accessLogService.delete(l.getId()); + assertNull(accessLogService.get(l.getId())); + } + +} -- Gitee