从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,配置依赖 (必须做的)
参考:
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方便查询。 如果您知道那是啥,且强烈要使用可以参考: 以及完整的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"}
四、构建实体类
参考:
五、配置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 serverdatasource.default=db## define these in external properties ...datasource.db.username=rootdatasource.db.password=rootdatasource.db.databaseUrl=jdbc:mysql://localhost:3306/test?useSSL=falsedatasource.db.databaseDriver=com.mysql.jdbc.Driver
3、默认数据
将某个配置成数据库默认配置,或者如配置文件那样子
ServerConfig config = new ServerConfig();config.setDefaultServer(true);
默认情况下使用 Ebean.getDefaultServer() 或者 Ebean.getServer(null)使用的是默认数据库配置信息。
当需要使用指定的数据库,例上面所配置的db,则可以用 Ebean.getServer("db")