SpringBoot学习-支持JPA
来源:互联网 发布:桌面整洁 知乎 编辑:程序博客网 时间:2024/06/05 14:40
前面MyBaties玩的差不多了,因为新公司的项目用的是JPA,所以现在再来玩玩spring-data-jpa~
其实也是比较简单的,老规矩,首先是Maven配置
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-jpa --><dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId></dependency>
然后是在配置文件中的参数设置
#打印SQLspring.jpa.show-sql=truelogging.level.org.hibernate.type.descriptor.sql.BasicBinder = tracelogging.level.org.springframework.data=DEBUGspring.jpa.hibernate.ddl-auto=updatespring.jpa.database-platform=org.hibernate.dialect.MySQLDialect#数据源spring.datasource.url=jdbc:mysql://localhost:3306/testspring.datasource.username=rootspring.datasource.password=123456spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.hibernate.ddl-auto参数的作用主要用于:自动创建|更新|验证数据库表结构
validate 加载hibernate时,验证创建数据库表结构
create 每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop 加载hibernate时创建,退出是删除表结构
update 加载hibernate自动更新数据库结构
spring.jpa.database-platform参数是指定数据库方言
这样配置部分就完成了,再来瞅瞅怎么使用
文件目录:
User实体类:
package com.example.demo.entities;import org.hibernate.annotations.GenericGenerator;import org.springframework.data.annotation.CreatedDate;import org.springframework.data.annotation.LastModifiedDate;import javax.persistence.*;import java.util.Date;import static javax.persistence.GenerationType.TABLE;import static javax.persistence.TemporalType.TIMESTAMP;/** * Created by lean on 2017/9/18. */@Entity@Table(name = "tab_user")public class User { @Id @Column(name = "user_id") @GeneratedValue(strategy = TABLE, generator = "sequence_generator") @GenericGenerator( name = "sequence_generator", strategy = "org.hibernate.id.enhanced.TableGenerator", parameters = { @org.hibernate.annotations.Parameter(name = "segment_value", value = "user"), @org.hibernate.annotations.Parameter(name = "increment_size", value = "100"), @org.hibernate.annotations.Parameter(name = "optimizer", value = "pooled") }) private Long id; @Column(name = "user_name",nullable = false) private String name; @Column(name = "password",nullable = false) private String password; @CreatedDate @Temporal(TIMESTAMP) @Column(name = "create_time") private Date createTime = new Date(); @LastModifiedDate @Temporal(TIMESTAMP) @Column(name = "modified_date") protected Date modifiedDate; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getModifiedDate() { return modifiedDate; } public void setModifiedDate(Date modifiedDate) { this.modifiedDate = modifiedDate; }}
InitRepository初始数据层:(作为公用父类,可以放置一些通用查询方法)
package com.example.demo.repository;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.repository.NoRepositoryBean;import java.io.Serializable;/** * @param <T> Entity * @param <ID> ID * Created by lean on 2017/9/18. */@NoRepositoryBeanpublic interface InitRepository<T,ID extends Serializable> extends JpaRepository<T,ID>,JpaSpecificationExecutor<T> {}
UserRepository用户实体类对应数据层:
package com.example.demo.repository;import com.example.demo.entities.User;import org.springframework.data.jpa.domain.Specification;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.CrudRepository;import org.springframework.stereotype.Repository;import java.util.HashMap;import java.util.List;/** * Created by lean on 2017/9/18. */@Repositorypublic interface UserRepository extends InitRepository<User,Long> {}
接口:
package com.example.demo.service;import java.util.HashMap;/** * Created by lean on 2017/9/18. */public interface TestService { HashMap<String,Object> testQuery(HashMap<String, Object> request); HashMap<String,Object> testQueryOne(HashMap<String, Object> request);}
接口实现类:
package com.example.demo.service.impl;import com.example.demo.entities.User;import com.example.demo.repository.UserRepository;import com.example.demo.service.TestService;import com.example.demo.utils.DataTransUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.jpa.domain.Specification;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import org.springframework.util.StringUtils;import javax.persistence.criteria.CriteriaBuilder;import javax.persistence.criteria.CriteriaQuery;import javax.persistence.criteria.Predicate;import javax.persistence.criteria.Root;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * Created by lean on 2017/9/18. */@Servicepublic class TestServiceImpl implements TestService { @Autowired private UserRepository userRepository; @Override @Transactional(readOnly = true) public HashMap<String, Object> testQuery(HashMap<String, Object> request) { List<User> users = userRepository.findAll(new Specification<User>() { @Override public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) { List<Predicate> predicateList = new ArrayList<>(); predicateList.add(criteriaBuilder.equal(root.get("id"),request.get("id"))); String str = ""; if(request.get("name") != null){ str = String.valueOf(request.get("name")); } predicateList.add(criteriaBuilder.like(root.get("name"),"%"+str+"%")); criteriaQuery.where(predicateList.toArray(new Predicate[predicateList.size()])); return criteriaQuery.getRestriction(); } }); return DataTransUtil.returnData(users); } @Override public HashMap<String, Object> testQueryOne(HashMap<String, Object> request) { User user = userRepository.findOne(Long.valueOf(String.valueOf(request.get("id")))); return DataTransUtil.returnData(user); }}
工具类:
package com.example.demo.utils;import org.springframework.util.StringUtils;import java.util.HashMap;/** * Created by lean on 2017/9/18. */public class DataTransUtil { private static Integer defaultCode = 1; private static String defaultMessage = "succesful"; public static HashMap<String,Object> returnData(Integer code,String message,Object data){ HashMap<String,Object> map = new HashMap<>(); if(null != code){ map.put("code",code); }else{ map.put("code",defaultCode); } if(!StringUtils.isEmpty(message)){ map.put("message",message); }else{ map.put("message",defaultMessage); } map.put("data",data); return map; } public static HashMap<String,Object> returnData(Object data){ return returnData(null,null,data); }}
Controller层:
package com.example.demo.controller;import com.example.demo.service.TestService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;import static org.springframework.web.bind.annotation.RequestMethod.POST;//import static org.springframework.web.bind.annotation.RequestMethod.GET;/** * Created by lean on 2017/9/18. */@RestControllerpublic class InitController { @Autowired private TestService testService; @RequestMapping(value = "/test",method = {POST}) public HashMap<String,Object> initTest(@RequestBody HashMap<String,Object> request){ return testService.testQuery(request); }// @RequestMapping(value = "/queryOne",method = {POST}) @PostMapping(value = "queryOne") public HashMap<String,Object> testQueryOne(@RequestBody HashMap<String,Object> request){ return testService.testQueryOne(request); }}
具体的JPA和SpringData中的查询就不详细描述了,以后有兴趣再单独写个博客玩玩
运行结果:
注:
这里我使用的web测试工具是火狐的插件restclient,可以模仿http请求来访问服务器,有兴趣的可以自行百度用法
阅读全文
0 0
- SpringBoot学习-支持JPA
- springboot学习-JPA
- springboot- jpa mysql支持 每天进步百分之一
- SpringBoot 学习记录(三): jpa
- SpringBoot JPA学习概要总结
- springboot学习笔记(五) JPA
- SpringBoot学习-支持MyBaties
- SpringBoot学习-支持Jersey
- SpringBoot、JPA及MVC的学习
- Springboot学习笔记(三)JPA-Hibernate
- springboot学习笔记003(jpa)
- springboot jpa
- Springboot+Jpa
- springboot jpa
- springboot jpa
- 【系统学习SpringBoot】SpringBoot初遇Spring-Data-JPA
- SpringBoot学习:添加JSP支持
- springboot学习笔记(三):基于MySql数据库的JPA操作
- ndk读取文件夹下的文件列表
- live555 源码分析:简介
- ip获取归属地位置信息
- 项目管理基础名词
- n个数字中最多有多少不重叠的非空区间
- SpringBoot学习-支持JPA
- 素数对
- 指针函数 与 函数指针 以及 指针的指针 与 指向指针数组的指针 的区别
- No message found under code 'login.error' for locale 'zh'. 的解决办法
- #Java 核心技术卷一阅读笔记# 第八章 泛型程序设计
- js数字精度问题
- Btree索引和Hash索引
- 大数据架构师必读:常见的七种Hadoop和Spark项目案例
- 书单 | 做数据分析不得不看的书有哪些?