springboot 통합 kotlin + ebean orm, 자바 와 kotlin 혼합 개발 웹

18357 단어
springboot 통합 kotlin + ebean orm, 자바 와 kotlin 혼합 개발 웹
  • 1. Idea 에서 springboot 프로젝트 를 만 들 고 웹 - > springboot 웹
  • 을 선택 하 십시오.
  • 2. kotlin 의존 항목 및 플러그 인 설정 가 져 오기
  • 3. eBean 의존 항목 가 져 오기
  • 4. 완전한 pom 파일:
  • 5. Idea 설정 settings 의 plugins 를 열 고 ebean 11 을 찾 아 Ebean 11 Enhancement 을 추가 한 다음 Idea 를 다시 시작 합 니 다. 메뉴 표시 줄 의 Build 에서 Ebean 11 Enhancement 옵션 을 볼 수 있 습 니 다. 선택 하 십시오
  • 6. resources 폴 더 에 ebean. properties 를 새로 만 들 고 설정 추가
  • 7. eBean 을 설립 하 는 공장 류
  • 8. 실체 클래스 만 들 기
  • 9. kotlin 은 Ebean 을 사용 합 니 다. 여 기 는 services 를 쓰 지 않 고 contrller
  • 를 직접 씁 니 다.
  • 10. 자바 는 Ebean 을 사용 합 니 다. 여 기 는 services 를 쓰 지 않 고 contrller
  • 를 직접 씁 니 다.
    demo github 주소:https://github.com/LorinHan/kotlin_and_ebean
    1. Idea 에서 springboot 프로젝트 를 만 들 고 웹 - > springboot 웹 을 선택 하 십시오.
    2. kotlin 의존 항목 및 플러그 인 설정 가 져 오기
            
            
                1.8
    			1.3.60
            
    
            
            
                org.jetbrains.kotlin
                kotlin-stdlib-jdk8
                ${kotlin.version}
            
            
                org.jetbrains.kotlin
                kotlin-reflect
                ${kotlin.version}
            
            
                org.jetbrains.kotlin
                kotlin-stdlib
                ${kotlin.version}
            
    
  • copile 시 디 렉 터 리 를 지정 하고 지정 하지 않 으 면 maven 으로 포장 하 는 데 실패 합 니 다
  • 플러그 인 설정: Kotlin 에서 data class 는 기본적으로 구조 방법 이 없 으 며, data class 는 기본적으로 final 형식 이 므 로 계승 할 수 없습니다.주의해 야 할 것 은 우리 가 Spring + Kotlin 모드 를 사용한다 면 @ autowared 를 사용 하면 이 문제 에 부 딪 힐 수 있 습 니 다.따라서 NoArg 를 레이 블 로 하 는 클래스 생 성 무 참 구조 방법 을 추가 할 수 있 습 니 다.AllOpen 을 사용 하여 표 시 된 클래스 에서 final 을 제거 하고 계승 을 허용 합 니 다.
  • 
        kotlin-maven-plugin
        
            1.8
        
        org.jetbrains.kotlin
        ${kotlin.version}
        
            
                compile
                compile
                 compile 
                
                    
                        ${project.basedir}/src/main/java
                        
                    
                
            
            
                test-compile
                test-compile
                 test-compile 
            
        
        
            
                org.jetbrains.kotlin
                kotlin-maven-noarg
                ${kotlin.version}
            
            
                org.jetbrains.kotlin
                kotlin-maven-allopen
                ${kotlin.version}
            
        
    
    

    3. eBean 의존 항목 가 져 오기
    
        mysql
        mysql-connector-java
    
    
    
        io.ebean
        persistence-api
        2.2.1
    
    
        io.ebean
        ebean
        12.1.8
    
    
    
        io.ebean
        ebean-querybean
        12.1.8
    
    
    
        io.ebean
        querybean-generator
        12.1.8
        provided
    
    
    
    
        io.ebean
        ebean-test
        12.1.8
        test
    
    
  • 플러그 인 설정:
  • 
    
        io.repaint.maven
        tiles-maven-plugin
        2.12
        true
        
            
                io.ebean.tile:enhancement:12.1.8 
                io.ebean.tile:kotlin-kapt:1.5 
            
        
    
    

    4. 완전한 pom 파일:
  • 항목 이름, 가방 이름, artifacId 등 정보 수정
  • 
    
        4.0.0
        
            org.springframework.boot
            spring-boot-starter-parent
            2.2.2.RELEASE
             
        
        com.example
        kotlin_and_ebean
        0.0.1-SNAPSHOT
        kotlin_and_ebean
        Demo project for Spring Boot
    
        
            UTF-8
            UTF-8
            1.8
            1.3.60
        
    
        
            
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                org.springframework.boot
                spring-boot-starter-test
                test
                
                    
                        org.junit.vintage
                        junit-vintage-engine
                    
                
            
            
            
                org.jetbrains.kotlin
                kotlin-stdlib-jdk8
                ${kotlin.version}
            
            
                org.jetbrains.kotlin
                kotlin-reflect
                ${kotlin.version}
            
            
                org.jetbrains.kotlin
                kotlin-stdlib
                ${kotlin.version}
            
            
                
                
                
                
            
            
    
            
                mysql
                mysql-connector-java
                8.0.18
            
    
            
            
                io.ebean
                persistence-api
                2.2.1
            
            
                io.ebean
                ebean
                12.1.8
            
            
            
                io.ebean
                ebean-querybean
                12.1.8
            
            
            
                io.ebean
                querybean-generator
                12.1.8
                provided
            
            
            
            
                io.ebean
                ebean-test
                12.1.8
                test
            
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    
                        com.example.kotlin_and_ebean.KotlinAndEbeanApplication
                    
                
                
                
                    kotlin-maven-plugin
                    
                        1.8
                    
                    org.jetbrains.kotlin
                    ${kotlin.version}
                    
                        
                            compile
                            compile
                             compile 
                            
                                
                                    ${project.basedir}/src/main/java
                                    
                                
                            
                        
                        
                            test-compile
                            test-compile
                             test-compile 
                        
                    
                    
                        
                            org.jetbrains.kotlin
                            kotlin-maven-noarg
                            ${kotlin.version}
                        
                        
                            org.jetbrains.kotlin
                            kotlin-maven-allopen
                            ${kotlin.version}
                        
                    
                
                
                    org.apache.maven.plugins
                    maven-compiler-plugin
                    
                        
                            compile
                            compile
                            
                                compile
                            
                        
                        
                            testCompile
                            test-compile
                            
                                testCompile
                            
                        
                    
                
                
                
                    io.repaint.maven
                    tiles-maven-plugin
                    2.12
                    true
                    
                        
                            io.ebean.tile:enhancement:12.1.8 
                            io.ebean.tile:kotlin-kapt:1.5 
                        
                    
                
            
        
    
    

    5. Idea 설정 settings 의 plugins 를 열 고 ebean 11 을 찾 아 Ebean 11 Enhancement 을 추가 한 다음 Idea 를 다시 시작 합 니 다. 메뉴 표시 줄 의 Build 에서 Ebean 11 Enhancement 옵션 을 보고 선택 하 십시오.
    6. resources 폴 더 에 ebean. properties 를 새로 만 들 고 설정 을 추가 합 니 다.
    ebean.search.packages= com.example
    # 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/springboot_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    #   mysql8   ,   mysql5,  mysql5   jar,       cj,  com.mysql.jdbc.Driver
    datasource.db.databaseDriver=com.mysql.cj.jdbc.Driver
    

    7. eBean 을 만 드 는 공장 류
    import io.ebean.EbeanServer;
    import io.ebean.EbeanServerFactory;
    import io.ebean.config.ServerConfig;
    import org.springframework.beans.factory.FactoryBean;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyEbeanServerFactory implements FactoryBean {
    
        public EbeanServer getObject() throws Exception {
            return createEbeanServer();
        }
    
        public Class> getObjectType() {
            return EbeanServer.class;
        }
    
        public boolean isSingleton() {
            return true;
        }
    
        /**
         * Create a EbeanServer instance.
         */
        private EbeanServer createEbeanServer() {
    
            ServerConfig config = new ServerConfig();
            config.setName("db");
    
            // load configuration from ebean.properties,   resources  ebean.properties     
            config.loadFromProperties();
            config.setDefaultServer(true);
            // other programmatic configuration
    
            return EbeanServerFactory.create(config);
        }
    }
    

    8. 실체 클래스 만 들 기
    import javax.persistence.Entity
    import javax.persistence.Id
    import javax.persistence.Table
    
    @Entity
    @Table(name = "t_author")
    class Author{
        @Id
        var id: Long? = null
        var realName: String? = null
        var nickName: String? = null
    }
    

    9. kotlin 은 Ebean 을 사용 합 니 다. 여 기 는 services 를 쓰 지 않 고 controller 를 직접 씁 니 다.
  • ebean 의 조작 방식 은 여러 가지 가 있다.
  • 1. 실체 류 를 통 해 직접 조작 할 수 있다. save (). delete () 등 방법;
  • 2. ebean 에서 생 성 된 'Q 실체 류' 를 통 해 각종 조작 을 할 수 있다.
  • 3. 공장 류 Ebean Server 로 실체 류 를 조작 하거나 원생 sql
  • 을 사용 할 수도 있다.
  • 주의: Author 클래스 만 적 었 습 니 다. Ebean 이 'Q 실체 클래스' 를 포장 해 줄 것 으로 추 정 됩 니 다. 원래는 Maven 으로 포장 한 적 이 있 는데 나중에 QAuthor 클래스 를 사 용 했 습 니 다. 문제 가 없 었 습 니 다. 하지만 pom 으로 프로젝트 를 재 구축 할 때 QAuthor 클래스 를 찾 을 수 없 었 습 니 다. 여러 번 시도 해 보 니 실체 클래스 를 작성 한 후에먼저 Maven copile 을 사용 해 야 target 아래 domain 패키지 에서 Q 실체 류 를 생 성 한 다음 에 Q 실체 류 를 직접 조작 할 수 있 습 니 다.
  • import com.example.kotlin_and_ebean.domain.Author
    import io.ebean.EbeanServer
    import org.springframework.beans.factory.annotation.Autowired
    import org.springframework.web.bind.annotation.RequestMapping
    import org.springframework.web.bind.annotation.RequestMethod
    import org.springframework.web.bind.annotation.RestController
    
    @RestController
    class EbeanController {
        @Autowired
        private lateinit var ebeanServer: EbeanServer
    
        @RequestMapping(value = ["/ebean"], method = [RequestMethod.GET])
        fun getAuthorList(): String {
    //          
            val author = Author()
    //        author.id = 10L
    //        author.realName = "test"
    //        author.nickName = "test"
    //        ebeanServer.save(author)
    //          
            var find = ebeanServer.find(Author::class.java, 1)
            println(find?.nickName)
            return "ebean"
        }
    
        @GetMapping("/testEbean")
        fun testEbean(): List {
            /*
            *   : QAuthor         ,          ,      ,
            *         ,maven compile  ,   target domain    query ,       
            * */
            val authors = QAuthor().setMaxRows(2).findList() //    BeanList
            authors.forEach{
                println(it.id)
            }
            for(item in authors) {
                println(item.nickName)
            }
            return authors
        }
    
        @GetMapping("/testNative")
        fun testNative(): String {
            var findNative = ebeanServer.sqlQuery("select id, real_name from t_author where id <= 2;").findList()
            //      List,   toString  json     
            println(findNative is List)
            return findNative.toString()
        }
    
        @GetMapping("/testKotlin")
        fun testKotlin(): String {
            var arr = intArrayOf(1, 2, 3)
            println(arr[0])
            var arrList = arrayListOf(1, 2, 3)
            arrList.add(4)
            println(arrList)
            var str = "abc"
            str += "$str     :${str.length * 2}"
            println(str)
            arr[0] = 2
            when(arr[0]) {
                1 -> println("nice")
                else -> println("fuck")
            }
            println("==========")
            if(3 in arr) {
                println("3 in arr!")
            }
    //        for((item, index) in arrList.withIndex()) {
    //            println("$item     $index")
    //        }
            arrList.withIndex().forEach{ print(it)}
            var obj = hashMapOf("a" to 1, "b" to 2)
            println(obj)
            return "test kotlin"
        }
    }
    

    10. 자바 는 Ebean 을 사용 합 니 다. 여 기 는 services 를 쓰 지 않 고 contrller 를 직접 씁 니 다.
    @GetMapping("/test2")
    public String test2() {
        Author author = ebeanServer.find(Author.class, 1);
        System.out.println(author.getNickName());
        return "ok";
    }
    

    좋은 웹페이지 즐겨찾기