-
Notifications
You must be signed in to change notification settings - Fork 6
Quick Start
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.
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 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
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);
}
$ 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 -
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}"""
}
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
}
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)
}
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"))
}
}
$ 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 -
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}"""
}
}
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)
}
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())
}
}
}
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"))
}
}