GithubHelp home page GithubHelp logo

spring-native's Introduction

MyBatis integration with Spring Native feature

Java CI Samples Coverage Status Reliability Rating Security Rating Maintainability Rating

Maven central Sonatype Nexus (Snapshots) License

mybatis-spring

The project that the MyBatis integration with Spring Native feature.

Requirements

Essentials

Translations

How to install on your application

Specify the mybatis-spring-native-core on pom.xml as follows:

Maven:

<dependencies>
  <dependency>
    <groupId>org.mybatis.spring.native</groupId>
    <artifactId>mybatis-spring-native-core</artifactId>
    <version>0.1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

Gradle:

dependencies {
  compile("org.mybatis.spring.native:mybatis-spring-native-core:0.1.0-SNAPSHOT")
}

If you use other extension modules provided by mybatis, please specify the mybatis-spring-native-extensions instead of mybatis-spring-native-core.

Maven:

<dependencies>
  <dependency>
    <groupId>org.mybatis.spring.native</groupId>
    <artifactId>mybatis-spring-native-extensions</artifactId>
    <version>0.1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

Gradle:

dependencies {
  compile("org.mybatis.spring.native:mybatis-spring-native-extensions:0.1.0-SNAPSHOT")
}

Add Sonatype OSS snapshot repository when use MyBatis's snapshot modules.

Maven:

<repositories>
  <repository>
    <id>sonatype-oss-snapshots</id>
    <name>Sonatype OSS Snapshots Repository</name>
   <url>https://oss.sonatype.org/content/repositories/snapshots</url>
  </repository>
</repositories>

Gradle:

repositories {
  maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}

How to build

If you want to build this project, please will execute following procedures.

NOTE: Pre Conditions

Need to following environment variables are defined.

  • JAVA_HOME
  • GRAALVM_HOME

All modules

./mvnw -Pnative clean package

WARNING:

Building all modules takes long time.

Core module and specific sample module

./mvnw -pl core,samples/simple -Pnative clean package

NOTE:

Please replace the 'simple' part on above example to sample's suffix value(e.g. xml, sqlprovider and more) that you want to build.

Extension module and specific sample module

./mvnw -pl core,extensions,samples/thymeleaf -Pnative clean package

How to run a sample

Execute the following command when the build is completed.

Run with Native Image

./samples/simple/target/mybatis-spring-native-sample-simple
2022-01-22 13:45:10.453  INFO 2265 --- [           main] o.s.nativex.NativeListener               : AOT mode enabled

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.3)

2022-01-22 13:45:10.455  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : Starting MybatisSpringNativeSampleApplication v0.1.0-SNAPSHOT using Java 17.0.1 on fv-az136-971 with PID 2265 (/home/runner/work/mybatis-spring-native/mybatis-spring-native/samples/simple/target/mybatis-spring-native-sample-simple started by runner in /home/runner/work/mybatis-spring-native/mybatis-spring-native)
2022-01-22 13:45:10.455  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : No active profile set, falling back to default profiles: default
2022-01-22 13:45:10.487  INFO 2265 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-01-22 13:45:10.491  INFO 2265 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-01-22 13:45:10.496  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : Started MybatisSpringNativeSampleApplication in 0.054 seconds (JVM running for 0.056)
2022-01-22 13:45:10.497  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : New city: City{id=4, name='NYC', state='NY', country='USA'}
2022-01-22 13:45:10.497  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=1, name='San Francisco', state='CA', country='USA'}
2022-01-22 13:45:10.497  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=2, name='Boston', state='MA', country='USA'}
2022-01-22 13:45:10.497  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=3, name='Portland', state='OR', country='USA'}
2022-01-22 13:45:10.497  INFO 2265 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=4, name='NYC', state='NY', country='USA'}
2022-01-22 13:45:10.498  INFO 2265 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-01-22 13:45:10.499  INFO 2265 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Run with executable jar

./samples/simple/target/mybatis-spring-native-sample-simple-exec.jar
2022-01-22 13:45:14.191  INFO 2305 --- [           main] o.s.nativex.NativeListener               : AOT mode disabled

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.3)

2022-01-22 13:45:14.295  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : Starting MybatisSpringNativeSampleApplication v0.1.0-SNAPSHOT using Java 17.0.1 on fv-az136-971 with PID 2305 (/home/runner/work/mybatis-spring-native/mybatis-spring-native/samples/simple/target/mybatis-spring-native-sample-simple-0.1.0-SNAPSHOT-exec.jar started by runner in /home/runner/work/mybatis-spring-native/mybatis-spring-native)
2022-01-22 13:45:14.296  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : No active profile set, falling back to default profiles: default
2022-01-22 13:45:15.349  INFO 2305 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-01-22 13:45:15.578  INFO 2305 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2022-01-22 13:45:15.718  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : Started MybatisSpringNativeSampleApplication in 1.892 seconds (JVM running for 2.406)
2022-01-22 13:45:15.774  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : New city: City{id=4, name='NYC', state='NY', country='USA'}
2022-01-22 13:45:15.804  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=1, name='San Francisco', state='CA', country='USA'}
2022-01-22 13:45:15.805  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=2, name='Boston', state='MA', country='USA'}
2022-01-22 13:45:15.805  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=3, name='Portland', state='OR', country='USA'}
2022-01-22 13:45:15.806  INFO 2305 --- [           main] s.s.MybatisSpringNativeSampleApplication : City{id=4, name='NYC', state='NY', country='USA'}
2022-01-22 13:45:15.816  INFO 2305 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-01-22 13:45:15.823  INFO 2305 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Related Links

Special Thanks

Thanks for helping this project creation!!

spring-native's People

Contributors

awxiaoxian2020 avatar dependabot[bot] avatar hanakeichen avatar hazendaz avatar kazuki43zoo avatar minimalu avatar renovate[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-native's Issues

Mybatis-Plus: Unsatisfied dependency expressed through field 'baseMapper'

BaseMapper.java

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

package com.baomidou.mybatisplus.core.mapper;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;

public interface BaseMapper<T> extends Mapper<T> {
    int insert(T entity);

    int deleteById(Serializable id);

    int deleteById(T entity);

    int deleteByMap(@Param("cm") Map<String, Object> columnMap);

    int delete(@Param("ew") Wrapper<T> queryWrapper);

    int deleteBatchIds(@Param("coll") Collection<?> idList);

    int updateById(@Param("et") T entity);

    int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);

    T selectById(Serializable id);

    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);

    List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);

    default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {
        List<T> ts = this.selectList(queryWrapper);
        if (CollectionUtils.isNotEmpty(ts)) {
            if (ts.size() != 1) {
                throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]);
            } else {
                return ts.get(0);
            }
        } else {
            return null;
        }
    }

    default boolean exists(Wrapper<T> queryWrapper) {
        Long count = this.selectCount(queryWrapper);
        return null != count && count > 0L;
    }

    Long selectCount(@Param("ew") Wrapper<T> queryWrapper);

    List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);

    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);

    List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);

    <P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);

    <P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}

GreetingService.java

public interface GreetingService extends IService<User> {
}

GreetingServiceImpl.java

@Service
public class GreetingServiceImpl extends ServiceImpl<UserMapper, User> implements GreetingService {
    private static final Logger logger = LoggerFactory.getLogger(GreetingServiceImpl.class);
}

UserMapper.java

/**
 * UserMapper
 *
 * @author ZhaDan
 * @version 1.0
 * @date 2022/4/2 上午10:42
 */
public interface UserMapper extends BaseMapper<User> {

}

The logs

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'demoController': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'greetingServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '?' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.aot.beans.factory.InjectedConstructionResolver.resolve(InjectedConstructionResolver.java:88)
        at org.springframework.aot.beans.factory.InjectedElementResolver.resolve(InjectedElementResolver.java:35)
        at org.springframework.aot.beans.factory.InjectedElementResolver.create(InjectedElementResolver.java:66)
        at org.springframework.aot.beans.factory.BeanDefinitionRegistrar$BeanInstanceContext.create(BeanDefinitionRegistrar.java:211)
        at org.springframework.aot.ContextBootstrapInitializer.lambda$initialize$1(ContextBootstrapInitializer.java:159)
        at org.springframework.aot.beans.factory.BeanDefinitionRegistrar$ThrowableFunction.apply(BeanDefinitionRegistrar.java:294)
        at org.springframework.aot.beans.factory.BeanDefinitionRegistrar.lambda$instanceSupplier$0(BeanDefinitionRegistrar.java:115)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:740)
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
        at com.hy.sofa.nativex.amqp.AmqpApplication.main(AmqpApplication.java:86)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
        at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
        at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'greetingServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type '?' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        at org.springframework.aot.beans.factory.InjectedFieldResolver.resolve(InjectedFieldResolver.java:50)
        at org.springframework.aot.beans.factory.InjectedElementResolver.resolve(InjectedElementResolver.java:35)
        at org.springframework.aot.beans.factory.InjectedElementResolver.invoke(InjectedElementResolver.java:53)
        at com.baomidou.mybatisplus.extension.service.impl.ContextBootstrapInitializer.lambda$registerGreetingServiceImpl$1(ContextBootstrapInitializer.java:14)
        at org.springframework.aot.beans.factory.BeanDefinitionRegistrar$ThrowableFunction.apply(BeanDefinitionRegistrar.java:294)
        at org.springframework.aot.beans.factory.BeanDefinitionRegistrar.lambda$instanceSupplier$0(BeanDefinitionRegistrar.java:115)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1389)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1309)
        at org.springframework.aot.beans.factory.InjectedConstructionResolver.lambda$resolve$0(InjectedConstructionResolver.java:83)
        at org.springframework.aot.beans.factory.InjectedConstructionResolver.resolveDependency(InjectedConstructionResolver.java:97)
        at org.springframework.aot.beans.factory.InjectedConstructionResolver.resolve(InjectedConstructionResolver.java:83)
        ... 32 common frames omitted

Dependency Dashboard

This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.


Warning

Renovate failed to look up the following dependencies: Failed to look up maven package org.mybatis.spring.native:mybatis-spring-native-samples.

Files affected: samples/cache/pom.xml, samples/configuration/pom.xml, samples/dao/pom.xml, samples/dynamic-sql/pom.xml, samples/freemarker/pom.xml, samples/scan/pom.xml, samples/simple/pom.xml, samples/sqlprovider/pom.xml, samples/thymeleaf-sqlgenerator/pom.xml, samples/thymeleaf/pom.xml, samples/velocity/pom.xml, samples/xml/pom.xml


Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Detected dependencies

github-actions
.github/workflows/ci.yaml
  • actions/checkout v4
  • actions/setup-java v4
  • actions/cache v4
.github/workflows/codeql.yml
  • actions/checkout v4
  • github/codeql-action v3
  • github/codeql-action v3
  • github/codeql-action v3
.github/workflows/coveralls.yaml
  • actions/checkout v4
  • actions/setup-java v4
  • actions/cache v4
.github/workflows/samples.yaml
  • actions/checkout v4
  • graalvm/setup-graalvm v1
  • actions/cache v4
.github/workflows/site.yaml
  • actions/checkout v4
  • actions/setup-java v4
  • JamesIves/github-pages-deploy-action v4.5.0
.github/workflows/sonar.yaml
  • actions/checkout v4
  • actions/setup-java v4
  • actions/cache v4
.github/workflows/sonatype.yaml
  • actions/checkout v4
  • actions/setup-java v4
  • actions/cache v4
maven
core/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native 0.1.0-SNAPSHOT
docs/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native 0.1.0-SNAPSHOT
extensions/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native 0.1.0-SNAPSHOT
pom.xml
  • org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure 2.3.2
  • org.mybatis:mybatis-parent 42
  • org.mybatis:mybatis 3.5.15
  • org.mybatis:mybatis-spring 2.1.2
  • org.mybatis.spring.boot:mybatis-spring-boot-starter 2.3.2
  • org.mybatis.scripting:mybatis-thymeleaf 1.0.4
  • org.mybatis.scripting:mybatis-velocity 2.1.2
  • org.mybatis.scripting:mybatis-freemarker 1.2.4
  • org.mybatis.dynamic-sql:mybatis-dynamic-sql 1.5.0
  • org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure 2.3.2
  • org.springframework.experimental:spring-native 0.12.2
  • org.springframework.experimental:spring-aot 0.12.2
  • org.springframework.boot:spring-boot-starter-parent 2.7.18
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
  • org.springframework.boot:spring-boot-maven-plugin 2.7.18
  • org.springframework.experimental:spring-aot-maven-plugin 0.12.2
samples/cache/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/configuration/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/dao/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/dynamic-sql/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/freemarker/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native 0.1.0-SNAPSHOT
  • org.graalvm.buildtools:native-maven-plugin 0.10.1
samples/scan/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/simple/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/sqlprovider/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/thymeleaf-sqlgenerator/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/thymeleaf/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/velocity/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
samples/xml/pom.xml
  • org.mybatis.spring.native:mybatis-spring-native-samples 0.1.0-SNAPSHOT
maven-wrapper
.mvn/wrapper/maven-wrapper.properties
  • maven 3.9.6
  • maven-wrapper 3.2.0

  • Check this box to trigger a request for Renovate to run again on this repository

springboot + mybatis-native unittest failed

when run app is ok, but when run unittest will failed:

Caused by: java.io.FileNotFoundException: class path resource 
[file:/Users/xx/.../target/classes/mybatis/mapper/userMapper.xml] cannot be opened because it does not exist
	at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:199)
	at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:609)
	... 164 more

In class MyBatisSpringNativeAutoConfiguration

       resources = holders.stream()
           .flatMap(holder -> holder.getMapperLocations().stream().map(ClassPathResource::new)).toArray(
               Resource[]::new);

Because mapperLocations is full file path, the resource can be FileSystemResource can not be ClassPathResource!
When in the test project ,mapper files are in test resources,so the full file path can remove the baseUrl,but commons mapper files are in src/main/resource path, so in the method: org.mybatis.spring.nativex.MyBatisScannedResourcesHolder.Registrar#toPath, url.startsWith(baseUrl) is false.

Maybe can change code like this, just change code in org.mybatis.spring.nativex.MyBatisScannedResourcesHolder.Registrar#toPath, the url index "target/test-classes" or "target/classes", remove the prefix.

    private static final String TEST_CLASSPATH= "target/test-classes/";
    private static final String CLASSPATH= "target/classes/";
    private String toPath(Resource resource, String baseUrl) {
      try {
        String url = resource.getURL().toString();
        String path = url;
        int indexTestClassPath = url.indexOf(TEST_CLASSPATH);
        int indexClassPath = url.indexOf(CLASSPATH);
        if (url.startsWith(baseUrl)) {
          path = url.replace(baseUrl, "");
        } else if (indexTestClassPath > 0) {
          path = url.substring(indexTestClassPath+TEST_CLASSPATH.length());
        } else if (indexClassPath > 0) {
          path = url.substring(indexClassPath+CLASSPATH.length());
  ...

springboot 3.2.0 AOT Parameter 0 of constructor in org.mybatis.spring.mapper.MapperFactoryBean required a bean of type 'java.lang.Class' that could not be found.

2023-11-27 13:22:24 2023-11-27T05:22:24.071Z WARN 1 --- [mnative] [ main] c.a.nacos.client.logging.NacosLogging : Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml
2023-11-27 13:22:24
2023-11-27 13:22:24 . ____ _ __ _ _
2023-11-27 13:22:24 /\ / ' __ _ () __ __ _ \ \ \
2023-11-27 13:22:24 ( ( )_
_ | '_ | '| | ' / ` | \ \ \
2023-11-27 13:22:24 \/ )| |)| | | | | || (| | ) ) ) )
2023-11-27 13:22:24 ' |
| .__|| ||| |_, | / / / /
2023-11-27 13:22:24 =========|
|==============|/=////
2023-11-27 13:22:24 :: Spring Boot :: (v3.2.0)
2023-11-27 13:22:24
2023-11-27 13:22:24 2023-11-27T05:22:24.076Z WARN 1 --- [mnative] [ main] c.a.nacos.client.logging.NacosLogging : Load Logback Configuration of Nacos fail, message: Could not initialize Logback Nacos logging from classpath:nacos-logback.xml
2023-11-27 13:22:24 2023-11-27T05:22:24.076Z INFO 1 --- [mnative] [ main] c.waitylyou.mnative.MnativeApplication : Starting AOT-processed MnativeApplication using Java 17.0.8.1 with PID 1 (/workspace/com.waitylyou.mnative.MnativeApplication started by cnb in /workspace)
2023-11-27 13:22:24 2023-11-27T05:22:24.076Z INFO 1 --- [mnative] [ main] c.waitylyou.mnative.MnativeApplication : No active profile set, falling back to 1 default profile: "default"
2023-11-27 13:22:24 2023-11-27T05:22:24.076Z WARN 1 --- [mnative] [ main] c.a.c.n.c.NacosConfigDataLoader : [Nacos Config] config[dataId=mnative.yaml, group=DEFAULT_GROUP] is empty
2023-11-27 13:22:24 2023-11-27T05:22:24.078Z INFO 1 --- [mnative] [ main] o.s.cloud.context.scope.GenericScope : BeanFactory id=ae57a5b1-3c12-310d-9570-f04dfa305bb1
2023-11-27 13:22:24 2023-11-27T05:22:24.100Z WARN 1 --- [mnative] [ main] io.undertow.websockets.jsr : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2023-11-27 13:22:24 2023-11-27T05:22:24.101Z INFO 1 --- [mnative] [ main] io.undertow.servlet : Initializing Spring embedded WebApplicationContext
2023-11-27 13:22:24 2023-11-27T05:22:24.101Z INFO 1 --- [mnative] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 25 ms
2023-11-27 13:22:24 2023-11-27T05:22:24.107Z WARN 1 --- [mnative] [ main] w.s.c.ServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'myController': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'myServiceImpl': Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'allocateOperationMapper': Unsatisfied dependency expressed through constructor parameter 0: No qualifying bean of type 'java.lang.Class<?>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
2023-11-27 13:22:24 2023-11-27T05:22:24.108Z ERROR 1 --- [mnative] [ main] o.s.b.d.LoggingFailureAnalysisReporter :
2023-11-27 13:22:24
2023-11-27 13:22:24 ***************************
2023-11-27 13:22:24 APPLICATION FAILED TO START
2023-11-27 13:22:24 ***************************
2023-11-27 13:22:24
2023-11-27 13:22:24 Description:
2023-11-27 13:22:24
2023-11-27 13:22:24 Parameter 0 of constructor in org.mybatis.spring.mapper.MapperFactoryBean required a bean of type 'java.lang.Class' that could not be found.
2023-11-27 13:22:24
2023-11-27 13:22:24
2023-11-27 13:22:24 Action:
2023-11-27 13:22:24
2023-11-27 13:22:24 Consider defining a bean of type 'java.lang.Class' in your configuration.
2023-11-27 13:22:24
2023-11-27 13:22:24 2023-11-27T05:22:24.109Z WARN 1 --- [mnative] [ Thread-7] c.a.nacos.common.notify.NotifyCenter : [NotifyCenter] Start destroying Publisher
2023-11-27 13:22:24 2023-11-27T05:22:24.109Z WARN 1 --- [mnative] [ Thread-7] c.a.nacos.common.notify.NotifyCenter : [NotifyCenter] Destruction of the end
2023-11-27 13:22:24 2023-11-27T05:22:24.147Z WARN 1 --- [mnative] [ Thread-2] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Start destroying common HttpClient
2023-11-27 13:22:24 2023-11-27T05:22:24.147Z WARN 1 --- [mnative] [ Thread-2] c.a.n.common.http.HttpClientBeanHolder : [HttpClientBeanHolder] Destruction of the end

Need help getting build working on GHA!!!

I've sync'd up the build as much as possible to all the others in mybatis. Its output is a lot cleaner now as it no longer shows download transfers so this is easier to find. If you look at my PR #120 as well as fact same has been occurring for a while, the below will be seen. I'm not up on any of this native stuff so I don't know exactly what this is trying to tell us. If you have some time can you take a look into this?

Error: Classes that should be initialized at run time got initialized during image building:
 org.springframework.core.annotation.RepeatableContainers was unintentionally initialized at build time. To see why org.springframework.core.annotation.RepeatableContainers got initialized use --trace-class-initialization=org.springframework.core.annotation.RepeatableContainers
------------------------------------------------------------------------------------------------------------------------
org.springframework.core.annotation.RepeatableContainers$NoRepeatableContainers was unintentionally initialized at build time. To see why org.springframework.core.annotation.RepeatableContainers$NoRepeatableContainers got initialized use --trace-class-initialization=org.springframework.core.annotation.RepeatableContainers$NoRepeatableContainers

@MyBatisResourcesScan occurred error on windows about mapperLocationPatterns

My code is like this below:
@MyBatisResourcesScan(mapperLocationPatterns = "classpath*:**/mapper/*Mapper.xml")
The error log :(Removed private information)
java.io.UncheckedIOException: org.springframework.core.NestedIOException: Invalid URI [jar:file:G:.m2\repository\net\xxxxx\user-base\1.0.0\user-base-1.0.0.jar!/base/mapper/SysUserMapper.xml]; nested exception is java.net.URISyntaxException: Illegal character in opaque part at index xx: jar:file:G:.m2\repository\net\xxxxx\user-base\1.0.0\user-base-1.0.0.jar!/base/mapper/SysUserMapper.xml

This error should be caused by windows backslashes, I don't know how to fix it.

When using @MyBatisResourcesScan [mvn install], com.sun.tools.javac.code.Symbol$CompletionFailure: the [org.springframework.nativex.hint.TypeAccess] class file cannot be found

When using @MyBatisResourcesScan [mvn install], com.sun.tools.javac.code.Symbol$CompletionFailure: the [org.springframework.nativex.hint.TypeAccess] class file cannot be found

[INFO] --- maven-compiler-plugin:3.11.0:compile (default-compile) @ mnative ---
[INFO] Changes detected - recompiling the module! :source
[INFO] Compiling 6 source files with javac [debug release 17] to target\classes
编译器 (17.0.5) 中出现异常错误。如果在 Bug Database (http://bugs.java.com) 中没有找到该错误,请通过 Java Bug 报告页 (http://bugreport.java.com) 建立该 Java 编译器 Bug。请在报告中附上您的程序、以下诊断信息以及传递到 Java 编译器的参数。谢谢。
com.sun.tools.javac.code.Symbol$CompletionFailure: 找不到org.springframework.nativex.hint.TypeAccess的类文件

Success can be achieved without using @ MyBatisResourcesScan [mvn install]

springboot-version:3.1.5
mybatis-spring-boot-starter:3.0.2
mybatis-spring-native-core:0.1.0-SNAPSHOT

java version "17.0.5" 2022-10-18 LTS
Java(TM) SE Runtime Environment GraalVM EE 22.3.0 (build 17.0.5+9-LTS-jvmci-22.3-b07)
Java HotSpot(TM) 64-Bit Server VM GraalVM EE 22.3.0 (build 17.0.5+9-LTS-jvmci-22.3-b07, mixed mode, sharing)

Fail bean initializing when specify @Transactional on mapper interface

Mapper

@Mapper
@Transactional
public interface CityMapper {

  @Insert("INSERT INTO city (name, state, country) VALUES(#{name}, #{state}, #{country})")
  @Options(useGeneratedKeys = true, keyProperty = "id")
  void insert(City city);

  @Select("SELECT id, name, state, country FROM city ")
  Collection<City> findAll();

}

Error message

...
2022-01-15 09:42:12.915 WARN 14906 --- [ main] o.s.c.support.GenericApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'mybatisSpringNativeSampleApplication.MyService': Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cityMapper': Post-processing of FactoryBean's singleton object failed; nested exception is com.oracle.svm.core.jdk.UnsupportedFeatureError: Proxy class defined by interfaces [interface org.mybatis.spring.nativex.sample.simple.CityMapper, interface org.springframework.aop.SpringProxy, interface org.springframework.aop.framework.Advised, interface org.springframework.core.DecoratingProxy] not found. Generating proxy classes at runtime is not supported. Proxy classes need to be defined at image build time by specifying the list of interfaces that they implement. To define proxy classes use -H:DynamicProxyConfigurationFiles= and -H:DynamicProxyConfigurationResources= options.
2022-01-15 09:42:12.916 ERROR 14906 --- [ main] o.s.boot.SpringApplication : Application run failed
...

Springboot3 + MyBatis ExceptionInInitializerError

I want to use GraalVM to compile Springboot3 (version 3.0.6) project with MyBatis3 (version 3.5.13), the compile process finished successfully, but when I run the generated .exe file, it throws the following error:

java.lang.ExceptionInInitializerError: null
        at org.mybatis.spring.mapper.MapperScannerConfigurer.postProcessBeanDefinitionRegistry(MapperScannerConfigurer.java:363) ~[web.exe:3.0.1]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:344) ~[na:na]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:145) ~[na:na]
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:747) ~[web.exe:6.0.8]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:565) ~[web.exe:6.0.8]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[web.exe:3.0.6]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[web.exe:3.0.6]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[web.exe:3.0.6]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310) ~[web.exe:3.0.6]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1304) ~[web.exe:3.0.6]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1293) ~[web.exe:3.0.6]
        at com.adil.bms.web.BmsApplication.main(BmsApplication.java:19) ~[web.exe:na]
Caused by: org.apache.ibatis.logging.LogException: Error creating logger for logger org.mybatis.spring.mapper.ClassPathMapperScanner.  Cause: java.lang.NullPointerException
        at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:54) ~[na:na]
        at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:47) ~[na:na]
        at org.mybatis.logging.LoggerFactory.getLogger(LoggerFactory.java:32) ~[na:na]
        at org.mybatis.spring.mapper.ClassPathMapperScanner.<clinit>(ClassPathMapperScanner.java:61) ~[na:na]
        ... 12 common frames omitted
Caused by: java.lang.NullPointerException: null
        at org.apache.ibatis.logging.LogFactory.getLog(LogFactory.java:52) ~[na:na]
        ... 15 common frames omitted

Is there any configuration I am missing?
Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.