SpringBoot(四)_Spring Data JPA的使用
JPA 绝对是简化数据库操作的一大利器。
概念
首先了解 JPA 是什么?
JPA(Java Persistence API)是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。
注意:JPA 是一套规范,不是一套产品,那么像 Hibernate、TopLink、JDO 它们是一套产品,如果说这些产品实现了这个 JPA 规范,那么就可以叫它们为 JPA 的实现产品。
实例操作
添加依赖
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>配置文件
application.yml
spring:
  profiles:
    active: dev
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbgirl?characterEncoding=utf8&useSSL=false
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true其实这个 hibernate.hbm2ddl.auto 参数的作用主要用于:自动创建 | 更新 | 验证数据库表结构,有四个值:
create:每次加载 hibernate 时都会删除上一次的生成的表,然后根据 model 类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
create-drop:每次加载 hibernate 时根据 model 类生成表,但是 sessionFactory 一关闭,表就自动删除。
update:最常用的属性,第一次加载 hibernate 时根据 model 类会自动建立起表的结构(前提是先建立好数据库),以后加载 hibernate 时根据 model 类自动更新表结构,即使表结构改变了,但表中的行仍然存在,不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
validate:每次加载 hibernate 时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
实体类和 Dao
@Entity
public class Girl  {
    @Id
    @GeneratedValue
    private int id;
    private String name;
    private int age;
    //添加无参构造
    public Girl() {
    }
    // get和set方法省略
}
Dao 只要继承 JpaRepository 类,不需要写方法
public interface GirlRepository extends JpaRepository<Girl,Integer> {
   
}GirlController类
@RestController
public class GirlController {
    @Resource
    private GirlRepository girlRepository;
    @GetMapping("/girls")
    public List<Girl> getList(){
       return girlRepository.findAll();
    }
    @PostMapping("/girls")
    public Girl girlAdd(@RequestParam("name") String name,
                          @RequestParam("age") int age){
        Girl girl = new Girl();
        girl.setAge(age);
        girl.setName(name);
        return  girlRepository.save(girl);
    }
    @GetMapping(value = "/girls/{id}")
    public  Girl find(@PathVariable(value = "id") Integer id){
        return girlRepository.findById(id).get();
    }
    @PostMapping(value = "/girls/{id}")
    public Girl update(@PathVariable(value = "id") Integer id,
                       @RequestParam("name") String name,
                       @RequestParam("age") int age){
        Girl girl = new Girl();
        girl.setId(id);
        girl.setAge(age);
        girl.setName(name);
        return girlRepository.save(girl);
    }
    @DeleteMapping(value = "/girls/{id}")
    public void  delete(@PathVariable(value = "id") Integer id){
        girlRepository.deleteById(id);
    }
    @GetMapping(value = "/girls/age/{age}")
    public List<Girl> findByAge(@PathVariable(value = "age") Integer age){
        return girlRepository.findByAge(age);
    }
}
注意:
- 数据库建库dbgirl
- 我使用的是springboot2.0.2版本,已经没有findOne 方法,使用findById(id).get() 来获得
- 测试大家可以使用谷歌浏览器插件Restlet Client - REST API Testing
- 源码下载:github
 关注公众号
关注公众号
					低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 
							
								
								    上一篇
								      Java 学习(02)--数据类型/类型转换/键盘录入Java 学习(02) 数据类型 1.在Java中针对整数常量提供了四种表现形式 A:二进制 由0,1组成。以 0b 开头。 B:八进制 由0,1,...7组成。以 0 开头。 C:十进制 由0,1,...9组成。整数默认是十进制。 D:十六进制 由0,1,...9,a,b,c,d,e,f(大小写均可)组成。以 0x 开头。 2.进制转换(了解) (1)其他进制到十进制 系数:就是每一个位上的数值 基数:x进制的基数就是x 权:对每一个位上的数据,从右,并且从0开始编号,对应的编号就是该数据的权。 结果:系数*基数^权次幂之和。 举例:16进制 0x4af转换成10进制 0x4af --转换10进制--> 15 + 10 * 16 + 4 * 16^2(2)十进制到其他进制 除基取余,直到商为0,余数反转。 3:变量(掌握) (1)定义:1.占据着内存中的某一个存储区域 ; 2.该区域有自己的名称(变量名)和类型(数据类型) ; 3.该区域的数据可以在同一类型范围内不断变化 ; (2)使用原因:用来不断的存放同一类型的常量,并可以重复使用; (3)变量的定... 
- 
							
								
								    下一篇
								      C# 多线程、控制线程数提高循环输出效率原文: C# 多线程、控制线程数提高循环输出效率 C#多线程及控制线程数量,对for循环输出效率。 虽然输出不规律,但是效率明显提高。 思路: 如果要删除1000条数据,只使用for循环,则一个接着一个输出。所以,把1000条数据分成seed段,每段10条数据。 int seed = Convert.ToInt32(createCount.Value) % 10 == 0 ? Convert.ToInt32(createCount.Value) / 10 : Convert.ToInt32(createCount.Value) / 10 + 1; 注:createCount.Value的值是具体输出数据的数量 这里把数据分配给seed个线程去处理,每个线程只输出10个数据。 int threadCountTmp = 0;//任务线程分派数 private void btnCreate_Click(object sender, EventArgs e) { int seed = Convert.ToInt32(createCount.Value) % 10 == 0 ? Conver... 
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- 面试大杂烩
- Red5直播服务器,属于Java语言的直播服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL表碎片整理

 
			 
				 
				 
				 
				 
				 
				 
				



 微信收款码
微信收款码 支付宝收款码
支付宝收款码