Springboot数据库访问JPA

本篇将介绍几种连接数据库的方式。首先我们今天使用JPA进行连接数据库进行测试。

首先我们先得安装一个数据库,我本机是使用虚拟机上进行安装docker,docker安装的mysql数据库。

docker安装

docker的安装直接参考官方文档:

docker常用的命令

我们可以查询命令https://docs.docker.com/engine/reference/commandline/docker/,也可以在docker里边输入docker help查询命令。

docker search  #从docker搜索镜像	Search the Docker Hub for images
docker pull #拉取镜像  Pull an image or a repository from a registry
#拉取的时候可以加上版本号,或者拉取最新的
docker ps #查看当前运行的镜像
docker ps -a #查看所有的,包括停止运行的
docker rename	#给容器修改名字  Rename a container
docker restart	#重启容器  Restart one or more containers
docker run	#创建容器Run a command in a new container
docker rm	#删除容器Remove one or more containers

docker 安装mysql

#拉取mysql
docker pull mysql
#创建容器
docker run -itd -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
#查看容器
docker ps

docker ps查看mysql

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c71ff8eff881 mysql “docker-entrypoint.s…” 40 hours ago Up 18 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql

命令创建数据库

命令登录mysql

docker exec -it mysql bash
#登录mysql
mysql -u root -p

操作数据库

#创建数据库
 create database dbname;
 #创建数据库test
 create database test; 
 #查看数据库
 show databases;
 #使用选择数据库
 use database; 
 use test;//Database changed

引入依赖

 <!--jpa-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <!--mysql驱动-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

yml配置

需要配置数据库连接信息以及jpa信息

server:
  port: 8812
spring:
  application:
    name: SpringbootJPA
  #配置数据库
  datasource:
    url: jdbc:mysql://数据库ip:3306/test
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
  jpa:
    hibernate:
      ddl-auto: update #更新或者创建数据表结构
      dialect: org.hibernate.dialect.MySQL8Dialect
    show-sql: true  #控制台显示SQL

创建实体类

package com.elite.springboot.Entity;

import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import javax.persistence.*;

//使用JPA注解配置映射关系
@Entity //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name = "user") //@Table,指定表明,不指定默认和类名字一样
@Getter
@Setter
@Data
public class User {
    @javax.persistence.Id
    @Id //这是一个主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
    private Integer id;
    @Column(name = "user_name", length = 50) //这是和数据表对应的一个列
    private String username;
    @Column(name = "age", length = 3) //这是和数据表对应的一个列
    private Integer age;
    @Column //省略默认列名就是属性名
    private String address;
}

创建一个接口UserDao来操作实体类对应的表

package com.elite.springboot.Dao;

import com.elite.springboot.Entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
 * 编写一个UserDao接口来操作实体类User对应的数据表
 */
@Repository
public interface UserDao extends JpaRepository<User,Integer> {
}

提供的核心接口源码

//查找所有的
List<T> findAll();

List<T> findAll(Sort var1);

List<T> findAllById(Iterable<ID> var1);

<S extends T> List<S> saveAll(Iterable<S> var1);

void deleteInBatch(Iterable<T> var1);

void deleteAllInBatch();
//根据ID获取
T getOne(ID var1);

<S extends T> List<S> findAll(Example<S> var1);

<S extends T> List<S> findAll(Example<S> var1, Sort var2);

应用启动类

package com.elite.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;


@SpringBootApplication
//需要扫描实体
@EntityScan("com.elite.springboot.Entity")
public class SpringbootJPA {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootJPA.class,args);
    }
}

测试CRUD

package com.elite.springboot;



import com.elite.springboot.Dao.UserDao;
import com.elite.springboot.Entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import javax.annotation.Resource;
import java.util.List;

/**
 * 测试User CRUD
 */
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class AppTest {

    @Resource
    private UserDao userDao;

    /**
     * 测试新增User
     * @throws Exception
     */
    @Test
    public void insertUser(){
        //select * from user
        //插入的sql日志:insert into user (address, age, user_name) values (?, ?, ?)
        User user = new User();
        user.setUsername("牛奶糖");
        user.setAge(22);
        user.setAddress("xx省市");
        User save = userDao.save(user);
    }

    /**
     * 更新User
     * @throws Exception
     */
    @Test
    public void updateUser() {
        //更新也是调用save方法
        //update user set address=?, age=?, user_name=? where id=?
        User user = new User();
        user.setUsername("牛奶糖");
        user.setId(1);
        user.setAge(24);
        user.setAddress("xx省市");
        userDao.save(user);
    }

    /**
     * 查询用户
     * @throws Exception
     */
    @Test
    public void getUser() {
        User user = userDao.getOne(1);
        System.out.println(user);

    }

    /**
     * 查询用户列表
     */
    @Test
    public void getUserList()  {
        //select user0_.id as id1_0_, user0_.address as address2_0_, user0_.age as age3_0_, user0_.user_name as user_nam4_0_ from user user0_
        List<User> userList = userDao.findAll();
        for (User user:userList){
            System.out.println(user);
        }
        //User(id=1, username=牛奶糖, age=24, address=xx省市)
        //User(id=2, username=tom, age=22, address=guangzhou)
    }
    /**
     * 删除用户
     */
    @Test
    public void DelUser()  {
        //delete from user where id=?
       userDao.deleteById(2);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘同学要加油呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值