开源项目HALO初探
最近开始接触SpringBoot,并希望通过开源项目halo来学习一下SpringBoot的基本框架和回顾一下javaweb基本的前后端交互并且还能正式接触idea. halo是一个个人博客项目,使用的框架是SpringBoot.目前看来,前端使用的是frame,对前端页面进行直接生成.持久层使用的是hibernate框架,直接生成表结构.刚将原码拿到手的时候,直接进行module导入idea,发现无论是公司的电脑还是宿舍的电脑都会在导入的时候出现异常.查询halo作者的问答之后,发现是以为idea版本过低,之前2018.3的版本无法很好的支持halo项目的运行,换成2019.3之后能够正常启动.
因为该项目默认使用的是轻型数据库H2,但是无法看到表结构,对博客进行操作的时候也不能直观的看到数据库中数据存储的效果.这让我想转换成mysql数据库来使用,虽然大材小用,但是更加利于我学习.将4个application文件中的H2相关数据注释之后,改好了mysql数据库相关的信息.启动的时候出现了很多问题,大概的意思是说页面代码生成的模板出现了问题.我尝试去看了一下模板,但是发现不是很好修改.这个问题一直困扰了我一天的时间.后来我将数据库删掉之后重新建库,然后进行用户安装,发现错误信息里面出现了有可能是编码问题,我将注册信息里面的所有字符的中文都去掉了,然后注册成功.这个原因应该是hibernate自动生成表结构的时候其中所有的字符集都是默认的latin.这让系统无论是注册还是直接写博客信心的时候只要存在中文就会出现存储异常的情况.然而配置文件中都配置了characterEncoding=utf-8,那么只有可能是在创建数据库的时候没有对字符集进行设置导致整个数据库的字符集变成了默认的latin.删库重建,问题解决.
关于项目导入之后出现大量报错的问题,是由于lombok插件没有安装到idea中,这个安装很简单,直接到plugin中搜索安装即可,刚开始报错的时候我看并没有影响系统的正常使用,所以没有去管这个,后来发现不安装这个插件,会导致一些注解无法正常使用,例如User实体类中的@Data,刚开始没有安装这个插件的时候,无法正常使用get/set方法,为了使用我还专门在实体类中添加了get/set方法,但是感觉一个成熟的项目不应该连get/set方法都不写,后来导入插件的时候才知道是因为@Data插件没有起作用.Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。
问题总结: 1.idea需要使用新版本 2.hibernate可以自动建表,但是无法自动建库 3.字符集需要在建表的时候设置