Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 4317|回复: 9

[插件开发教程] [教程]认识Ebean数据库(二)

[复制链接]
魔族宝 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1970
钻石
性别
保密
注册时间
2015-1-11
查看详细资料
发表于 2016-9-27 13:29:05 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 魔族宝 于 2016-11-21 11:16 编辑


Spigot 将在 1.12版本移除Ebean.




在上一篇文章中,我简单介绍了一下我所知道的,关于在Bukkit环境下使用Ebean构建自己的数据库的过程。
没有看到的小伙伴可以通过这个链接去看一下:[教程]认识Ebean数据库

上篇文章中我只介绍了如何:
  • 创建自己的数据类
  • 注册数据类
  • 操作数据库做增、删、查、改等操作
  • 插件目录的配置

写那篇文章时我还对Ebean一知半解,原谅我不知深浅的教程差点误人子弟,在这篇教程中我将会介绍一下:
  • 如何配置让Ebean支持MySQL(简单)
  • JPA注解的简单介绍(重要)


教程:认识

                               
登录/注册后可看大图
Ebean数据库(二)


1.如何配置让Ebean支持MySQL
这是非常简单的配置问题,Bukkit已经为我们准备好了配置文件
是的,这就是Bukkit.yml,在你服务器端里十分不起眼的一个配置文件,一般我们很少会去修改它,
如果想让你的插件使用MySQL作为数据库,你需要修改Bukkit.yml中的database字段

默认的配置是使用Sqlite作为数据库
  1. database:
  2.   username: bukkit
  3.   isolation: SERIALIZABLE
  4.   driver: org.sqlite.JDBC
  5.   password: walrus
  6.   url: jdbc:sqlite:{DIR}{NAME}.db
复制代码
当你的服务器使用Sqlite作为数据库时,不需要修改这里的任何配置项,保持默认。
他是安全的(因为在本地)

我们希望的配置是使用Mysql作为数据库
  1. database:
  2.   username: userName
  3.   isolation: SERIALIZABLE
  4.   driver: com.mysql.jdbc.Driver
  5.   password: yourPassword
  6.   url: jdbc:mysql://localhost:3306/minecraft
复制代码
其中:
username 你访问数据库服务器的用户名
driver 请修改为com.mysql.jdbc.Driver
password 你访问数据库服务器的对应密码
url 数据库服务器的所在地址

jdbc:mysql://localhost:3306/minecraft


黄色 固定url头
紫色 服务器地址
红色 数据库名




保存配置,剩下的工作都是Ebean的事情了。
这一步关键在于你的Mysql服务器是正常工作的,如果你在这步失败了,你可以尝试检查一下:
  • Mysql服务器是否正在正常工作?
  • 用户和数据库是否存在?
  • 用户是否拥有远程访问权限?
  • 密码是否正确?


2.JPA注解简易教程
Ebean用到了JPA注解,注解将会帮助我们不用去写配置文件而直接将配置写在代码里。(以下部分转自网络、部分难点作者点评)
除了红色标记的1和3是每个实体类所必须的之外,其他的注解你需要通过自己的需求进行设置。1、@Entity(name="EntityName")
必须
name为可选,对应数据库中一的个表


2、@Table(name="",catalog="",schema="")
可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体对应的数据库表的信息
name:可选,表示表的名称.默认地,表名和实体名称一致,只有在不一致的情况下才需要指定表名
catalog:可选,表示Catalog名称,默认为Catalog("").
schema:可选,表示Schema名称,默认为Schema("").


3、@id
必须
@id定义了映射到数据库表的主键的属性,一个实体只能有一个属性被映射为主键.置于getXxxx()前.



4、@GeneratedValue(strategy=GenerationType,generator="")
可选
strategy:表示主键生成策略,有AUTO,INDENTITY,SEQUENCE 和 TABLE 4种,分别表示让ORM框架自动选择,
根据数据库的Identity字段生成,根据数据库表的Sequence字段生成,以有根据一个额外的表生成主键,默认为AUTO
generator:表示主键生成器的名称,这个属性通常和ORM框架相关,例如,Hibernate可以指定uuid等主键生成方式.
示例:
  1. @Id
  2. @GeneratedValues(strategy=StrategyType.SEQUENCE)
  3. public int getPk() {
  4. return pk;
  5. }
复制代码
5、@Basic(fetch=FetchType,optional=true)
可选
@Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法,默认即为@Basic
fetch: 表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER.
optional:表示该属性是否允许为null,默认为true
示例:



  1. @Basic(optional=false)
  2. public String getAddress() {
  3. return address;
  4. }
复制代码

6、@Column
可选
@Column描述了数据库表中该字段的详细定义,这对于根据JPA注解生成数据库表结构的工具非常有作用.
name 表示数据库表中该字段的名称,默认情形属性名称一致
nullable 表示该字段是否允许为null,默认为true
unique表示该字段是否是唯一标识,默认为false
length示该字段的大小,仅对String类型的字段有效
insertable表示在ORM框架执行插入操作时,该字段是否应出现INSETRT语句中,默认为true
updateable表示在ORM框架执行更新操作时,该字段是否应该出现在UPDATE语句中,默认为true.对于一经创建就不可以更改的字段,该属性非常有用,如对于birthday字段.
columnDefinition 表示该字段在数据库中的实际类型.通常ORM框架可以根据属性类型自动判断数据库中字段的类型,但是对于Date类型仍无法确定数据库中字段类型究竟是 DATE,TIME还是TIMESTAMP.此外,String的默认映射类型为VARCHAR,如果要将String类型映射到特定数据库的BLOB或 TEXT字段类型,该属性非常有用.

示例:
  1. @Column(name="BIRTH",nullable="false",columnDefinition="DATE")
  2. public String getBithday() {
  3. return birthday;
  4. }
复制代码


7、@Transient
可选
@Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性.
如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic
示例:
  1. //根据birth计算出age属性
  2. @Transient
  3. public int getAge() {
  4. return getYear(new Date()) - getYear(birth);
  5. }
复制代码

8、@MappedSuperclass
可选
@MappedSuperclass可以将超类的JPA注解传递给子类,使子类能够继承超类的JPA注解
示例:
  1. @MappedSuperclass
  2. public class Employee() {
  3. ....
  4. }

  5. @Entity
  6. public class Engineer extends Employee {
  7. .....
  8. }
  9. @Entity
  10. public class Manager extends Employee {
  11. .....
  12. }
复制代码

9、@Embedded
可选
@Embedded将几个字段组合成一个类,并作为整个Entity的一个属性.
例如User包括id,name,city,street,zip属性.
我们希望city,street,zip属性映射为Address对象.这样,User对象将具有id,name和address这三个属性.
Address对象必须定义为@Embededable
示例:
  1. @Embeddable
  2. public class Address {city,street,zip}
  3. @Entity
  4. public class User {
  5. @Embedded
  6. public Address getAddress() {
  7. ..........
  8. }
  9. }
复制代码




还有几个复杂的注解,如
@OneToOne,@OneToMany,@ManyToOne,@ManyToMany
这四个注解应用于复杂的数据库结构,在这简单的教程中不再叙述。
各位如果有兴趣可以在网上找相应资料进一步研究。


3.结语
使用MySQL作为数据库大大增加了读取查询的效率,
应用于BungeeCord群组服时十分有效,
为了提高插件的品质和稳定性,
魔族宝呼吁大家——
        根据插件需求,尽可能的使用Bukkit提供的Ebean,
        它简易、便于开发、安全、快速。
        是一个很好的工具。


(如本文章中有任何叙述错误的地方请各位大佬及时指出,以免误人子弟。
同时请各位读者注意,该文章只能为您做引导和参考,并不是严谨的教学文案,请保持自我分辨力)


评分

参与人数 2人气 +4 金粒 +75 收起 理由
li709854423 + 2 + 40 学习了
z25096708 + 2 + 35 MCBBS有你更精彩~

查看全部评分

vleaf 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1208
钻石
性别
保密
注册时间
2014-12-25
查看详细资料
发表于 2016-10-6 13:05:42 | 显示全部楼层
支持,这么好的教程没人回复?
回复

使用道具 举报

jkaa13579 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
976
钻石
性别
保密
注册时间
2016-4-24
查看详细资料
发表于 2016-10-8 17:29:11 | 显示全部楼层
并不懂Ebean是什么东西
回复

使用道具 举报

魔族宝 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1970
钻石
性别
保密
注册时间
2015-1-11
查看详细资料
 楼主| 发表于 2016-10-8 18:29:53 | 显示全部楼层
jkaa13579 发表于 2016-10-8 17:29
并不懂Ebean是什么东西

Ebean是一个ORM框架,可以让你很简单的去使用Mysql或者Sqlite作为你插件的数据库。
基础可以看一下我的第一节教程
[教程]认识Ebean数据库
http://www.mcbbs.net/forum.php?mod=viewthread&tid=628118
(出处: http://www.mcbbs.net/)
回复

使用道具 举报

2421880394 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
319
钻石
性别
保密
注册时间
2014-7-28
查看详细资料
头像被屏蔽
发表于 2017-1-4 08:23:53 | 显示全部楼层
魔族宝 发表于 2016-10-8 18:29
Ebean是一个ORM框架,可以让你很简单的去使用Mysql或者Sqlite作为你插件的数据库。
基础可以看一下我的第 ...

楼主QQ多少 我有个忙需要你帮
回复

使用道具 举报

魔族宝 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
1970
钻石
性别
保密
注册时间
2015-1-11
查看详细资料
 楼主| 发表于 2017-1-4 22:16:49 | 显示全部楼层
2421880394 发表于 2017-1-4 08:23
楼主QQ多少 我有个忙需要你帮

QQ 774741359
回复

使用道具 举报

2421880394 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
319
钻石
性别
保密
注册时间
2014-7-28
查看详细资料
头像被屏蔽
发表于 2017-1-7 08:23:30 | 显示全部楼层
加你了 同意下 谢谢咯
回复

使用道具 举报

li709854423 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
3679
钻石
性别
保密
注册时间
2012-8-12
查看详细资料
发表于 2018-1-20 17:51:39 | 显示全部楼层
emmmmm学习了
回复

使用道具 举报

a847091302 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2200
钻石
性别
保密
注册时间
2015-10-24
查看详细资料
发表于 2018-1-28 00:53:54 | 显示全部楼层
什么时候出使用教程啊= =!
回复

使用道具 举报

wangchouhao 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
53
钻石
性别
保密
注册时间
2018-1-28
查看详细资料
发表于 2018-1-28 01:40:37 | 显示全部楼层
好高级啊,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2019-8-21 08:36 , Processed in 0.041281 second(s), Total 17, Slave 16 queries , Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2019 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表