目录
前言
项目上最近遇到了需要数据同步的地方,已有项目代码是Java开发,于是可以继续用Java代码去实现数据同步,即使用Java去操作MySQL数据库。借此机会,正好整理下Java数据库操作开发内容。
我其实也不想写SQL直接操作数据库,那么就需要用到实体类。
基于如上需求,找AI问了下,给我推荐JPA,于是后续操作都是基于JPA实现。
一、JPA是什么?
JPA是Java Persistence API的缩写,是Java EE平台下用于对象持久化的一种标准规范。它提供了一系列方法和接口,使开发人员能够将Java对象映射到关系数据库中,并且能够对数据库进行增删改查操作。
通过使用JPA,开发人员可以更加方便地操作数据库,减少了开发和维护的工作量。JPA还支持面向对象的编程,提供了对关系数据库的对象化操作,使得开发人员能够以面向对象的方式组织和操作数据。
二、使用步骤
1.开发环境说明
我这里使用的是IntelliJ+maven
2.引入依赖
pom.xml添加mysql驱动、jpa
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version> <!-- 请使用适合您项目的版本号 -->
<scope>runtime</scope>
</dependency>
3.配置数据库连接
application.yml
spring:
datasource:
url: jdbc:mysql://192.168.1.100:3036/sysdb?useSSL=false&serverTimezone=UTC
username: root
password: test1234
jpa:
hibernate:
ddl-auto: validate
show-sql: true
4.实体类
@Entity
@Table(name = "user_info")
public class userInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId;
@Setter
@Getter
@Column(length = 128)
private String name;
@Setter
@Getter
@Column(length = 128)
private String code;
@Setter
@Getter
@Column(length = 1024)
private String password;
@Setter
@Getter
@Column(length = 64)
private String mobile;
@Setter
@Getter
@Column(length = 128)
private String email;
@Setter
@Getter
private LocalDateTime create_time;
}
相关规则说明:
1)mysql数据表命名规则一般是单词小写下划线分割,如user_info
2)实体类、字段命名则是userInfo、userId,JPA框架会自动解析为user_info、user_id去对应数据库表名、字段名,当然也可以通过给类、字段设置name属性指定实际的数据库表名、字段名
5.仓储类
@Repository
public interface UserRepository extends JpaRepository<userInfo, Long> {
userInfo findByUserId(String userId);
}
一个实体类会对应一个仓储类,用于数据操作的实现
如上findByUserId方法,也是JPA内置规则,findBy后的UserId,对应的userInfo类的userId字段,然后再对应到userId字段的数据库字段(user_id)
内置方法:
获取所有数据:userRepository.findAll();
按id查询数据:userRepository.findById(String id);
6.多个字段组合查询
@Query("SELECT u FROM userInfo u WHERE u.code = :code AND u.name = :name")
List<userInfo> findByCodeAndName(@Param("code") String code, @Param("name") String name);
如上,是要对用户表按照code和name一起AND查询,Query中SQL,userInfo即实体类名,u.code和u.name均为实体类字段名,然后再通过类名、字段名映射到数据表名、字段名,最终对应到实际数据的查询SQL。
7.数据更新
userInfo user=new userInfo();
// 相关赋值操作
userRepository.save(user);
如果涉及事务操作,则在方法上增加@Transactional
8.服务类
一般我们的业务会写在服务类,然后服务类根据业务需要调用仓储类的数据操作
而具体业务前端或webapi则直接调用服务类具体方法
9.其他注意
一开始部署到服务器发现,自动更新了已有数据表结构
后来查询发现,这个是可以配置的,安全起见在生产环境不要设置为自动额更新数据结构,完整配置见3.配置数据库连接
jpa:
hibernate:
ddl-auto: validate
三、总结
以上就是今天讲的关于java中使用JPA进行数据库操作相关的内容,希望可以帮助刚好也需要入门的小伙伴们,我们一起进步。