SpringBoot利用jpa连接MySQL数据库的方法
添加依赖
在pom文件中添加如下依赖
<!--添加Jpa依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--数据库链接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
配置数据库连接
在application.yml中添加数据库连接配置
# 应用服务 WEB 访问端口
server:
port: 8080
# 应用名称
spring:
application:
name: HelloSpringBoot
#数据库配置连接
datasource:
url: jdbc:mysql://127.0.0.1:3306/hello_jpa?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: "123456"
driver-class-name: com.mysql.cj.jdbc.Driver
jpa:
show-sql: true
配置上数据库的连接地址和账号密码
url: jdbc:mysql://127.0.0.1:3306/hello_jpa??useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
数据库连接地址
127.0.0.1表示本地
3306数据库端口号
hello_jpa数据库名称
useUnicode=true&characterEncoding=utf-8配置数据库连接使用UTF8编码
serverTimezone=Asia/Shanghai配置时间为北京时间
username 配置数据库名称 root
password 配置数据库密码 123456
driver-class-name 配置mysql的驱动 com.mysql.cj.jdbc.Driver
show-sql配置控制台是否打印访问数据库时的sql语句,配置为true,显示sql语句,方便调试。
启动项目,看到如下信息,表示数据库连接成功,如果显示错误,请查验是否数据库连接信息有错误。
创建测试数据库表
CREATE TABLE `jpa_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
`age` tinyint(4) NULL DEFAULT NULL COMMENT '年龄',
`gender` tinyint(4) NULL DEFAULT NULL COMMENT '性别0女 1男',
`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
Java代码部分
建实体类和Repository
jpa_user表对应实体类User
//引入lombok的getset注解,也可以不引入,自己写下面字段的对应getset方法
@Getter
@Setter
//注解此类为实体类
@Entity
//关联数据库表的名称
@Table(name = "jpa_user")
public class User {
//声明属性为主键
@Id
//指定主键生成策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column注解,设置属性关联的数据库表字段
// 注意:如果属性名和表字段名相同,可以不设置,比如这个实体类对应的所有字段就都是与数据库表字段相同的,都可以不设置Column注解
@Column(name = "id")
private Long id;
@Column(name = "username")
private String username;
@Column(name = "age")
private Integer age;
@Column(name = "gender")
private Integer gender;
@Column(name = "phone")
private String phone;
//驼峰命名法和数据库中的下划线字段是对应的
@Column(name = "access_card_number")
private String accessCardNumber;
}
创建UserRepository,数据库操作类
public interface UserRepository extends JpaRepository<User, Long> {
}
是的,这个接口没有定义方法,只要继承JpaRepository就可以,<User, Long>分别对应的要连接的实体类和主键类型。
JpaRepository内置好了基本的增删查改接口及排序和分页功能。
做个简单的代码测试
往数据库中插入数据
//insert into jpa_user (access_card_number, age, gender, phone, username) values (?, ?, ?, ?, ?)
User user = new User();
user.setUsername("test");
user.setPhone("13112345678");
user.setAge(18);
user.setGender(0);
user.setAccessCardNumber("ic_001");
userRepository.save(user);
根据主键id查找数据
//select * from jpa_user user where user.id=?
User user = userRepository.findById(id).orElse(null);
修改id为1的数据
//update jpa_user set access_card_number=?, age=?, gender=?, phone=?, username=? where id=?
User user = userRepository.findById(1L).orElse(null);
user.setPhone("13212345678");
userRepository.save(user);
删除id为1的数据
//update jpa_user set access_card_number=?, age=?, gender=?, phone=?, username=? where id=?
User user = userRepository.findById(1L).orElse(null);
user.setPhone("13212345678");
userRepository.save(user);
where语句与查找数据
在UserRepository中定义一个方法
//select * from jpa_user user where (user.age between ? and ?) and user.gender=?
List<User> findByAgeBetweenAndGender(int minAge, int maxAge, int gender);
在repository中我们可以自定义查找条件的方法
findBy前缀为查找实体数据,countBy前缀表示查找实体数量,deleteBy前缀为删除数据
这三种后面跟随的都是查找条件,多条件用and或or连接
比如上面的例子就是搜索(age between minAge and maxAge) and gender = gender
搜索条件支持定向查找,模糊查找,比较查找等等。
测试代码地址:HelloSpringBoot: SpringBoot测试项目
到此这篇关于SpringBoot利用jpa连接MySQL数据库的文章就介绍到这了,更多相关SpringBoot连接MySQL内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341