暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

【YashanDB个人版体验】SpringBoot连接YashanDB项目实战

原创 土豆 2023-11-30
650

一:环境准备

1.数据库和JDK的准备

image.png

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

2.JDBC驱动下载

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

image.png

二:环境搭建

1.SpringBoot项目创建

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

image.png

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

image.png

2.数据库连接

①开启YashanDB服务器

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

yasboot cluster start -c yashandb

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

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

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

groupadd YASDBA 
usermod -a -G YASDBA yashan

②导入JDBC驱动

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

image.png

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

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

<dependency> <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> </dependency>

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

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

(5)执行Application的main函数

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

image.png

可以看出项目成功启动。

三:项目实战

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

1.数据库创建

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

image.png

这里需要实现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包存放的是前端文件。

image.png

②编写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接口:

@Mapper public 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接口及实现类:

@Transactional public interface BookService { //保存图书 boolean save(Book book); //更新数据 boolean update(Book book); //删除数据 boolean delete(String id); //根据id查询 Book getById(String id); //按书名查询 List<Book> getByName(String name); }
@Service public 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函数,显示运行成功

image.png

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

image.png

③添加图书测试

点击新建按钮,输入图书信息,点击确定

image.png

返回主页查看图书信息,可以看到图书被成功添加

image.png

返回YashanDB查询,可以看到该条记录已被添加到数据库中

image.png

④修改图书测试

点击编辑按钮,修改原有图书信息

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

image.png

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

image.png

⑤删除图书

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

image.png

image.png

四:使用感想

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

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

最后修改时间:2023-11-30 22:59:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论