Java 实现数据接口操作
Spring Data JPA 是SpringData 的子模块,Spring Data JPA 的目标是大大简化了数据访问层代码的编写。作为使用者,我们只需编写自己的repository 接口即可,接口包含一定个性化的查询方法,Spring data JPA 可以实现自动实现查询方法。
JPA 默认使用hibernate 作为ORM 实现。
Hibernate 作为ORM 实现,一般使用Spring Data ,Hibernate 是一个开放源代码的对象关系映射框架,它对JDBC 进行了非常轻量级的对象封装,它将POJO 与数据库表建立映射关系,是一个全自动的orm 框架,hibernate 可以自动生成sql 语句,自动执行,使得开发者使用对象编程思维来操作数据库。
Mybatis 是一款优秀的持久层框架,它支持SQL,存储过程以及高级映射。
Mybatis 与 Spring Data JPA 的比较其实就是Hibernate 与 Mybatis 的比较:
框架 | MyBatis | Hibernate |
---|---|---|
基本概念、目标 | 能够灵活编写sql 语句,并将sql 的入参和查询结果映射成POJOs 的一个持久层框架 | 自动化更强、更加高级,省去sql 编写,通过面向对象的方式操作关系型数据库 |
抽象层 | 面向关系的 | 面向对象的 |
解决问题 | 解决数据的高效 | 解决计算机逻辑问题 |
Hibernate 的使用步骤:
1. 分析、抽象和归纳出系统中业务概念,并梳理出各个业务概念之间的关系 - 创建概念模型
2. 根据概念模型,进一步细化设计系统中的对象以及类的依赖关系 - 创建设计模型
3. 将设计好的类映射到数据库的表和字段配置好
4. hibernate 可以配置信息自动生成数据库表,此时可以集中去梳理一下表关系,观察一下表关系是否合理,并适当调整一下类和表的映射关系,重新生成表结构
MyBatis 的使用步骤:
1. 综合整个系统分析出系统需要存储的数据项目,并画出E-R 关系图,设计表结构
2. 根据上一步设计的表结构,创建数据库、表
3. 编写MyBatis的SQL 映射文件,POJO 以及数据库操作对应的接口方法
综上: MyBatis 更适合于面向关系(面向数据、面向过程)的系统设计方法,这样的系统称为”事务脚本“系统。
Hibernate 更适合于构建领域模型类的系统。
Java persistence api (JPA) , 是用来操作数据库层的。
步骤一:
完成pom.xml 文件和application.yml 文件。
pom.xml 文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
application.yml 文件
spring:
datasource:
url:jdbc:mysql://localhost:3306/testdemo?useUnicode=true&characterEncoding=utf-8
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
说明: ddl-auto: update 自动建表
show-sql: true 表示要在控制台打印sql
步骤二:
实体类
创建一个实体类
@Entity
@Data
@Table(name = "user")
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer usreId;
@Column(name = "user_name", length = 20)
private String userName;
@Column(name = "user_age", length = 10)
private String userAge;
}
说明: @Entity 表示实体,@Table 是表名, 如果不写就会生成类名小写的表。
@GeneratedValue(strategy = GenerationType.IDENTITY) 表示这是以id 字段并且逐渐自增。
@Column(name = "user_name", length = 20) 指明了表中的字段名称和大小
JpaRepository
写一个接口,继承JpaRepository,以实现增删改查的操作。
public interface UserRepository extends JpaRepository<User, Integer>{
}
一个主类实现运行效果
@SpringBootApplication
public class SpringJPAMain{
public static void main(String[] args){
SpringApplication.run(SpringJPAMain.class.args);
}
}
出现问题:
Caused by: java.sql.SQLException: Access denied for user xxx@xxx(using password: YES) 这样的报错,
在mysql 控制台中输入一下命令即可:
grant all privileges on *.* to 'root'@'%' with grant option
运行成功后,可以在控制台看到的信息:
Hibernate: create table user(id integer not null auto_increment, user_name varchar(50), user_age varchar(10), primary key(id) engine=Interger)
此时数据库会生成一个user 表,字段分别是 id (主键)、user_name、user_age
给表进行增查功能
代码是controller 中实现
@RestController
@RequestMapping("/user")
public class UserController{
@Autowired
private UserRepository userRepository;
@PostMappling("/insertUser")
public User insertUser(@RequestBody User user){
userRepository.save(user);
return user;
}
@GetMappling("/getUser/{id}")
public Optional<User> getUser(@PathVariable("id") Integer id){
Optional<User> user = userRepository.findById(id);
return user;
}
}
测试案例
发送一个post请求,增加一个user
{
"userName":"xiaoming",
"userAge":"20"
}
获取一个user 请求
http://localhost:8080/user/getUser/1