1 简介
DB2是IBM的一款优秀的关系型数据库,简单学习一下。
2 Docker安装DB2
为了快速启动,直接使用Docker来安装DB2。先下载镜像如下:
docker pull ibmcom/db2:11.5.0.0
启动数据库如下:
docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=pkslow -e DBNAME=testdb ibmcom/db2:11.5.0.0
这样获得的数据库,具体信息如下:
连接URL:jdbc:db2://localhost:50000/testdb
用户名:db2inst1
密码:pkslow
在IDEA上连接如下:
默认的Schema为DB2INST1
,测试SQL如下:
创建表:
CREATE TABLE EMPLOYEE_SALARY (DEPTNO CHAR(3) NOT NULL, DEPTNAME VARCHAR(36) NOT NULL, EMPNO CHAR(6) NOT NULL, SALARY DECIMAL(9,2) NOT NULL WITH DEFAULT);
插入数据:
INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('001', 'IT', '001322', 80000.00); INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('001', 'IT', '001323', 20000.00); INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('002', 'Architecture', '001324', 3220.00); INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('002', 'Architecture', '001325', 8000.00); INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('003', 'Front Office', '001326', 13320.00); INSERT INTO EMPLOYEE_SALARY (DEPTNO, DEPTNAME, EMPNO, SALARY) VALUES ('001', 'IT', '001327', 5433.00);
查询:
SELECT * FROM DB2INST1.EMPLOYEE_SALARY;
Spring Boot整合DB2
添加相关依赖:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.ibm.db2</groupId> <artifactId>jcc</artifactId> <version>11.5.0.0</version> </dependency> </dependencies>
配置相关属性:
server.port=8082 spring.datasource.url=jdbc:db2://localhost:50000/testdb spring.datasource.username=db2inst1 spring.datasource.password=pkslow spring.jpa.generate-ddl=true
创建Entity:
package com.pkslow.springboot.jpa.db2.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Data @AllArgsConstructor @NoArgsConstructor @Table(name = "EMPLOYEE", schema = "DB2INST1") public class Employee { @Id private Long id; private String name; }
创建Repository类用于操作数据库:
public interface EmployeeRepository extends CrudRepository<Employee, Long> { }
最后,写个方法测试一下:
@Configuration @Slf4j public class TestConfig { @Autowired private EmployeeRepository repository; @PostConstruct public void init() { Employee employee1 = new Employee(1L, "Larry Deng"); Employee employee2 = new Employee(2L, "LarryDpk"); Employee employee3 = new Employee(3L, "Pkslow"); repository.deleteAll(); repository.save(employee1); repository.save(employee2); repository.save(employee3); List<Employee> employees = StreamSupport.stream(repository.findAll().spliterator(), false) .collect(Collectors.toList()); employees.forEach(e -> log.info(e.toString())); } }
启动后,日志打印正常如下:
2022-02-28 23:26:22.476 INFO 60847 --- [ main] c.pkslow.springboot.jpa.db2.TestConfig : Employee(id=1, name=Larry Deng) 2022-02-28 23:26:22.476 INFO 60847 --- [ main] c.pkslow.springboot.jpa.db2.TestConfig : Employee(id=2, name=LarryDpk) 2022-02-28 23:26:22.476 INFO 60847 --- [ main] c.pkslow.springboot.jpa.db2.TestConfig : Employee(id=3, name=Pkslow)
表数据如下:
代码
代码请看GitHub: https://github.com/LarryDpk/pkslow-samples
References: