陈老老老板🦸 👨💻本文专栏:国产数据库-人大金仓(kingbase8)(主要讲一些人大金仓数据库相关的内容)
👨💻本文简述:本文讲一下Jpa框架整合人大金仓数据库,超级详细。
👨💻上一篇文章:这是本专栏的第一篇文章,之后会不断进行补充。
👨💻有任何问题,都可以私聊我,我能帮得上的一定帮忙,感谢大佬们支持。
🦹我认为人人都可以学好编程,我愿意成为你的领路人!(需内推私聊)
一、人大金仓数据库简介
1.人大金仓是成立最早的拥有自主知识产权的国产数据库企业,以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。
2.KingbaseES是一款面向大规模并发交易处理的企业级关系型数据库。 该产品支持严格的ACID特性、结合多核架构的超凡性能、健全完善的安全标准,以及完备的高可用方案,并提供可覆盖迁移、开发及运维管理全使用周期的智能便捷工具。产品融合了人大金仓在数据库领域几十年的产品研发和企业级应用经验,可满足各行业用户多种场景的数据处理需求。
特性:
迁移开发 简单高效
高度容错 稳定可靠
性能强劲 表现出众
系统自治 简单易用
纵深防御 确保安全
全面兼容 深度适配
二、JPA整合人大金仓
说明:本篇使用的是SpringBoot框架+JPA+人大金仓的整合。如果想要案例,可以直接去我的下载资源中进行下载。
项目运行环境:
idea2020.2
V8
jdk1.8
springboot 2.3.12.RELEASE
1、创建项目
说明:其实创建项目可以省略的,但是还是给大家展示出来吧。详细的步骤就不啰嗦了。
选择组件就选lombok就OK了。其实我项目中使用的是springboot2.3.12.RELEASE
,因为适配用,非常的稳定。大家自己改用项目版本就可以了。
2、创建与模式对应用户
说明:模式就是类似于MySQL的数据库,模式下面在创建表就类似于MySQL的表
。创建与模式同名的用户(先创建用户在创建模式),用户名:oa_manager,密码:123456
设置权限,全选就可以,必须要有创建修改表的权限,否则用此用户连接数据库,通过JPA创建表的时候会因为没有权限报错。
3.创建模式
说明: 创建oa_manager模式。这样用oa_manager用户登录就可以直接连上该模式不需要指定模式。
4.创建表
说明: 创建all_user表,创建id,Integer类型,不能为空,自增。name,varchar类型,可以为空,非自增。不用插入数据,之后用JPA添加即可。
5.项目中添加坐标
说明:这里需要自己先引入与Kingbase8整合的驱动jar包,Hibernate-4下载地址:官网下载地址,
kingbase8-8.6.0.jar下载地址:官网下载地址
jar包放入的位置,要与我的一致否则有可能找不到jar。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--kingbase8.jdbc-->
<dependency>
<groupId>com.kingbase8.jdbc</groupId>
<artifactId>kingbase8</artifactId>
<version>8.6.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/libs/kingbase8-8.6.0.jar</systemPath>
</dependency>
<!--hibinate-4-->
<dependency>
<groupId>hibernate-4</groupId>
<artifactId>hibernate-4</artifactId>
<version>4</version>
<scope>system</scope>
<systemPath>${pom.basedir}/libs/hibernate-4.dialect.jar</systemPath>
</dependency>
</dependencies>
6.编写配置文件
说明:这里提供的是yml版,想连接并且谢sql不需要使用模式名.表名
,就要先创建该模式的同名用户,并用该用户进行连接。
yml版
spring:
datasource:
driver-class-name: com.kingbase8.Driver
# 这里需要指定连接的数据库 test
url: jdbc:kingbase8://localhost:54321/test
# 这里需要创建和你模式名相同的用户,这样才能指定到这个模式
username: oa_manager
password: 123456
jpa:
open-in-view: false
# 是否在控制台展示sql
show-sql: true
# 如果实体类中添加新字段,或者没有表 创建新的表
hibernate:
ddl-auto: none
properties:
# hibernate方言:就是对应数据库,在根据对应的数据库进行自动实现sql
hibernate.dialect: org.hibernate.dialect.Kingbase8Dialect
# 自动生成的sql中from对应的表
hibernate.default_schema: oa_manager
# 控制台的sql 进行格式化
hibernate.format_sql: true
# 控制台可以看到JDBC运行时间
hibernate.generate_statistics: true
# 是否显示注释,用以指出什么操作产生的 SQL 语句
hibernate.use_sql_comments: true
7.编写实体类
说明:用过JPA的应该了解,可以直接通过实体类,在启动项目的时候就会生成模式的表(类似于mysql中数据库中的表)。但是这里在配置类中关闭了此项功能,容易出现bug,而且并不好解决,与版本适配有关。结构大家看图去建就可以了。
@Entity
@Data
@Table(name = "all_user")
public class AllUser {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "name")
private String name;
}
模板样图:
8.编写Repository类
说明:这里原生Sql,与JPQL与自动生成sql都用了,这样更容易区分。
@Repository
public interface UserRepository extends PagingAndSortingRepository<AllUser,Integer> {
// 这里使用的原生sql 所以from后面的是数据库中的表名 where后是表中字段名
@Query(value = "select * from all_user where name = :name",
nativeQuery = true)
List<AllUser> selectall(String name);
@Modifying
@Transactional
// 这里使用的是JPQL 这里使用的是类名 条件是类中的变量名
@Query("update AllUser set name = :name where id = :id")
void update(@Param("name")String name,@Param("id") Integer id);
}
模板样图:
9.编写测试类
说明:增删改查都有,先save在update,看结果通过数据库或者select查都可以。
@SpringBootTest
class Kingbase8ApplicationTests {
@Autowired
private UserRepository userRepository;
/**
* 添加 jpa自动方法save
*/
@Test
public void save(){
AllUser user = new AllUser();
user.setName("abc");
userRepository.save(user);
Iterable<AllUser> users = userRepository.findAll();
System.out.println(users);
}
/**
* 修改操作 自定义的JPQL
*/
@Test
public void update(){
userRepository.update("陈老老老板",1);
Iterable<AllUser> users = userRepository.findAll();
System.out.println(users);
}
/**
* 使用kingbase原生sql 进行的select
*/
@Test
public void select(){
List<AllUser> select = userRepository.selectall("abc");
System.out.println(select);
}
/**
* 删除 jpa自动方法delete
*/
@Test
public void delete(){
AllUser user = new AllUser();
user.setId(1);
userRepository.delete(user);
Iterable<AllUser> users = userRepository.findAll();
System.out.println(users);
}
}
成功示例:
oooooook了,超级简单,超级详细,有问题私聊我。
总结:国产化是一个不可避免的趋势,整合国产数据库是必须要掌握的一步。希望对您有帮助,感谢阅读
结束语:裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。
勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。