/bootique-mybatis

Provides LinkMove integration with Bootique

Primary LanguageJavaApache License 2.0Apache-2.0

Build Status Maven Central

bootique-mybatis

Provides MyBatis integration with Bootique.

For additional help/questions about this example send a message to Bootique forum.

Setup

Add bootique-mybatis to your build

Add the dependency on bootique-mybatis to your build. Here is a Maven example:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.bootique.bom</groupId>
            <artifactId>bootique-bom</artifactId>
            <version>X.X</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
...
<dependency>
    <groupId>io.bootique.mybatis</groupId>
    <artifactId>bootique-mybatis</artifactId>
</dependency>

After that you can either configure your mappers in the code and use Bootique-provided DataSource, or use MyBatis XML configuration. Below are a the examples of both.

Mappers Configured in the Code / DataSource Provided by Bootique

Configure MyBatis mappers:

public class MyModule implements Module {

	public void configure(Binder binder) {

		// add annotated Mappers ...
		MybatisModule.extend(binder)
			// ... a whole package of Mappers
			.addMapperPackage(MyMapper1.class.getPackage())
			// ... a single mapper
			.addMapper(MyMapper2.class))
    }
}

Configure DataSource in Bootique:

# Implicit single DataSource. MyBatis will find and use it automatically.
jdbc:
  myds:
    jdbcUrl: "jdbc:mysql://127.0.0.1:3306/mydb"
    username: root
    password: secret
jdbc:
  myds:
    jdbcUrl: "jdbc:mysql://127.0.0.1/mydb"
    username: root
    password: secret

# Explicitly reference a named DataSource
mybatis:
  datasource: myds

Everything is Configured in MyBatis XML

If you'd rather prefer to use MyBatis "canonical" approach with an XML config file, you can still do that (optionally combining it with Bootique-configured DataSource).

First, configure a reference to MyBatis XML:

mybatis:
  environmentId: qa
  config: classpath:mybatis-config.xml

Second create MyBatis config XML as you normally would. In this example it contains the <environment>..</environment> section with DB connection info. If you omit the "environment" config, make sure you configure a Bootique DataSource in YAML as described above.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="default">

        <!-- If "environment" is not provided, Bootique will look for DataSource configuration in YAML -->
        <environment id="qa">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1/mydb"/>
                <property name="username" value="root"/>
                <property name="password" value="secret"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/foo/MyMapper1.xml"/>
        <mapper resource="com/foo/MyMapper2.xml"/>
    </mappers>
</configuration>

Use MyBatis

Regardless of how MyBatis was configured, you can use it in the same way, by injecting SqlSessionManager:

public class MyClass {

	@Inject
	private SqlSessionManager sessionManager;

	public void doSomething() {
		try (SqlSession session = sessionManager.openSession()) {
			MyMapper2 mapper = session.getMapper(MyMapper2.class);
			Optional<O1> o1 = mapper.find(1);
		}
	}
}