Как использовать «MyBatis-CDI» с «Микронавтом» - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь использовать «MyBatis-CDI» с «Micronaut», но я не могу ввести Mapper.

io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [docloud.mappers.UserMapper] exists.

Я думаю, что проблема в SqlSessionFactory, потому что я не могу использовать @ApplicationScoped

public class MyBatisFactory {

    @Context
    @Produces
    @SessionFactoryProvider
    SqlSessionFactory sqlSessionFactory() throws IOException {
        String resources = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resources);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

}

Интерфейс Mapper

import org.mybatis.cdi.Mapper;

@Mapper
public interface DocumentMapper {
...
}

mybatis-config.xml

<?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="dev">
        <environment id="dev">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="org.postgresql.Driver" />
                <property name="url" value="------------"/>
                <property name="username" value="-------"/>
                <property name="password" value="-------"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mappers/UserMapper.xml" />
        <mapper resource="mappers/DocumentMapper.xml" />
        <mapper resource="mappers/PermissionMapper.xml" />
    </mappers>
</configuration>

У вас есть идеи, как это исправить? Проблема существует только если хотите использовать MyBatis-CDI

1 Ответ

0 голосов
/ 07 мая 2019

попробуйте ниже приведенный код, чтобы использовать mybatis.

import io.micronaut.context.annotation.Context;
import io.micronaut.context.annotation.Factory;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;

import javax.sql.DataSource;

@Factory
public class MybatisFactory {

    final DataSource dataSource;

    public MybatisFactory(DataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Context
    SqlSessionFactory sessionFactory() {

        TransactionFactory transactionFactory = new JdbcTransactionFactory();
        Environment environment  = new Environment("developpment", transactionFactory, dataSource);

        Configuration configuration = new Configuration(environment);
        configuration.addMappers("issue.service");

        return new SqlSessionFactoryBuilder().build(configuration);
    }
}

application.yml

datasources:
    default:
        url: jdbc:mysql://localhost:3306/test
        username: root
        password: secret
        driverClassName: com.mysql.jdbc.Driver
...