概念
JPA:
它用于在 Java 对象 和 关系数据库 之间 保存数据 。 JPA 充当面向对象的领域模型和关系数据库系统之间的桥梁。
由于 JPA 只是一个 规范 ,它 本身不执行任何操作 。 它需要一个实现 。 因此,像 Hibernate , TopLink 和 iBatis 这样的 ORM 工具实现了 JPA 数据持久性规范。
Hibernate:
Hibernate 是一个 开放源代码 的对象关系映射框架 ;
它将 POJO 与数据库表建立映射关系 ,是一个全自动的 orm 框架, hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。
ORM : object relational mapping , 是对象关系映射 的意思,用于 Java 语言里不同类型的系统之间的数据转换 。
Spring data :
用于 简化数据库访问 ,并支持云服务的开源框架。例如:可以 在几乎不写实现的情况下,实现对数据的访问和操作。除 了 crud ,还包括 分页 、 排序 等一些常用功能。
Spring data JPA: 是该框架的一个模块。
使用 spring boot jpa
步骤:
在pom.xml添加mysql,spring-data-jpa依赖;
在application.properties文件中配置mysql连接配置文件;
在application.properties文件中配置JPA配置信息;
编写测试用例;
1、在pom.xml添加mysql,spring-data-jpa依赖:
Mysql数据库驱动依赖包:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
Spring-data-jpa依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Idea 创建资源目录文件
https://blog.youkuaiyun.com/ycg33/article/details/82947718
2、在application.properties文件中配置mysql连接配置文件;
在application.properties文件中配置JPA配置信息
######################################################## ###datasource -- 配置 mysql 数据库连接信息 ######################################################## spring.datasource.url = jdbc:mysql://localhost:3306/test spring.datasource.username = root spring.datasource.password = root spring.datasource.driverClassName = com.mysql.jdbc.Driver spring.datasource.max-active = 20 spring.datasource.max-idle = 8 spring.datasource.min-idle = 8 spring.datasource.initial-size = 10 ######################################################## ### Java Persistence Api -- Spring 配置信息 ######################################################## # Specify the DBMS spring.jpa.database = MYSQL # Show or not log for each sql query spring.jpa.show-sql = true # Hibernate ddl auto (create, create-drop, update) spring.jpa.hibernate.ddl-auto = update # Naming strategy #[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy] spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy # stripped before adding them to the entity manager) spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
编写测试用例
(1) 创建实体类Demo,如果已经存在,可以忽略。
(2) 创建jpa repository类操作持久化(CrudRepository)。
(3) 创建service类。
(4) 创建restful请求类。
(5) 测试;
创建多级目录技巧:分别在上级目录com.renshou下创建 deom.bean和demo.service包
mysql数据库排序规则
https://blog.youkuaiyun.com/u011403848/article/details/81163311
utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。 utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会造成不良后果 utf8_bin:字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容
utf8_general_ci校对速度快,但准确度稍差。 utf8_unicode_ci准确度高,但校对速度稍慢。
用一句话概况上面这段话:utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性就够我们用的了,在我看过很多程序源码后,发现它们大多数也用的是utf8_general_ci,所以新建数据 库时一般选用utf8_general_ci就可以了
Idea自动导入对应的包: alt + enter 导入,使用enter来选择
具体程序
Cat.java
/**
* 如何持久化呢?
* 1、使用@Entity进行实体类的持久化操作,当JPA检测到我梦实体类有@Entity时,
* 会在数据库中生产对应的表结构信息
* 2、如何指定主键及主键的生产策略
*/
@Entity
public class Cat {
/**
* 使用@Id指定主键.
* 使用代码@GeneratedValue(strategy=GenerationType.AUTO)
* 指定主键的生成策略,mysql默认的是自增长。
*/
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;//主键
private String catName;//姓名
private int catAge;//年龄
//上面程序会自动创建对应的表
CatRepository.java
public interface CatRepository extends CrudRepository<Cat,Integer>{
}
CatService.java
@Service
public class CatService {
@Resource
private CatRepository catRepository;
/**save,update ,delete 方法需要绑定事务.
* 使用@Transactional进行事务的绑定.
* @param cat
*/
//保存数据.
@Transactional
public void save(Cat cat){
catRepository.save(cat);
}
//删除数据》
@Transactional
public void delete(int id){
catRepository.delete(id);
}
//查询数据.
public Iterable<Cat> getAll(){
return catRepository.findAll();
}
}
CatController.java
@RestController
@RequestMapping("/cat")
public class CatController {
//@resource相当于 @autowire 和 @quailfier 加起来的功能
@Resource
private CatService catService;
@RequestMapping("/save")
public String save(){
Cat cat = new Cat();
cat.setCatName("jack");
cat.setCatAge(3);
catService.save(cat);
return "save ok.";
}
上述 会 在表中自动插入数据
CrudRepository接口
CrudRepository 接口提供了最基本的对实体类的添删改查操作
--T save(T entity);//保存单个实体 --Iterable<T> save(Iterable<? extends T> entities);//保存集合 --T findOne(ID id);//根据id查找实体 --boolean exists(ID id);//根据id判断实体是否存在 --Iterable<T> findAll();//查询所有实体,不用或慎用! --long count();//查询实体数量 --void delete(ID id);//根据Id删除实体 --void delete(T entity);//删除一个实体 --void delete(Iterable<? extends T> entities);//删除一个实体的集合 --void deleteAll();//删除所有实体,不用或慎用!
-------------------------------------------
orm映射元数据:对象与数据库表的映射
方式:xml+注解
API:操作实体对象来执行curd
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("bafc_building_risk_level")
public class BafcBuildingRiskLevel extends Model<BafcBuildingRiskLevel> {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 楼栋编码
*/
@TableField("building_code")
private String buildingCode;
@TableField(exist = false)
private Integer riskLevelNumber;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("expect_arrive_time")
private Date expectArriveTime;
@Override
protected Serializable pkVal() {
return this.id;
}
}