`
weiqingfei
  • 浏览: 318175 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

Spring boot + doma2

    博客分类:
  • Java
 
阅读更多

已经有很多很多的数据访问层了,每种或多或少都有自己的特点。

由于个人习惯,对这个功能有以下要求:

1.必须能写原生SQL

   对于那种能生成sql的库不是很喜欢,尤其是比较复杂的sql,每次还要打印出sql检查一下生成的对不对。

   另外最好不要像mybatis那种要把sql写在xml文件里,看起来太乱。

 

2.对于单表简单的CRUD,可以自动生成sql

   也就是说我可以不写sql的情况下,可以自动生成sql,毕竟为了简单更新一个表,还要写更新sql也是很繁琐的。

 

3.必须要有orm功能

   没人喜欢把抽出的数据,手动转换为entity,这个必须能够自动转换,要支持隐式匹配。

 

根据这些要求,最终选定了doma2。

但是doma2并没有完全符合上面的要求,比如select的话,是无法自动生成sql的,如果需要的话还要自己扩展。

另外doma2也不支持1:n的entity mapping,作者的解释是那样反而会增加使用难度。

 

doma2,还有一个比较特殊的地方,是使用了注释处理,就是在编译期会自动生成实现类的源程序,并且貌似orm也没有用到反射机制,效率更高一些。缺点当然是会影响一些编译速度,另外会生成大量的源代码。

 

和mybatis一样,doma2也提供了最基本的entity和dao文件的生成工具doma-gen。

 

doma2可以用在任何框架里,当然spring boot也不例外,另外已经有人写了starter库,集成起来更加的方便。

下面这个配置是一个集成doma2基本spring boot的gradle文件

buildscript {
	ext {
		springBootVersion = '1.5.1.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'

jar {
	baseName = 'test'
	version = '0.0.1-SNAPSHOT'
}

sourceCompatibility = 1.8

repositories {
	mavenCentral()
}

configurations {
    domaGenRuntime
}

dependencies {
	compile('org.springframework.boot:spring-boot-starter-jdbc')
	compile('org.springframework.boot:spring-boot-starter-thymeleaf')
	compile('org.springframework.boot:spring-boot-starter-validation')
	compile('org.springframework.boot:spring-boot-starter-web')
	compile('org.seasar.doma.boot:doma-spring-boot-starter:1.1.0')
	runtime('org.springframework.boot:spring-boot-devtools')
	runtime('mysql:mysql-connector-java')
	testCompile('org.springframework.boot:spring-boot-starter-test')
	
	domaGenRuntime 'org.seasar.doma:doma-gen:2.15.0'
	domaGenRuntime 'mysql:mysql-connector-java:5.1.39'
}

task gen << {
	ant.taskdef(resource: 'domagentask.properties',
		classpath: configurations.domaGenRuntime.asPath)
	ant.gen(url: 'jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&useSSL=false', 
		user: 'username', password: 'password',
		templatePrimaryDir: 'templates') {
		entityConfig(packageName: 'jp.co.abc.entity',entitySuffix:'Entity',useListener: false)
		daoConfig(packageName: 'jp.co.abc.dao', overwrite:true)
		sqlConfig()
	}
}

 

由于doma-gen没有考虑spring的集成,为了能让生成的dao文件会被spring boot扫描,需要添加注解@ConfigAutowireable,可以在doma的库里复制一个默认的dao.ftl文件,放到相应的目录下,例如上面的配置是放到了项目根目录下的templates目录下

然后在相应处添加下面两行

import org.seasar.doma.boot.ConfigAutowireable;

@ConfigAutowireable

 

 当然,如果你不想对自动生成的java类进行侵入式注解,可以自定义一个配置类,用正则方式,扫描生成的类。

 

@Component
@ComponentScan(basePackages="jp.co.abc.dao", includeFilters=@Filter(type=FilterType.REGEX,pattern = "jp.co.abc.dao.*DaoImpl"))
public class DomaConfig {

}

 

分享到:
评论

相关推荐

    springboot-doma2-template:Spring Boot + Doma 2的项目模板

    本项目"springboot-doma2-template"是一个整合了Spring Boot和Doma 2的模板,用于快速搭建基于Java的数据库应用。 首先,了解Spring Boot与Doma 2的基本概念: Spring Boot的核心特性包括自动配置、内嵌式Web...

    doma-spring-boot:Doma的Spring Boot支持

    doma-spring-boot Spring Boot支持属性文件配置doma.dialect = # Dialect of database used by Doma. (STANDARD, SQLITE, DB2, MSSQL, MYSQL, POSTGRES, ORACLE, H2, HSQL)doma.sql-file-repository = # Type of ...

    springboot-doma2-示例:SpringBoot + Doma2

    在本项目"SpringBoot + Doma2示例"中,我们探索了如何将流行的Java框架Spring Boot与数据库访问库Doma2相结合,以构建高效、简洁的后端应用程序。Doma2是一个开源的ORM(对象关系映射)框架,它为Java开发提供了便捷...

    基于Spring Boot和WxJava实现的微信企业号企业微信放置演示-源码

    基于Spring Boot和WxJava实现的微信企业号企业微信放置演示-源码.zip

    spring-boot-jpetstore:基于Doma 2和Spring Boot构建的示例Web应用程序

    克隆git clone https://github.com/domaframework/spring-boot-jpetstore.git跑cd spring-boot-jpetstore./gradlew bootRun使用权http://localhost:8080/编辑IntelliJ IDEA 将此示例导入​​为Gradle项目。...

    spring-boot-thymeleaf-doma

    spring-boot-thymeleaf-doma 本项目使用 弹簧靴, Thymeleaf 模板引擎, 多玛 ORM。 导入eclipse(Spring Tool Suite) 克隆此存储库并将其作为 maven 项目导入到 Eclipse。 介绍DOMA ORM 为了在 Eclipse 中使用 ...

    doma2:Doma2样本

    带有Gradle的Doma2样本先决条件这需要MySQL与“ jdbc:mysql:// localhost:3306 / doma2”“ root /(nothing)”连接。跑步./gradlew build

    springboot-doma2-kotlin-示例

    《SpringBoot + Doma2 + Kotlin 整合实践详解》 在现代的Java开发领域,SpringBoot以其便捷的启动和管理服务的能力,深受开发者喜爱。而Kotlin作为一门优雅且强大的编程语言,逐渐成为Java平台的新宠。Doma2则是一...

    doma:Doma版本1

    新版本的Doma 2是在开发的。 维修政策 我们仅接受针对Doma 1的错误修复。我们将在Doma 2中包含新功能。 文献资料 Google群组 聊天室 用Maven编译 要使用Maven进行构建,请将下面列出的依赖项添加到pom.xml文件中: ...

    doma:面向Java 8+的DAO数据库映射框架

    Doma 2是Java 8+的数据库访问框架。 Doma具有多种优势: 使用在编译时验证并生成源代码。 提供类型安全的Criteria API。 支持Kotlin。 使用称为“双向SQL”SQL模板。 不依赖其他库。 例子 类型安全标准API 用...

    seasar框架开发常用数据关系组件

    2. **SQL文件分离**:SQL语句独立于Java代码存储,使得SQL的修改不会影响到Java代码的编译。同时,SQL文件可以单独进行版本控制和团队协作。 3. **自动结果映射**:DOMA能够自动将查询结果映射到对应的Java对象,...

    ht-doma.zip

    1. `ht-doma.bin`:这是编译后的目标文件,通常用于烧录到微控制器的闪存中,包含了串口驱动的执行代码。 2. `delay.OBJ`:通常用于实现延时函数,确保串口通信中数据传输的时序正确。 3. `ht-doma.c`:C源代码...

    doce:链接 Doma 和 Guice 的图书馆

    2. 配置Guice模块,声明Doma相关的依赖。 3. 使用Guice的Injector来创建和注入Doma对象。 4. 在业务代码中,通过依赖注入获取Doma对象,执行数据库操作。 **应用场景** doce特别适合于那些已经使用Guice作为依赖...

    一个日系seasar框架Demo:S2Containor+S2Dao+SAStruts+mayaa

    Seasar框架是一个源自日本的开源Java开发框架,它旨在简化企业级应用的开发流程,提高开发效率。Seasar提供了一套完整的解决方案,包括容器管理、数据访问、MVC框架以及Web应用开发等组件。在这个“S2Containor+S2...

    FreeRTOS-doma.zip

    2. **创建项目**:使用STM32CubeMX,配置STM32F429的外设,如GPIO、时钟、中断等,并选择FreeRTOS作为RTOS选项。STM32CubeMX会自动生成包含FreeRTOS核心组件的初始化代码。 3. **FreeRTOS配置**:根据应用需求,...

    stm32f031-doma.7z

    在"stm32f031-doma.7z"这个压缩包中,包含了与STM32F031相关的开发工作空间、驱动程序和文档等资源,便于开发者进行项目开发。 1. **定时器**:STM32F031内置了多个定时器,如通用定时器(TIM)、基本定时器(TIM6/...

    Python库 | idds-doma-0.3.6.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:idds-doma-0.3.6.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    django-doma:Django中的简单文档管理

    doma是django的一个简单的文档管理应用程序。 它提供了必要的模型和视图,并准备将其包含在您的项目中。 详细的文档位于“ docs”目录中。 安装 使用pip安装django-doma : $ pip install django-doma 快速开始 将...

    小日本的开源框架 Seasar2

    Seasar2是一个源自日本的开源框架,其设计目标是为Java开发者提供轻量级的容器服务,以提高开发效率和代码质量。与许多其他轻量级容器不同,Seasar2强调了无需编写配置文件的特性,它采用了Convention over ...

    seasar教程,java开发框架之一

    seasar教程,最流行的java开发框架之一,再过几年可能成为主流. struts与Spring与Hibernate的简化版本,国外很多大公司己经用了几年了,NEC,LG的软件开发都是用这个的。兄弟们快学吧

Global site tag (gtag.js) - Google Analytics