Ubuntu配置Ngbatis学习环境

news2024/12/24 9:53:45

引言

经过考虑,我感觉与NebulaGraph交互的ORM框架还是Ngbatis好。因为现在这个框架开发的比较完善,而且还在不断更新,社区活跃的用户多。从今日开始学习,首先要配置一下环境。

1.安装maven和jdk

选择的版本是maven3.8和jdk17.以下是安装步骤:

#安装jdk17
sudo apt install openjdk-17-jdk

nano ~/.bashrc


# 在文件末尾添加以下内容
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

#使得环境生效
source ~/.bashrc

#验证
echo $JAVA_HOME
java -version


#2.安装maven3.8.8
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

#-C后换成自己想安的路径  /opt只是个示例。
sudo tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt

#3.创建符号链接
sudo ln -s /opt/apache-maven-3.8.8 /opt/maven

#4.配置环境变量
sudo nano /etc/profile.d/maven.sh

#在文件添加以下内容
export M2_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}

#使得环境生效
source /etc/profile.d/maven.sh

#5.验证是否安装成功
mvn -v

(1)接下来maven仓库设置一下,

settings.xml 文件中,添加或修改 localRepository 元素,例如:


  <localRepository>/path/to/your/local/repo</localRepository>


运行以下命令验证Maven 是否使用了新的本地仓库路径

mvn help:evaluate -Dexpression=settings.localRepository

结果:

(2)设置国内阿里云镜像(160行附近)

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

(3)配置jdk17版本项目构建(260行附近)

<profile>
    <id>jdk-17</id>
    <activation>
      <activeByDefault>true</activeByDefault>
      <jdk>17</jdk>
    </activation>
    <properties>
      <maven.compiler.source>17</maven.compiler.source>
      <maven.compiler.target>17</maven.compiler.target>
      <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
    </properties>
</profile>

(4)IDEA配置本地Maven

我的Maven地址后来改成了/home/kg.IDEA我安装的是社区版。

2.Ngbatis具体环境配置

1.NebulaGraph 中创建的 Schema

要先进入控制台

#创建标签
CREATE tag `person` (
  `name` string NULL  , 
  `gender` string NULL  , 
  `age` int NULL  , 
  `birthday` date NULL  
);

#创建边类型
CREATE edge `like` (`likeness` double NULL  );


-- 为查询创建索引
CREATE TAG INDEX `i_person_name_age` on `person`(`name`(50), `age`);
CREATE TAG INDEX `i_person_name` on `person`(`name`(50));

#插入person节点数据
INSERT VERTEX person(name, gender, age, birthday) VALUES "1":("zhangsan", "男", 18, date("1999-02-02"));

2.后端配置

(1)先创建一个项目

groupId写错了,请改成com.ngbatis

(2)相关依赖包pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.7</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.ngbatis</groupId>
    <artifactId>Ngbatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>


        <!-- Spring Boot Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>


        <!-- Ngbatis -->
        <dependency>
            <groupId>org.nebula-contrib</groupId>
            <artifactId>ngbatis</artifactId>
            <version>1.2.2-jdk17</version>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

(3)项目配置(application.yaml)

我的NebulaGraph数据库放在另一台虚拟机上

# server配置
server:
  port: 8081
  servlet:
    context-path: /

nebula:
  ngbatis:
    # ^v1.1.2
    # 连接使用 nebula-java 中的 SessionPool
    session-life-length: 300000
    check-fixed-rate: 300000
    use-session-pool: true
  # 填入 graphd 的 ip 和端口号,下面仅供参考
  hosts: 192.168.145.138:9669
  # 连接图数据库所用的用户名
  username: root
  # 连接图数据库所用的密码
  password: nebula
  # 所要连接的图数据库图空间名
  space: my_space
  # 连接池配置
  pool-config:
    # 连接池中最小空闲连接数
    min-conns-size: 0
    # 连接池中最大空闲连接数
    max-conns-size: 10
    # 客户端同服务端建立连接的超时时间设置,单位为 ms;超过设定时间未建立起连接,则报错
    timeout: 6000
    # 连接空闲时间,为 0 表示连接永不删除,单位为 ms
    idle-time: 0
    # 连接池检测空闲连接的时间间隔,为 -1 表示不进行检测
    interval-idle: -1
    # 连接等候时间,超过则不再等候连接
    wait-time: 6000
    # 集群允许最小的服务可用率,1.0 表示为所有机器 graphd 可用,0.25 表示集群中 1/4 机器可用即可
    min-cluster-health-rate: 1.0
    # 是否允许 SSL 连接,目前暂不支持
    enable-ssl: true


(4)实体类Person

package com.ngbatis.entity;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
import lombok.Data;

@Data
@Table(name = "person")
public class Person {
    @Id
    private String name;

    /** use @Column to declare field's schema name in database */
    @Column(name = "gender")
    private String gender;
    private Integer age;
    private Date birthday;

    /** use @Transient to declare a field which is not exists in database */
    @Transient
    private String fieldDbNotExists;
}

(4)PersonDao

package com.ngbatis.mapper;

import com.ngbatis.entity.Person;
import org.nebula.contrib.ngbatis.proxy.NebulaDaoBasic;

import java.util.List;

public interface PersonDao extends NebulaDaoBasic<Person, String> {

    public List<Person> selectAll();
}

(5)PersonDao.xml

<mapper namespace="com.ngbatis.mapper.PersonDao">

    <selcet id="selectAll" resultType="com.ngbatis.entity.Person">
        match (n:person) return n limit 10;
    </selcet>
</mapper>

(6)PersonController

package com.ngbatis.controller;

import com.ngbatis.entity.Person;
import com.ngbatis.mapper.PersonDao;
import com.ngbatis.service.PersonService;
import com.ngbatis.service.impl.PersonServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

@RestController
@RequestMapping("/person")
public class PersonController {

  

    @Autowired
    private PersonDao personDao;


    @GetMapping("select")
    public HashMap<String, Object>  selectById() {
        List<Person> people = personDao.selectAll();
        System.out.println(people);
        return new HashMap<String, Object>() {{
            put("code", 200);
        }};
    }
}

(7)启动类(SpringbootApplication)

package com.ngbatis;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(
		exclude = { DataSourceAutoConfiguration.class },
		scanBasePackages = { "org.nebula.contrib.ngbatis", "com.ngbatis" }
)
public class SpringbootApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringbootApplication.class, args);
	}
}

3.结果

前两次还没插入数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iPhone可运行的谷歌Gemma 2 2B模型,性能超GPT-3.5

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

关于inet_addr()中的参数不能是 sring类型的 只能是 string类型变量.c_str()

源码展示&#xff1a; extern in_addr_t inet_addr (const char *__cp) __THROW inet_addr中的参数是const char *类型的 定义一个string 类型的ip 使用这个inet_addr()接口 local.sin_addr.s_addr inet_addr(ip_.c_str()); local.sin_addr.s_addr inet_addr(&ip_);…

ELK对业务日志进行收集

ELK对业务日志进行收集 下载httpd 进到文件设置收集httpd的文件进行 设置 编辑内容 用于收集日志的内容 将日志的内容发送到实例当中 input {file{path > /etc/httpd/logs/access_logtype > "access"start_position > "beginning"}file{path &g…

基于SpringBoot+Vue的健身俱乐部网站(带1w+文档)

基于SpringBootVue的健身俱乐部网站(带1w文档) 基于SpringBootVue的健身俱乐部网站(带1w文档) 该系统采用java技术&#xff0c;结合ssm框架使页面更加完善&#xff0c;后台使用MySQL数据库进行数据存储。系统主要分为三大模块&#xff1a;即管理员模块和用户模块、教练模块。本…

openstack之nova-conductor工作原理及常见问题处理

openstack之nova-conductor工作原理及常见问题处理 这里写目录标题 openstack之nova-conductor工作原理及常见问题处理一、简介1. 概念2. 作用3. 体系结构 二、组件1. nova-api2. nova-scheduler3. nova-compute4. nova-conductor5. nova-api-metadata6. nova-placement-api7. …

Java AI伪原创视频创作视频提取文案改写去水印系统小程序源码

&#x1f525;AI赋能创作新纪元&#xff01;伪原创视频文案提取改写去水印全能系统大揭秘 &#x1f680; 开篇&#xff1a;创意无界&#xff0c;AI来助力 在这个视觉盛行的时代&#xff0c;视频创作成为了表达自我、传递信息的重要方式。但你是否曾为寻找灵感、撰写文案、处理…

SD-WAN的两种方案及其价值

SD-WAN&#xff08;软件定义广域网&#xff09;作为一种新兴的网络架构解决方案&#xff0c;给企业网络带来了极大的灵活性和可扩展性。它允许企业以更低的成本将广泛分布的分支机构连接到数据中心或其他分支机构&#xff0c;同时还能优化网络性能和用户体验。 SD-WAN的工作原理…

C语言之“文件操作”

文章目录 1. 什么是文件&#xff1f;&#xff08;1. 为什么使用文件&#xff1f;&#xff08;2.什么是文件2.1 程序文件2.2 数据文件2.3 文件名 2. 二进制文件和文本文件&#xff1f;3. 文件的打开和关闭3.1 流和标准流3.2 文件指针(用来管理流的)3.3 文件的打开与关闭 4. 文件…

vitis (eclipse) 的Indexer不能搜索、不能跳转到函数和变量定义和声明不能打开调用层次的解决方法

在使用vitis(2021.1) 过程中&#xff0c;有一个非常方便实用的功能&#xff0c;就是在函数或变量等源代码上通过右键菜单或快捷键F3、F4、CtrlAltH&#xff0c;也可以按住Ctrl键然后鼠标停留在函数名或变量名上&#xff0c;点击出现的链接&#xff0c;可以跳转到函数或变量的定…

linux磁盘可视化分析工具

在 Linux 系统中&#xff0c;了解磁盘使用情况对于系统维护和优化至关重要。文件和目录随着时间的推移会占据大量磁盘空间&#xff0c;了解哪些部分占用的空间最多可以帮助我们更好地管理和清理磁盘。Baobab&#xff0c;也称为 GNOME Disk Usage Analyzer&#xff0c;是一款非常…

数据化信息时代中开源 AI 智能名片拓客微信小程序的角色与价值

摘要&#xff1a;本文深入探讨了数据化信息的特性&#xff0c;包括其数字化基础、多媒体表现、可转化性及增值利用特点。同时&#xff0c;着重阐述了开源 AI 智能名片拓客微信小程序在这一背景下的重要作用和独特价值&#xff0c;为信息传播与利用提供了新的视角和思路。 关键…

WCF 禁止第三方访问,避免泄露元数据信息

开发的时候&#xff0c;服务端的web.config,将httpGetEnabled和httpsGetEnabled置true&#xff0c;这个时候客户端就可以添加服务引用。开发结束后&#xff0c;部署的时候&#xff0c;将这俩配置改成false

Bug 解决 | 后端项目无法正常启动,或依赖服务连接失败

目录 1、版本问题 2、依赖项问题 明明拷贝的代码&#xff0c;为什么别人行&#xff0c;我启动就报错&#xff1f; 这篇文章我就理一下最最常见的项目启动报错的两种原因&#xff01; 1、版本问题 比如明明项目的 Java 版本是 8&#xff0c;你非得拿 5 跑&#xff1f;那不是…

python爬虫预备知识三-序列化和反序列化

序列化和反序列化 序列化是为了将内存中的数据保存在磁盘上或者用于传输&#xff0c;实现程序状态的保存和共享。反序列化反之。 序列化后的变量再被反序列化回来之后&#xff0c;两者之间已经没有任何关系。 序列化后的文件是在不同程序或者说不同语言之间传递数据的关键方…

开发助手专业版,有反编译等多种功能

软件介绍 开发助手能够用来快速调试应用以及查看手机软硬件相关信息&#xff0c;包括&#xff1a;快速打开或关闭开发者选项中的选项。 将原来几十秒的操作缩短为一次点击。包括显示布局边界&#xff0c;显示 GPU 过度绘制。显示布局更新。强制 GPU 渲染 显示 GPU 视图更新&a…

第15课 Scratch少儿编程 入门篇:师生问候

师生问候 故事背景&#xff1a; 魔法学院的期末考核刚刚考完&#xff0c;魔法老师在教室里碰到小明&#xff0c;老师问小明考的怎么样&#xff1f; 程序原理&#xff1a; 找一个教室的背景&#xff0c;小精灵角色和魔法师的角色&#xff0c;将魔法师的角色造型左右反转&…

Java与Python谁更适合后端开发?

在软件开发的世界里&#xff0c;选择合适的编程语言就像为建筑选择合适的材料一样重要。 对于后端开发而言&#xff0c;Java和Python都是流行的选择&#xff0c;但它们各自拥有独特的优势和劣势&#xff0c;“谁更适合”就成为一个被议论的话题。 事实上&#xff0c;并不存在…

调用IP实现数据加速

前言 在数字系统设计中&#xff0c;提升数据处理速度和效率是关键目标。本实验着眼于利用双端口RAM和异步FIFO对IP核ROM中的数据进行加速处理&#xff0c;通过这两种硬件组件的有效结合来优化数据访问和传输。双端口RAM允许同时进行读写操作&#xff0c;提高数据处理的并行性和…

中央空调常用风口的分类

中央空调常用风口的分类中央空调常用的风口类型有七类&#xff0c;包括百叶风口、散流器、喷口、旋流风口、条缝风口、格栅风口和专用风口。详细分类如下&#xff1a; 1&#xff09;百叶风口&#xff1a;单层百叶风口、双层百叶风口、连动百叶风口、固定斜百叶风口、地面固定斜…

How to tune agent _executor for better understanding of the database

题意&#xff1a;如何调整agent _executor以更好地理解数据库 问题背景&#xff1a; I have a database in which I have connected an agent too. However, I have noticed that it sometimes gets confused between whether or not it should return a column ID or persons…