Skip to content

Quick Start

Kazuki Shimizu edited this page Dec 7, 2022 · 7 revisions

Let's try mybatis-thymeleaf quickly using the Spring Boot! Basically, Please see the mybatis-spring-boot-starter's Quick Start on GitHub wiki page. In this page, we introduce usage in three JVM based language.

Common

Add dependency and repository on Maven project file

Add mybatis-thymeleaf into dependency on pom.xml.

<dependencies>
  <dependency>
    <groupId>org.mybatis.scripting</groupId>
    <artifactId>mybatis-thymeleaf</artifactId>
    <version>1.0.4</version>
  </dependency>
</dependencies>

Configure Spring Boot configuration

Configure to use mybatis-thymeleaf feature in configuration properties file(src/main/resources/application.properties).

# Enable mybatis-thymeleaf feature
mybatis.configuration.default-scripting-language=org.mybatis.scripting.thymeleaf.ThymeleafLanguageDriver

# Workaround for https://github.com/spring-projects/spring-boot/issues/16079
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration

Java

Create a mapper interface

src/main/java/com/example/mybatissample/CityMapper.java

package com.example.mybatissample;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface CityMapper {

  @Insert({
    "INSERT INTO city (name, state, country) VALUES(",
      "/*[# mb:p='name']*/ 'Name' /*[/]*/,",
      "/*[# mb:p='state']*/ 'State' /*[/]*/,",
      "/*[# mb:p='country']*/ 'country' /*[/]*/,",
    ")"
  })
  @Options(useGeneratedKeys = true, keyProperty = "id")
  void insert(City city);

  @Select({
    "SELECT id, name, state, country FROM city",
    "WHERE id = /*[# mb:p='id']*/ 1 /*[/]*/"
  })
  City findById(long id);

}

Kotlin

Create a project

$ curl -s https://start.spring.io/starter.tgz\
       -d name=mybatis-sample\
       -d artifactId=mybatis-sample\
       -d dependencies=mybatis,h2\
       -d baseDir=mybatis-sample\
       -d language=kotlin\
       | tar -xzvf -

Create a domain class

src/main/kotlin/com/example/mybatissample/City.kt

package com.example.mybatissample

class City {
  var id: Long = 0
  var name: String? = null
  var state: String? = null
  var country: String? = null

  override fun toString(): String = """${id},${name},${state},${country}"""
}

Create a mapper interface

src/main/kotlin/com/example/mybatissample/CityMapper.kt

package com.example.mybatissample

import org.apache.ibatis.annotations.Insert
import org.apache.ibatis.annotations.Mapper
import org.apache.ibatis.annotations.Options
import org.apache.ibatis.annotations.Select

@Mapper
interface CityMapper {

  @Insert("""
    INSERT INTO city (name, state, country) VALUES(
      /*[# mb:p="name"]*/ 'Name' /*[/]*/,
      /*[# mb:p="state"]*/ 'State' /*[/]*/,
      /*[# mb:p="country"]*/ 'Country' /*[/]*/
    )
  """)
  @Options(useGeneratedKeys = true, keyProperty = "id")
  fun insert(city: City)

  @Select("""
    SELECT id, name, state, country FROM city
    WHERE id = /*[# mb:p="id"]*/ 1 /*[/]*/
  """)
  fun findById(id: Long): City

}

Modify a spring boot application class

src/main/kotlin/com/example/mybatissample/MybatisSampleApplication.kt

package com.example.mybatissample

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.CommandLineRunner
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication
import org.springframework.context.annotation.Bean

@SpringBootApplication
class MybatisSampleApplication {

  @Autowired
  lateinit var cityMapper: CityMapper

  @Bean
  fun sampleCommandLineRunner(): CommandLineRunner = CommandLineRunner {
    val city = City()
    city.name = "San Francisco"
    city.state = "CA"
    city.country = "US"
    cityMapper.insert(city)
    System.out.println(this.cityMapper.findById(city.id))
  }

}

fun main(args: Array<String>) {
  runApplication<MybatisSampleApplication>(*args)
}

Modify a spring boot application test class

src/test/kotlin/com/example/mybatissample/MybatisSampleApplicationTests.kt

package com.example.mybatissample

import org.hamcrest.Matchers.containsString
import org.junit.ClassRule
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.rule.OutputCapture
import org.springframework.test.context.junit4.SpringRunner

@RunWith(SpringRunner::class)
@SpringBootTest
class MybatisSampleApplicationTests {

  companion object {
    @ClassRule
    @JvmField
    val out = OutputCapture()
  }

  @Test
  fun contextLoads() {
    out.expect(containsString("1,San Francisco,CA,US"))
  }

}

Groovy

Create a project

$ curl -s https://start.spring.io/starter.tgz\
       -d name=mybatis-sample\
       -d artifactId=mybatis-sample\
       -d dependencies=mybatis,h2\
       -d baseDir=mybatis-sample\
       -d language=groovy\
       | tar -xzvf -

Create a domain class

src/main/groovy/com/example/mybatissample/City.groovy

package com.example.mybatissample

class City {
  Long id
  String name
  String state
  String country
  
  @Override
  String toString() {
    """${id},${name},${state},${country}"""
  }
}

Create a mapper interface

src/main/groovy/com/example/mybatissample/CityMapper.groovy

package com.example.mybatissample

import org.apache.ibatis.annotations.Insert
import org.apache.ibatis.annotations.Mapper
import org.apache.ibatis.annotations.Options
import org.apache.ibatis.annotations.Select

@Mapper
interface CityMapper {

  @Insert('''
    INSERT INTO city (name, state, country) VALUES(
      /*[# mb:p="name"]*/ 'Name' /*[/]*/,
      /*[# mb:p="state"]*/ 'State' /*[/]*/,
      /*[# mb:p="country"]*/ 'Country' /*[/]*/
    )
  ''')
  @Options(useGeneratedKeys = true, keyProperty = "id")
  void insert(City city)
  
  @Select('''
    SELECT id, name, state, country FROM city
    WHERE id = /*[# mb:p="id"]*/ 1 /*[/]*/
  ''')
  City findById(long id)
  
}

Modify a spring boot application class

src/main/groovy/com/example/mybatissample/MybatisSampleApplication.groovy

package com.example.mybatissample

import org.springframework.boot.CommandLineRunner
import org.springframework.boot.SpringApplication
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.context.annotation.Bean

@SpringBootApplication
class MybatisSampleApplication {
  
  static void main(String[] args) {
    SpringApplication.run(MybatisSampleApplication, args)
  }
  
  @Bean
  CommandLineRunner sampleCommandLineRunner(CityMapper cityMapper) {
    new SampleCommandLineRunner(cityMapper)
  }
  
  static class SampleCommandLineRunner implements CommandLineRunner {
    private final CityMapper cityMapper;
    
    SampleCommandLineRunner(CityMapper cityMapper) {
      this.cityMapper = cityMapper;
    }
    
    @Override
    void run(String... args) {
      def city = new City(name: "San Francisco", state: "CA", country: "US")
      cityMapper.insert(city)
      println this.cityMapper.findById(city.getId())
    }

  }
  
}

Modify a spring boot application test class

src/test/groovy/com/example/mybatissample/MybatisSampleApplicationTests.groovy

package com.example.mybatissample

import org.junit.ClassRule
import org.junit.Test
import org.junit.runner.RunWith
import org.springframework.boot.test.context.SpringBootTest
import org.springframework.boot.test.rule.OutputCapture
import org.springframework.test.context.junit4.SpringRunner

import static org.hamcrest.Matchers.containsString

@RunWith(SpringRunner)
@SpringBootTest
class MybatisSampleApplicationTests {
  
  @ClassRule
  public static OutputCapture out = new OutputCapture()
  
  @Test
  void contextLoads() {
    out.expect(containsString("1,San Francisco,CA,US"))
  }
  
}
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy