环境:

centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23

1、引入jpa起步依赖和mysql驱动jar包

1 <dependency>
2       <groupId>org.springframework.boot</groupId>
3       <artifactId>spring-boot-starter-data-jpa</artifactId>
4 </dependency>
5
6 <dependency>
7         <groupId>mysql</groupId>
8         <artifactId>mysql-connector-java</artifactId>
9         <scope>runtime</scope>
10 </dependency>

Note:

引入spring-boot-starter-data-jpa,实际上该jar包的内容是这样的,包含4个文件:

关注一下pom.xml文件,内容是这样的:集合了各种依赖的jar包的gav。包含了spring-boot-starter, spring-boot-starter-aop, spring-boot-starter-jdbc, hibernate-core, hibernate-entitymanager, javax.transaction-api, spring-data-jpa, spring-aspects。

2、配置appliaction.properties 文件,主要是配置datasource和jpa。

1 spring.datasource.driver-class-name=com.mysql.jdbc.Driver2 spring.datasource.url=jdbc:mysql:///你的数据库名3 spring.datasource.username=你的用户名4 spring.datasource.password=你的密码5 spring.jpa.hibernate.ddl-auto=update6 spring.jpa.show-sql=true

3、定义一个接口,该接口继承JpaRepository接口,然后定义一个操作数据库的接口方法。在服务层通过@Autowired注解或者构造方法注入该接口就可以用来实现相关的业务逻辑。jpa用到的注解和有关的类在spring-data-jpa-1.11.12.jar和hibernate-jpa-2.1-api-1.0.0.final.jar中

4、最后启动main方法,main方法有注解@SpringBootApplication。

2018-10-03

可操作数据库

原生jdbc API、数据库连接池(c3p0,dbcp,druid等)、hibernate、jpa等。

jpa和hibernate的关系

jpa是规范,jpa是hibernate的抽象,而hibernate是jpa的实现。

jpa必知必会三个方面

①orm(xml和注解) ②API ③jpql

ORM(object-relational mapping) 对象关系映射。

ORM包括两个方面的内容:

①对象的状态映射成数据库的列

②通过对象查询

两种类型的注解

①逻辑方面的注解:从对象模型视图中描述实体模型,与领域模型和元数据的分类紧紧绑定在一起。

②物理方面的注解:和数据库具体的数据模型相关,处理表,列,约束和其它数据库级别的组件。

Persistence注解能使用在三个不同的位置:class,method,field

java type和jdbc type的转换???

java type ----> check通过----> jdbc type ----> jdbc driver

check不通过 ----> 抛出异常

常用注解,分jpa1.x和jpa2.x

jpa1.x

@Entity

@Id

注解@Entity和@Id组合可以创建和映射一个实体到数据库的表。

@GeneratedValue

@GenerateValue(strategy=GenerationType.AUTO)

注解@GenerateValue可以指定标识符生成器的生成策略。有4种,TABLE,  SEQUENCE,  IDENTITY,  AUTO,默认是AUTO。

identity适用于数据库支持自动增长。例如mysql。数据库表的id字段最终会有auto_increment的约束。

@Table

@Table(name="tableName", schema="schemaName")

注解@Table可以重命名默认的表名,还可以重命名数据库的schama(用于区分不同的表)和catalog

@Basic

@Basic(fetch=FetchType.LAZY)

注解@Basic表示该属性可以被持久化,也就是java type能与jdbc type对应转换。

fetch=FetchType.LAZY表示延迟加载。

@Lob

注解@Lob和@Basic,@Column一起使用。

lob(large object) 大对象;

clob(character large object) 字符大对象,包括char[],Character[],String。

blob(binary large object) 二进制大对象,包括byte[],Byte[],Serializable。

@Enumerated

注解@Enumerated(EnumType.ORDINAL),这是默认的enum类型,在数据库表中将被映射成Integer。可以设置成STRING。

@TableGenerator

@Column

@Conlumn(name="columnName")

注解@Column可以覆盖原来的column名字

注解@Column的属性:

String name() default ""; // 重命名column的名字
boolean unique() default false;
boolean nullable() default true; // 设置是否允许空值,默认是允许的,true
boolean insertable() default true;
boolean updatable() default true;
String columnDefinition() default "";  // 可以自定义column在数据库中的表现
String table() default "";
int length() default 255; // 指定类型为String, char[], or Character[]的长度
int precision() default 0;  // 和scale属性一起使用,可以指定数字的精度
int scale() default 0; // 和precision属性一起使用,可以指定数字的精度

@Temporal

@Temporal(TemporalType.TIMESTAMP)。

注解@Temporal有三种可映射时间类型:DATE,  TIME,  TIMESTAMP,它们是java.sql类型。

@Transient

注解@Transient可以把不需要被持久化的字段不用被持久化到数据库表

关系概念:

roles,directionality,cardinality,ordinality

single-valued association

source ----> target[one]

@ManyToOne

注解@ManyToOne属性:没有mappedBy,其他和注解@OneToOne属性一样

@JoinColumn

@JoinColumn(name="fk_name")

注解@JoinColumn表示A表的外键关联B表的主键,也就是指定关联的外键

@OneToOne

@OneToOne(mappedBy="attributeName", fetch=FetchType.LAZY) // 双向one-to-one映射时使用。

注解@OneToOne属性:

Class targetEntity() default void.class;
CascadeType[] cascade() default {}; // 5个可选的CascadeType数组元素:ALL,  PERSIST,  MERGE,  REMOVE,  REFRESH;
FetchType fetch() default FetchType.EAGER; // 两个可选的FetchType:LAZY,  EAGER;
boolean optional() default true;
String mappedBy() default "";

collection-valued association

@OneToMany

mappedBy="attributeName",该属性用于双向映射

注解@OneToMany属性:没有option,其他和注解@OneToOne属性一样

@ManyToMany

mappedBy="attributeName",该属性用于双向映射

注解@ManyToMany属性:没有option,其他和注解@OneToOne属性一样

@JoinTable

注解@JionTable和@ManyToMany结合使用,用于存储两张表的外键。

@Embeddable

注解@Embeddable用在类中,这个类没有唯一标识符,表示这个类可以被其他类重用。

@Embedded

注解@Embedded用在字段中,表示这个字段引用了@Embeddable注解的类。

@AttributeOverrides

@AttributeOverride

注解@AttributeOverrides可以嵌套注解@AttributeOverride,覆盖默认的字段。

jpa2.x

@Access

access mode 访问模式,指的是对象状态的访问方式。它有两种注解方式,一种是在字段上注解,此种方法可以通过反射的方法访问到field;一种是在getter方法上注解,此种方式是直接调用getter和setter方法访问field。它们可以被进一步定义为feild access和property access。对于property access,规定getter方法的返回类型要跟setter方法传入的参数的类型一致;getter方法的访问修饰符必须是public或者protect;注解必须在getter方法上。如果使用property access方式,那么映射到数据库中的列将取决于getter和setter方法后面的名词。

@ElementCollection

@CollectionTable

@OrderColumn

@MapKeyColumn

@MapKeyEnumerated

@MapKeyTemporal

@MapKeyJoinColumn

@MapKeyClass

转载于:https://www.cnblogs.com/mrray1105/p/9466193.html

spring boot ---- jpa连接和操作mysql数据库相关推荐

  1. JAVA通过JDBC连接并操作MySQL数据库

    JAVA通过JDBC连接并操作MySQL数据库 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提 ...

  2. mac 黑窗口连接mysql_python操作mysql数据库

    python操作mysql数据库 Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库 ...

  3. jpa 连接多个mysql 数据库_SpringBoot 连接多个数据库

    这里我们假设大家已经熟悉 SpringBoot + JPA 连接单个数据库的开发.如果不熟悉,可以参考:Spring Boot 使用数据库 Pom 依赖和但数据库没有区别,照常引入. JAP 的 En ...

  4. c语言mysql自动重连接_c++操作mysql数据库

    就拿查询MySQL获取结果集并在页面上显示数据为例来分析. HTTP请求由C级别的程序比如Apache/Nginx处理(Java的HTTP服务用的是Java开发的Tomcat等), PHP则调用内置在 ...

  5. VS2010环境下用c++语言在MFC对话框程序中连接及操作Mysql 数据库

    小编近来由于工作需要,需要折腾一下MySql据库, 由于以前用的数据库不是 MySql, 也不是在 VS2010 , 更不是在 MFC 中连接数据库.所以还颇费了一番周折才实现了把数据插入到数据库表格 ...

  6. jpa 连接多个mysql 数据库_springboot环境jpa配置多个数据源流程

    一 简介 开发过程中,我们都需要和数据库打交道,小项目一个数据库就可以,代码也比较简单,只要连接一个数据库,本文中,由于业务需求,我们需要连接另一个库去查询数据,因此要对旧版本(只实现连接一个库的jp ...

  7. 使用Spring JDBC框架连接并操作数据库

    在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作 ...

  8. Spring Data JPA多表操作(5)

    Spring Data JPA多表操作(5) 数据库中多表之间的关系 多对多 一对多 一对一 一对多示例 数据库设计示例 实体示例 客户:指的是一家公司,我们记为A. 联系人:指的是A公司中的员工. ...

  9. linux shell操作mysql,Linux shell操作mysql数据库的方法

    摘要 腾兴网为您分享:Linux shell操作mysql数据库的方法,鱼乐贝贝,宜信,嘻嘻动漫,西餐菜谱等软件知识,以及包装效果图,德州人社,evasi0n.com,ios迅雷,民革e家,动态表情, ...

最新文章

  1. mysql 错误:1166 解决办法
  2. Ecplise中怎样导入Maven项目
  3. XML 和 HTML中常用的转义字符
  4. [组件] TopN 排行榜
  5. 根据select不同的选项实现相应input框添加项的显示
  6. python文本聚类分析_python机器学习kmeans算法——对文本进行聚类分析
  7. win7系统怎么打开屏幕键盘
  8. React Native工程修改Android包名
  9. asterisk 常用命令
  10. 【2012百度之星资格赛】J:百度的新大厦
  11. 光流(三)--LK算法改进(金字塔LK)
  12. 高三计算机专业vb试题二答案,高三计算机专业VB试题(二)
  13. Java入门视频教程
  14. chrome浏览器恢复书签方法
  15. 英语读音(一) English Pronounciation
  16. 如何在windows下运用dd来下修复坏块?
  17. XV6 RISCV 源码阅读报告之 进程调度
  18. 回看共识层进化规律,“POS+”也许是公链后期发展的出路
  19. C++:应用有限差分法求解 稳平流扩散方程 v*ux-k*uxx=0 in 一个空间维度,具有恒定的速度 v 和扩散系数 k(附完整源码)
  20. 嗨!Java Coder,考考你们看代码的眼力

热门文章

  1. Ubuntu 16.04 LTS 安装Mongodb 3.4
  2. [leetcode-83-Remove Duplicates from Sorted List]
  3. 一句话让你明白伪元素和伪类的区别
  4. Linq-插入insert
  5. 环形二维数组求最大子矩阵
  6. 批量生产insert 或者update语句
  7. java Hello World程序分析(翻译自Java Tutorials)
  8. Word 2003快速输入技巧
  9. Spring MVC 使用优化建议
  10. L3-011 直捣黄龙 (30 分)-PAT 团体程序设计天梯赛 GPLT