2019独角兽企业重金招聘Python工程师标准>>>
从2018年,一直在做服务器相关的技术积累。在公司,从一个客户端程序员,主动要求做服务器任务,希望借机提升自己的服务器技术应用能力。私下一直研究的是vert.x的相关技术,奈何公司使用的是php + yii的解决方案。只能静下心来,吸取公司的方案中的一些优势,比如,yii的 "Query Builder"是非常高效方便……翻阅各种资料,发现了ebean。国内的大部分文档都吹嘘它高效,并没有一份入门级的使用教程。本文,是笔者的一些使用心得。分享于此,希望对大家学习ebean有所帮助。
一、使用的环境介绍
idea + gradle + kotlin
二、idea的ebean插件安装 (必须做的)
安装方法:
- 打开idea, File > Settings > Plugins > "Ebean 11" 来安装插件,如图所示:
- 打开bean增加工具,确保build下的 "Ebean XXXX"前面有一个小勾勾, 如图所示:
注:如果你没有做这步操作,运行的时候,会抛出 “io.ebean.config.BeanNotEnhancedException”的异常。
Exception in thread "main" io.ebean.config.BeanNotEnhancedException: Bean class org.example.domain.channel_statistics_ret is not enhanced? Check packages specified in ebean.mf. If you are running in IDEA or Eclipse check that the enhancement plugin is installed. See https://ebean.io/docs/trouble-shooting#not-enhanced
at io.ebeaninternal.server.deploy.BeanDescriptorManager.setEntityBeanClass(BeanDescriptorManager.java:1581)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.createByteCode(BeanDescriptorManager.java:1446)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.readDeployAssociations(BeanDescriptorManager.java:1355)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.readEntityDeploymentAssociations(BeanDescriptorManager.java:770)
at io.ebeaninternal.server.deploy.BeanDescriptorManager.deploy(BeanDescriptorManager.java:374)
at io.ebeaninternal.server.core.InternalConfiguration.(InternalConfiguration.java:197)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:124)
at io.ebeaninternal.server.core.DefaultContainer.createServer(DefaultContainer.java:35)
at io.ebean.EbeanServerFactory.createInternal(EbeanServerFactory.java:109)
at io.ebean.EbeanServerFactory.create(EbeanServerFactory.java:70)
at MainKt.main(main.kt:26)
at MainKt.main(main.kt)
三、修改Gradle,配置依赖 (必须做的)
参考:
- https://ebean.io/docs/getting-started/dependencies
- https://ebean.io/docs/getting-started/gradle
1、在gradle中加入slf4j的依赖。
compile 'org.slf4j:slf4j-api:1.7.26'
compile 'org.slf4j:slf4j-nop:1.7.26'
注: 我这里是使用的slf4j-nop,还有什么slf4j-simple之类的也可以使用,但是千万不要在您的gradle依赖中同时出现。
2、 ebean及jdbc的依赖
compile 'io.ebean:ebean:11.39.1'
compile 'mysql:mysql-connector-java:8.0.11'
注:我这里是mysql的jdbc依赖,您根据需求安装适合您的依赖
3、如果需要使用Ebean的 Query beansa功能 (可选,笔者建议不要加上)
笔者认为这个会使代码出现更多隐晦的东西,所以不建议使用。比如你的实体类Customer,它会自动生成一个QCustomer方便查询。 如果您知道那是啥,且强烈要使用可以参考:https://ebean.io/docs/getting-started/gradle-querybeans 以及完整的gradle的配置事例: https://github.com/ebean-orm-examples/example-gradle-kotlin/blob/master/build.gradle
4、一些易于调试的东西(可选,但强烈建议加上)
ebean {
debugLevel = 1
}
test {
testLogging.showStandardStreams = true
testLogging.exceptionFormat = 'full'
}
附我配置的完整代码:
group 'org.huoyaojing'
version '1.0-SNAPSHOT'
buildscript {
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
classpath "io.ebean:ebean-gradle-plugin:11.27.1"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.11"
}
}
apply plugin: 'idea'
apply plugin: 'io.ebean'
apply plugin: "org.jetbrains.kotlin.jvm"
repositories {
mavenCentral()
}
ebean {
debugLevel = 1
}
test {
testLogging.showStandardStreams = true
testLogging.exceptionFormat = 'full'
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
compile 'io.ebean:ebean:11.39.1'
// compile 'org.postgresql:postgresql:42.2.2'
compile 'io.ebean.test:ebean-test-config:11.39.1'
compile 'mysql:mysql-connector-java:8.0.11'
compile 'org.slf4j:slf4j-api:1.7.26'
compile 'org.slf4j:slf4j-nop:1.7.26'
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
四、构建实体类
参考:https://ebean.io/docs/getting-started/kotlin-first-entity
五、配置ebean
配置ebean的方法有很多,可以是直接纯代码,也可以采用配合配置文件来配置
1、纯代码配置
var cfg = ServerConfig()
var properties = Properties()
properties.put("ebean.db.ddl.generate", "true")
properties.put("ebean.db.ddl.run", "false") //注意,如果这里设置了true,会删除掉你原来的数据,然后再创建表
properties.put("datasource.db.username", "您的db用户名")
properties.put("datasource.db.password", "您的DB密码")
properties.put("datasource.db.databaseUrl","jdbc:mysql://10.0.6.211:3306/test") //db的路径
properties.put("datasource.db.databaseDriver", "com.mysql.cj.jdbc.Driver") //mysql的jdbc驱动
cfg.loadFromProperties(properties);
var server = EbeanServerFactory.create(cfg);
2、通过ebean.properties进行加载
ServerConfig.loadFromProperties() 可以自动从ebean.properties加载配置。 您可以在resources里添加一个ebean.properties定义如下的文件
ebean.search.packages= com.demo
# the name of the default server
datasource.default=db
## define these in external properties ...
datasource.db.username=root
datasource.db.password=root
datasource.db.databaseUrl=jdbc:mysql://localhost:3306/test?useSSL=false
datasource.db.databaseDriver=com.mysql.jdbc.Driver
3、默认数据
将某个配置成数据库默认配置,或者如配置文件那样子
ServerConfig config = new ServerConfig();
config.setDefaultServer(true);
默认情况下使用 Ebean.getDefaultServer() 或者 Ebean.getServer(null)使用的是默认数据库配置信息。
当需要使用指定的数据库,例上面所配置的db,则可以用 Ebean.getServer("db")