spring boot ----> jpa连接和操作mysql数据库
环境:
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数据库的更多相关文章
- Spring boot Jpa添加对象字段使用数据库默认值
Spring boot Jpa添加对象字段使用数据库默认值 jpa做持久层框架,项目中数据库字段有默认值和非空约束,这样在保存对象是必须保存一个完整的对象,但在开发中我们往往只是先保存部分特殊的字段其 ...
- robot_framewok自动化测试--(9)连接并操作 MySql 数据库
连接并操作 MySql 数据库 1.mysql数据库 1.1安装mysql数据库 请参考我的另一篇文章:MYSQL5.7下载安装图文教程 1.2.准备测试数据 请参考我的另一篇文章:Mysql基础教程 ...
- pymysql连接和操作Mysql数据库
pymysql 一.概要 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库, 二.PyMySQL 安装 pip install pymysql 三.操作流程 创建c ...
- php连接和操作mysql数据库
<?php //数据库连接文件:link.php $link = mysql_connect("localhost", "root", "&qu ...
- Spring Boot程序插入时间和MySQL数据库显示时间不一样(设置数据库时区)
首先查看数据库时区 show variables like "%time_zone%"; # 设置全局时区 mysql> set global time_zone = '+8 ...
- python3操作数据库 借助pycharm快速连接并操作mysql数据库
1.https://blog.csdn.net/qiushi_1990/article/details/78041299
- Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】
大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...
- Spring Boot+Jpa(MYSQL)做一个登陆注册系统(前后端数据库一站式编程)
Spring Boot最好的学习方法就是实战训练,今天我们用很短的时间启动我们第一个Spring Boot应用,并且连接我们的MySQL数据库. 我将假设读者为几乎零基础,在实战讲解中会渗透Sprin ...
随机推荐
- 计算多数的乘积(Python实现)
1 # -*- coding: utf-8 -*- # sum_of_products.py # @author 0yst3r # @description 两数之积及多数之积 # @created ...
- bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路
Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...
- 【python007 -分支和循环】
一.打飞机游戏的实现逻辑: 加载背景音乐 播放背景音乐(设置单曲循环) 我方飞机诞生 interval = 0 #小飞机没诞生一个就会移动一个位置,那这样的话,会在屏幕出现密密麻麻的飞机,所以要加一 ...
- html的进一步了解(更新中···)
(接上一次) 属性:表示事物的一些特征 属性又可分为两种: 标签属性和样式属性 两者的区别: 位置不一样 样式属性写在style中 标签属性写在标签内 写法不一样 样式属性是属性:属性值 标签属性是属 ...
- 获取当前的日期时间 格式“yyyy-MM-dd HH:MM:SS”
function getNowFormatDate() { var date = new Date(); var seperator1 = "-"; var ...
- 237. 程序自动分析 【map+并查集】
程序自动分析 描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…x1,x2,x3,…代表程序中出现的变量,给定n个形 ...
- 算法总结(转自CS-Notes)
转载地址: 注意要点: 1.希尔排序:实际是将元素按步距h分为几组,每组元素没有关系,是组里每个元素跨步距h得到的一组元素是有序的,那么剩下的问题就是组内有序,再处理好组间边界即可.实际解决的方式是不 ...
- Android Studio 快捷键、Debug的使用
https://blog.csdn.net/q908555281/article/details/49331371 1.快捷键 个人习惯常用快捷键 在Eclipse中常用的快捷键 ...
- (zhuan) Where can I start with Deep Learning?
Where can I start with Deep Learning? By Rotek Song, Deep Reinforcement Learning/Robotics/Computer V ...
- 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 ...