环境:

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实现)

    1 # -*- coding: utf-8 -*- # sum_of_products.py # @author 0yst3r # @description 两数之积及多数之积 # @created ...

  2. bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  3. 【python007 -分支和循环】

    一.打飞机游戏的实现逻辑: 加载背景音乐 播放背景音乐(设置单曲循环) 我方飞机诞生 interval = 0  #小飞机没诞生一个就会移动一个位置,那这样的话,会在屏幕出现密密麻麻的飞机,所以要加一 ...

  4. html的进一步了解(更新中···)

    (接上一次) 属性:表示事物的一些特征 属性又可分为两种: 标签属性和样式属性 两者的区别: 位置不一样 样式属性写在style中 标签属性写在标签内 写法不一样 样式属性是属性:属性值 标签属性是属 ...

  5. 获取当前的日期时间 格式“yyyy-MM-dd HH:MM:SS”

    function getNowFormatDate() {     var date = new Date();     var seperator1 = "-";     var ...

  6. 237. 程序自动分析 【map+并查集】

    程序自动分析 描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…x1,x2,x3,…代表程序中出现的变量,给定n个形 ...

  7. 算法总结(转自CS-Notes)

    转载地址: 注意要点: 1.希尔排序:实际是将元素按步距h分为几组,每组元素没有关系,是组里每个元素跨步距h得到的一组元素是有序的,那么剩下的问题就是组内有序,再处理好组间边界即可.实际解决的方式是不 ...

  8. Android Studio 快捷键、Debug的使用

    https://blog.csdn.net/q908555281/article/details/49331371 1.快捷键      个人习惯常用快捷键      在Eclipse中常用的快捷键 ...

  9. (zhuan) Where can I start with Deep Learning?

    Where can I start with Deep Learning? By Rotek Song, Deep Reinforcement Learning/Robotics/Computer V ...

  10. numa.h:No such file or directory 解决方法

    参考: numa.h:No such file or directory numa.h:No such file or directory 解决方法 Ubuntu: $ apt-get install ...