首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用户体验 | SpringBoot连接YashanDB项目实战

前言

环境准备

1.数据库和JDK的准备

要想使用YashanDB和SpringBoot,YashanDB的部署和JDK的安装是必须的,关于YashanDB的安装官方文档有很详细的教程,这里就不再花篇幅介绍了,可点击这里跳转官方文档,关于部署的一些小技巧和注意事项,笔者前面写过一篇文章有介绍到,具体可点击这里跳转查看。关于JDK的安装这里也不做介绍,下面是笔者的JDK版本。

2.JDBC驱动下载

由于YashanDB还没有上传jar包到镜像仓库,所以我们不能直接通过maven坐标进行jar包引入,这时候需要我们到官网下载JDBC驱动后续手动导入到SpringBoot项目中。

环境搭建

1.SpringBoot项目创建

打开IDEA新建项目,以Web界面方式创建SpringBoot项目,如下图。

添加所需的依赖,由于后面需要搭建的是网页项目,所以需要引入Spring Web依赖。为了能够简化和数据库的交互,引入了MyBatis框架,通过SQL语句便可满足操作数据库的所有要求。引入Lombok是为了能更方便地输出自定义日志信息,方便调试。

2.数据库连接

开启YashanDB服务器

部署好YashanDB服务器后,通过执行如下命令打开服务器:

yasboot cluster start -c yashandb

如果显示拒绝连接,则说明YashanDB依赖的相关服务没有开启,执行如下命令开启服务:

yasboot process yasom start -c yashandbyasboot process yasagent start -c yashandbyasboot process yasdb start -c yashandb

如果显示账户被锁定,则参考这里进行解决。需要注意的是,按照官方教程进行部署是没有提到创建YASDBA用户组的,所以直接将数据库安装用户添加到YASDBA组时会提示不存在该组,需要手动创建一个再添加,执行如下命令即可。

groupadd YASDBA usermod -a -G YASDBA yashan

导入JDBC驱动

(1)在项目源目录下创建一个lib包用于存放JDBC驱动,项目结构如下

(2)将下载的JDBC驱动(yashandb-jdbc-x.x.x.jar)移到lib包里,右键将其添加为库

(3)pom.xml文件中添加如下依赖,groupId、artifactId和version可根据自己喜好进行调整。

<groupId>com.my</groupId> <artifactId>yashandb</artifactId> <version>1.0.0</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/lib/yashandb-jdbc-1.5.1.jar</systemPath>

(4)修改resource目录下面的application.properties为application.yml,输入以下连接信息。host、port、database_name分别对应服务器主机地址、数据库端口号、数据库名,如果密码含有符号开头需要添加单引号将密码包起来。

spring: datasource: # config information url: jdbc:yasdb://host:port/database_name username: sys password: yourPassworddriver-class-name: com.yashandb.jdbc.Driver

(5)执行Application的main函数

@Slf4j@SpringBootApplicationpublic class YashanProApplication {

public static void main(String[] args) { SpringApplication.run(YashanProApplication.class, args); log.info("启动成功"); }}

可以看出项目成功启动。

项目实战

这次用于实战的项目还是我们的老朋友——图书管理系统,能实现基本的增删改查操作。

1.数据库创建

需要创建一个tbl_book表用于存储图书信息,表的结构如下:

这里需要实现id自增功能,YashanDB的语法和Oracle是类似的,我们都知道MySQL只需在字段后面添加"AUTO_INCREMENT"即可实现自增,但是Oracle需要创建序列来实现,同理YashanDB也需要靠序列来实现,SQL语句如下:

CREATE SEQUENCE book_index; --创建序列CREATE TABLE tbl_book( id INT DEFAULT book_index.NEXTVAL NOT NULL, type VARCHAR(30) NULL, name VARCHAR(60) NOT NULL, description VARCHAR(300) NULL, is_delete INT DEFAULT 0, PRIMARY KEY (id));

2.项目搭建

搭建如下项目结构,这里对几个包进行说明,common包存放的是自定义状态码以及返回结果类,exception包存放的是自定义异常类,resource下的static包存放的是前端文件。

编写POJO类、Controller类、Dao接口、Service接口及实现类,主要代码如下:

POJO类

public class Book { //id private String id; //图书类型 private String type; //图书名 private String name; //图书描述 private String description; //是否删除(逻辑删除) private Integer is_delete;

@Override public String toString() { return "Book{" + "id='" + id + '\'' + ", type='" + type + '\'' + ", name='" + name + '\'' + ", description='" + description + '\'' + ", is_delete=" + is_delete + '}'; }

public String getId() { return id; }

public void setId(String id) { this.id = id; }

public String getType() { return type; }

public void setType(String type) { this.type = type; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public String getDescription() { return description; }

public void setDescription(String description) { this.description = description; }

public Integer getIs_delete() { return is_delete; }

public void setIs_delete(Integer is_delete) { this.is_delete = is_delete; }}

Controller类:

@RestController@RequestMapping("/books")public class BookController { @Autowired private BookService bookService;

//新增图书 @PostMapping public Result save(@RequestBody Book book) { boolean flag = bookService.save(book); return new Result(flag? Code.SAVE_OK:Code.SAVE_ERR,flag); }

//更新图书信息 @PutMapping public Result update(@RequestBody Book book) { boolean flag = bookService.update(book); return new Result(flag?Code.UPDATE_OK:Code.SAVE_ERR,flag); }

//删除图书 @DeleteMapping("/{id}") public Result delete(@PathVariable String id) { boolean flag = bookService.delete(id); return new Result(flag?Code.DELETE_OK:Code.DELETE_ERR,flag); }

//按id查找图书,用于编辑回显 @GetMapping(value = ("/getById")) public Result getById(@RequestParam("id") String id) { Book book = bookService.getById(id); Integer code = (book == null? Code.GET_ERR:Code.GET_OK); String msg = (book == null? "数据查询失败!":""); return new Result(code,book,msg); }

//按条件查询图书 @GetMapping(value = ("/getByName")) public Result getByName(@RequestParam("name") String name){ List<Book> bookList = bookService.getByName(name); Integer code = (bookList == null ? Code.GET_ERR:Code.GET_OK); String msg = (bookList == null? "系统繁忙,请稍后再试!":""); return new Result(code,bookList,msg); }}

Dao接口:

@Mapperpublic interface BookDao { //插入数据 @Insert("insert into tbl_book(type,name,description) values(#{type},#{name},#{description})") int save(Book book);

//更新图书信息 @Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}") int update(Book book);

//删除图书(逻辑删除) @Delete("update tbl_book set is_delete = 1 where id = #{id}") int delete(String id);

//根据id获取图书信息用于回显 @Select("select * from tbl_book where id = #{id} and is_delete=0") Book getById(String id);

//按条件查询 @Select("select * from tbl_book where name like concat('%',#{name},'%') and is_delete = 0") List<Book> selectByName(String name);}

Service接口及实现类:

@Transactionalpublic interface BookService { //保存图书 boolean save(Book book);

//更新数据 boolean update(Book book);

//删除数据 boolean delete(String id);

//根据id查询 Book getById(String id);

//按书名查询 List<Book> getByName(String name);}

@Servicepublic class BookServiceImpl implements BookService { @Autowired private BookDao bookDao;

@Override public boolean save(Book book) { return bookDao.save(book) > 0; }

@Override public boolean update(Book book) { return bookDao.update(book) > 0; }

@Override public boolean delete(String id) { return bookDao.delete(id) > 0; }

@Override public Book getById(String id) { return bookDao.getById(id); }

@Override public List<Book> getByName(String name) { return bookDao.selectByName(name); }}

为了节省篇幅,前端代码这里就不展示了,前端使用的是ElementUI组件。

3.项目运行

运行Application类的main函数,显示运行成功

进入网站,浏览器输入localhost:8080/index.html,成功进入网站,说明项目搭建成功。

添加图书测试

可以看到成功修改原有信息

数据库中的记录也发生了变化

删除图书

删除图书实际上执行的还是修改操作,图书删除后is_delete字段将修改为1,执行删除操作,可以看到前端数据不展示,但是数据库还存在该数据,但是is_delete字段被修改为1。

使用感想

至此使用SpringBoot连接YashanDB进行项目开发的介绍就结束了,如今去“O”化的背后,不仅仅是为了降低成本,更是为了防范西方对我们的封锁。要知道,去年世界顶级数据库供应商Oracle公司暂停了面向俄罗斯的所有业务,这就意味着让很多关键业务系统瞬间陷入高风险之中,因为出现漏洞也无法进行修复,而我们谁也不能保证这一天不会在我们国家发生。当然在这样的背景下,对国产数据库而言既是机遇也是挑战,如今金融、政府、电信、医疗等行业基本上用的都是Oracle,而YashanDB的使用和Oracle类似,并且可满足上述行业对高性能、高并发及高安全性的要求,或许在不久的将来YashanDB能够在这些行业争得一席之地。但是一个后来者想要挑战拥有成熟生态的先行者,需要的投资非常大,想要进入这个“高端俱乐部”,需要战略上有着坚定的决心和持续多年的投入。

此外,笔者认为一款数据库的成功不仅仅需要技术上的成功,还需要声誉上的成功,虽然都说酒香不怕巷子深,但是其最后还是要靠那些品尝过的人进行宣传。所以笔者认为提高数据库的知名度很重要,不仅仅要在企业之间广泛被使用,还要在个人开发者、学校等场景被广泛使用,毕竟谁又能保证哪个开发者日后不会成为一名老板呢?毋庸置疑的是,YashanDB的出现,可以说是国产数据库的又一突破,相信在不久的将来,拥有自主创新能力的YashanDB也能像Oracle、MySQL等一流数据库一样广为人知且被广为认可。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OK4kGUOc9ZwM-dnOqi84rg0A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券