环境:

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

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

 <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency>

 <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <scope>runtime</scope>
 </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。

 spring.datasource.driver-class-name=com.mysql.jdbc.Driver
 spring.datasource.url=jdbc:mysql:///你的数据库名
 spring.datasource.username=你的用户名
 spring.datasource.password=你的密码
 spring.jpa.hibernate.ddl-auto=update
 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

spring boot ----> jpa连接和操作mysql数据库的更多相关文章

  1. Spring boot Jpa添加对象字段使用数据库默认值

    Spring boot Jpa添加对象字段使用数据库默认值 jpa做持久层框架,项目中数据库字段有默认值和非空约束,这样在保存对象是必须保存一个完整的对象,但在开发中我们往往只是先保存部分特殊的字段其 ...

  2. robot_framewok自动化测试--(9)连接并操作 MySql 数据库

    连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...

  3. pymysql连接和操作Mysql数据库

    pymysql 一.概要 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库, 二.PyMySQL 安装 pip install pymysql 三.操作流程 创建c ...

  4. php连接和操作mysql数据库

    <?php //数据库连接文件:link.php $link = mysql_connect("localhost", "root", "&qu ...

  5. Spring Boot程序插入时间和MySQL数据库显示时间不一样(设置数据库时区)

    首先查看数据库时区 show variables like "%time_zone%"; # 设置全局时区 mysql> set global time_zone = '+8 ...

  6. python3操作数据库 借助pycharm快速连接并操作mysql数据库

    1.https://blog.csdn.net/qiushi_1990/article/details/78041299

  7. Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  8. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

  9. Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)

    Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...

随机推荐

  1. Python中的对象行为与特殊方法(一)对象的创建与销毁

    Python中类调用__new__()类方法来创建实例,调用__init__()方法来初始化对象,对象的销毁则调用__del__()方法. __new__()方法第一个参数为类cls,通常返回cls的 ...

  2. topcoder srm 694 div1 -3

    1.给出$n$个数字,将其分成三个非空的组,每组的权值为该组所有数字的抑或.选择一种分法使得三组的权值和最大? 思路:记录前两组的权值且三组有没有数字时第三组的值.(当前两组的值知道时第三组的权值是确 ...

  3. SVM学习笔记2-拉格朗日对偶

    下面我们抛开1中的问题.介绍拉格朗日对偶.这一篇中的东西都是一些结论,没有证明. 假设我们有这样的问题:$min_{w}$ $f(w)$,使得满足:(1)$g_{i}(w)\leq 0,1\leq i ...

  4. Git学习笔记---安装与初始化 连接远程版本库

    1.Git的安装 sudo apt-get install git 用的是linux(ubuntu)系统,安装非常简单,上面一条命令就够了. 2.初次运行的配置 Git 提供了一个叫做 git con ...

  5. 【做题】51NOD1753 相似子串——哈希

    题意:两个字符串相似定义为: 1.两个字符串长度相等 2.两个字符串对应位置上至多有一个位置所对应的字符不相同 给定一个字符串\(s\),\(T\)次询问两个子串在给定的规则下是否相似.给定的规则指每 ...

  6. HDU 4576 Robot

    思路 概率dp 既然是求概率,顺推 显然有转移\(dp[i][j]=dp[i-1][j-w]/2+dp[i-1][w]/2\) 然后是环,注意特判一下 环上不要用取模处理循环的情况,会被卡常 代码 # ...

  7. p4168 [Violet]蒲公英(分块)

    区间众数的重题 和数列分块入门9双倍经验还是挺好的 然后开O2水过 好像有不带log的写法啊 之后在补就是咕咕咕 // luogu-judger-enable-o2 #include <cstd ...

  8. (转载)Windows下小狼毫输入法(Rime)的安装与配置(含导入搜狗词库)

    div id="cnblogs_post_body" class="blogpost-body"> 最近彻底烦透了搜狗拼音输入法的各种流氓行为,自动升级不 ...

  9. Js批量下载花瓣网及堆糖网专辑图片

    插件作者:SaintIC 文章地址:https://blog.saintic.com/blog/256.html 一.安装 1. 安装Tampermonkey扩展,不同浏览器的支持,参见官网:http ...

  10. java复制文件夹中的所有文件和文件夹到另一个文件夹中

    1.复制文件夹 public static void copyDir(String oldPath, String newPath) throws IOException { File file = ...