环境:

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. Overture 5入门之如何设置延音线

    延音线作为五线谱标记符合之一,是大家使用Overture时需要常用的一个基本标记符号.延音线是一条向上或向下弯曲的弧线,它的作用是将两个或两个以上的具有相同高音的音符来进行相连. 延音线作为再编曲演唱 ...

  2. Android灯光系统通知灯【转】

    本文转载自:https://blog.csdn.net/danwuxie/article/details/82193880 一.通知灯应用程序的编写 1.首先实现一个按钮功能 <LinearLa ...

  3. Visual Studio Code 的 launch.json 解析

    { "version": "0.2.0", "configurations": [ { "name": "(g ...

  4. aria2的下载配置

    aria2的命令行命令是: aria2c 一种方式: aria2c "http://host/file.zip" 如同wget 第二种方式: rpc server方式:

  5. (转)Jenkins持续集成

    (二期)14.持续集成工具jenkins [课程14]持续集...概念.xmind0.6MB [课程14]持续集成...kins.xmind43.3KB [课程14预习]持续...kins.xmind ...

  6. IDEA查看一个类的所有继承关系

    通常一个.java文件对应一个java类. 鼠标右击一个类: 即可查看.按住alt键可放大. 另一快捷键:光标在类名上,ctrl+H

  7. oracle 之 插入超长字段并包含&字符的处理方法

    oracle 在插入超长数据字符串时是默认转为varchar2类型,而这类型只有4000字节,即使通过oracle改变字符串类型为clob,也是在插入时默认转为varchar2类型. 处理方式:可以通 ...

  8. mybatis动态传入表名、列名

    原文:http://luoyu-ds.iteye.com/blog/1517607 要实现动态传入表名.列名,需要做如下修改 添加属性statementType=”STATEMENT” (可省略) 同 ...

  9. mathType换行等号对齐

    例如: 输入步骤: (1) (2) (3) (4) 事实上,[ctrl+;]表示的是插入了一个对齐标记符.

  10. List<Model>转String 、String 转List<string>

    var ltCode = from item in psw.VehicleInsuranceItem select item.Code; string code = string.Join(" ...