Usare l'interfaccia e le annotazioni con MyBatis

di il
16 risposte

Usare l'interfaccia e le annotazioni con MyBatis

Sto studiando questa webapp realizzata con MyBatis:
https://github.com/Apress/beg-spring-boot-2/tree/master/chapter-06/springboot-mybatis-demo
Passano tutti i 3 test se uso il file .xml, sia su H2 che MySQL 8.0.21 installato localmente.
Con MySQL passano solo 2 test se uso l'interfaccia con le annotazioni in sostituzione del file .xml (createUser non passa).
Con H2 passano tutti i 3 test se uso l'interfaccia con le annotazioni in sostituzione del file .xml.
IntelliJ mi segna un errore su:

@Autowired private UserMapper userMapper;
@Autowired private UserAnnotationMapper userMapper;
Ovviamente non li uso in modo simultaneo, aggiungo "//" prima di ogni avvio sul codice che non mi serve.
Questa è la classe test:

package com.apress.demo;

import com.apress.demo.domain.User;
import com.apress.demo.mappers.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

import static org.junit.Assert.*;

/**
 * @author Siva
 *
 */

@RunWith(SpringRunner.class)
@SpringBootTest//(classes=SpringbootMyBatisDemoApplication.class)
public class SpringbootMyBatisDemoApplicationTests
{

	@Autowired private UserMapper userMapper;
	//@Autowired private UserAnnotationMapper userMapper;
	
	@Test
	public void findAllUsers()  {
		List<User> users = userMapper.findAllUsers();
		assertNotNull(users);
		assertTrue(!users.isEmpty());
		
	}
	
	@Test
	public void findUserById()  {
		User user = userMapper.findUserById(1);
		assertNotNull(user);
	}
	
	@Test
	public void createUser() {
		User user = new User(0, "george", "george@gmail.com");
		userMapper.insertUser(user);
		User newUser = userMapper.findUserById(user.getId());
		assertEquals("george", newUser.getName());
		assertEquals("george@gmail.com", newUser.getEmail());
	}
}

Questo invece il Mapper che da problemi:

/**
 * 
 */
package com.apress.demo.mappers;

import java.util.List;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.SelectKey;

import com.apress.demo.domain.User;

/**
 * @author Siva
 *
 */
public interface UserAnnotationMapper
{
	@Insert("insert into users(name,email) values(#{name},#{email})")
	@SelectKey(statement="call identity()", keyProperty="id", before=false, resultType=Integer.class)
	void insertUser(User user);

	@Select("select id, name, email from users WHERE id=#{id}")
	User findUserById(Integer id);

	@Select("select id, name, email from users")
	List<User> findAllUsers();
	
}
Ottengo questo:

"C:\Program Files (x86)\Java\jre1.8.0_261\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar=58891:C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\plugins\junit\lib\junit-rt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\charsets.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\deploy.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\javaws.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jce.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfr.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfxswt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jsse.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\management-agent.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\plugin.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\resources.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\rt.jar;C:\DATI\IntelliJ\06-springboot-mybatis-demo\target\test-classes;C:\DATI\IntelliJ\06-springboot-mybatis-demo\target\classes;C:\Users\DELL\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.0\mybatis-spring-boot-starter-1.3.0.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-2.0.0.BUILD-20180301.043915-633.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot\2.0.0.BUILD-SNAPSHOT\spring-boot-2.0.0.BUILD-20180301.043920-633.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-context\5.0.4.RELEASE\spring-context-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-aop\5.0.4.RELEASE\spring-aop-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-expression\5.0.4.RELEASE\spring-expression-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.0.BUILD-SNAPSHOT\spring-boot-autoconfigure-2.0.0.BUILD-20180301.043806-635.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-logging-2.0.0.BUILD-20180301.043903-634.jar;C:\Users\DELL\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\DELL\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\DELL\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\DELL\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\DELL\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\DELL\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\DELL\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-jdbc-2.0.0.BUILD-20180301.043858-634.jar;C:\Users\DELL\.m2\repository\com\zaxxer\HikariCP\2.7.8\HikariCP-2.7.8.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-jdbc\5.0.4.RELEASE\spring-jdbc-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-beans\5.0.4.RELEASE\spring-beans-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-tx\5.0.4.RELEASE\spring-tx-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.0\mybatis-spring-boot-autoconfigure-1.3.0.jar;C:\Users\DELL\.m2\repository\org\mybatis\mybatis\3.4.4\mybatis-3.4.4.jar;C:\Users\DELL\.m2\repository\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-test-2.0.0.BUILD-20180301.043908-634.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-test\2.0.0.BUILD-SNAPSHOT\spring-boot-test-2.0.0.BUILD-20180301.043918-633.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.0.BUILD-SNAPSHOT\spring-boot-test-autoconfigure-2.0.0.BUILD-20180301.043917-633.jar;C:\Users\DELL\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\DELL\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\DELL\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\DELL\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\DELL\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\DELL\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\DELL\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\DELL\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\DELL\.m2\repository\net\bytebuddy\byte-buddy\1.7.10\byte-buddy-1.7.10.jar;C:\Users\DELL\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.10\byte-buddy-agent-1.7.10.jar;C:\Users\DELL\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\DELL\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\DELL\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\DELL\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\DELL\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-core\5.0.4.RELEASE\spring-core-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-jcl\5.0.4.RELEASE\spring-jcl-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-test\5.0.4.RELEASE\spring-test-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\DELL\.m2\repository\mysql\mysql-connector-java\8.0.21\mysql-connector-java-8.0.21.jar;C:\Users\DELL\.m2\repository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar;C:\Users\DELL\.m2\repository\com\h2database\h2\1.4.196\h2-1.4.196.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 @w@C:\Users\DELL\AppData\Local\Temp\idea_working_dirs_junit.tmp @C:\Users\DELL\AppData\Local\Temp\idea_junit.tmp -socket58890
22:30:59.337 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.348 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
22:30:59.358 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
22:30:59.376 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
22:30:59.397 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests], using SpringBootContextLoader
22:30:59.403 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]: class path resource [com/apress/demo/SpringbootMyBatisDemoApplicationTests-context.xml] does not exist
22:30:59.403 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]: class path resource [com/apress/demo/SpringbootMyBatisDemoApplicationTestsContext.groovy] does not exist
22:30:59.403 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]: no resource found for suffixes {-context.xml, Context.groovy}.
22:30:59.459 [main] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.695 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]: using defaults.
22:30:59.696 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
22:30:59.719 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Skipping candidate TestExecutionListener [org.springframework.test.context.web.ServletTestExecutionListener] due to a missing dependency. Specify custom listener classes or make the default listener classes and their required dependencies available. Offending class: [javax/servlet/ServletContext]
22:30:59.756 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@b66d36, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@23e5ee, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@1ef2d72, org.springframework.test.context.support.DirtiesContextTestExecutionListener@1b2283a, org.springframework.test.context.transaction.TransactionalTestExecutionListener@a637e7, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@1e7aac8, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@1119efb, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@19a969b, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@908cc0, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@73d930, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@1047d03]
22:30:59.765 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.766 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
ID associato all'utente: 0
2020-08-01 22:31:02.387  INFO 9952 --- [           main] o.s.b.f.xml.XmlBeanDefinitionReader      : Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2020-08-01 22:31:02.419  INFO 9952 --- [           main] o.s.jdbc.support.SQLErrorCodesFactory    : SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase, Hana]

org.springframework.jdbc.BadSqlGrammarException: Error selecting key or setting result to parameter object. Cause: java.sql.SQLSyntaxErrorException: PROCEDURE test.identity does not exist
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: PROCEDURE test.identity does not exist

	at org.springframework.jdbc.support.SQLExceptionSubclassTranslator.doTranslate(SQLExceptionSubclassTranslator.java:93)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
	at com.sun.proxy.$Proxy57.insert(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
	at com.sun.proxy.$Proxy64.insertUser(Unknown Source)
	at com.apress.demo.SpringbootMyBatisDemoApplicationTests.createUser(SpringbootMyBatisDemoApplicationTests.java:65)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)
	at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)
	at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
	at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
	at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
	at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
	at org.junit.runners.Suite.runChild(Suite.java:128)
	at org.junit.runners.Suite.runChild(Suite.java:27)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
Caused by: java.sql.SQLSyntaxErrorException: PROCEDURE test.identity does not exist
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370)
	at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44)
	at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:63)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:83)
	at org.apache.ibatis.executor.keygen.SelectKeyGenerator.processGeneratedKeys(SelectKeyGenerator.java:68)
	at org.apache.ibatis.executor.keygen.SelectKeyGenerator.processAfter(SelectKeyGenerator.java:54)
	at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:50)
	at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74)
	at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50)
	at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
	at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
	... 44 more

22:30:59.781 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.781 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.786 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.786 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.787 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.787 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.787 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.787 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.793 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@1c43bd9 testClass = SpringbootMyBatisDemoApplicationTests, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [MergedContextConfiguration@174bf60 testClass = SpringbootMyBatisDemoApplicationTests, locations = '{}', classes = '{class com.apress.demo.SpringbootMyBatisDemoApplication, class com.apress.demo.SpringbootMyBatisDemoApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6d1014, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1554b06, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@cdbdf5, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@8931cf], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map[[empty]]], class annotated with @DirtiesContext [false] with mode [null].
22:30:59.793 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.793 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.apress.demo.SpringbootMyBatisDemoApplicationTests]
22:30:59.799 [main] DEBUG org.springframework.test.context.support.DependencyInjectionTestExecutionListener - Performing dependency injection for test context [[DefaultTestContext@1c43bd9 testClass = SpringbootMyBatisDemoApplicationTests, testInstance = com.apress.demo.SpringbootMyBatisDemoApplicationTests@122c3c3, testMethod = [null], testException = [null], mergedContextConfiguration = [MergedContextConfiguration@174bf60 testClass = SpringbootMyBatisDemoApplicationTests, locations = '{}', classes = '{class com.apress.demo.SpringbootMyBatisDemoApplication, class com.apress.demo.SpringbootMyBatisDemoApplication}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@6d1014, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1554b06, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@cdbdf5, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@8931cf], contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map[[empty]]]].
22:30:59.847 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
22:30:59.848 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
22:30:59.850 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@2442716 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files (x86)\Java\jre1.8.0_261\bin, java.vm.version=25.261-b12, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) Client VM, file.encoding.pkg=sun.io, user.country=IT, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=C:\DATI\IntelliJ\06-springboot-mybatis-demo, java.runtime.version=1.8.0_261-b12, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files (x86)\Java\jre1.8.0_261\lib\endorsed, os.arch=x86, java.io.tmpdir=C:\Users\DELL\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=Cp1252, java.library.path=C:\Program Files (x86)\Java\jre1.8.0_261\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\DELL\AppData\Local\Microsoft\WindowsApps;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot Client Compiler, os.version=10.0, user.home=C:\Users\DELL, user.timezone=Europe/Berlin, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\plugins\junit\lib\junit5-rt.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\plugins\junit\lib\junit-rt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\charsets.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\deploy.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\javaws.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jce.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfr.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfxswt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jsse.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\management-agent.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\plugin.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\resources.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\rt.jar;C:\DATI\IntelliJ\06-springboot-mybatis-demo\target\test-classes;C:\DATI\IntelliJ\06-springboot-mybatis-demo\target\classes;C:\Users\DELL\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-starter\1.3.0\mybatis-spring-boot-starter-1.3.0.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-2.0.0.BUILD-20180301.043915-633.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot\2.0.0.BUILD-SNAPSHOT\spring-boot-2.0.0.BUILD-20180301.043920-633.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-context\5.0.4.RELEASE\spring-context-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-aop\5.0.4.RELEASE\spring-aop-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-expression\5.0.4.RELEASE\spring-expression-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.0.BUILD-SNAPSHOT\spring-boot-autoconfigure-2.0.0.BUILD-20180301.043806-635.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-logging-2.0.0.BUILD-20180301.043903-634.jar;C:\Users\DELL\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;C:\Users\DELL\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;C:\Users\DELL\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;C:\Users\DELL\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;C:\Users\DELL\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;C:\Users\DELL\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;C:\Users\DELL\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-jdbc-2.0.0.BUILD-20180301.043858-634.jar;C:\Users\DELL\.m2\repository\com\zaxxer\HikariCP\2.7.8\HikariCP-2.7.8.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-jdbc\5.0.4.RELEASE\spring-jdbc-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-beans\5.0.4.RELEASE\spring-beans-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-tx\5.0.4.RELEASE\spring-tx-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\1.3.0\mybatis-spring-boot-autoconfigure-1.3.0.jar;C:\Users\DELL\.m2\repository\org\mybatis\mybatis\3.4.4\mybatis-3.4.4.jar;C:\Users\DELL\.m2\repository\org\mybatis\mybatis-spring\1.3.1\mybatis-spring-1.3.1.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.0.BUILD-SNAPSHOT\spring-boot-starter-test-2.0.0.BUILD-20180301.043908-634.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-test\2.0.0.BUILD-SNAPSHOT\spring-boot-test-2.0.0.BUILD-20180301.043918-633.jar;C:\Users\DELL\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.0.BUILD-SNAPSHOT\spring-boot-test-autoconfigure-2.0.0.BUILD-20180301.043917-633.jar;C:\Users\DELL\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;C:\Users\DELL\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;C:\Users\DELL\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;C:\Users\DELL\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;C:\Users\DELL\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;C:\Users\DELL\.m2\repository\junit\junit\4.12\junit-4.12.jar;C:\Users\DELL\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;C:\Users\DELL\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;C:\Users\DELL\.m2\repository\net\bytebuddy\byte-buddy\1.7.10\byte-buddy-1.7.10.jar;C:\Users\DELL\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.10\byte-buddy-agent-1.7.10.jar;C:\Users\DELL\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;C:\Users\DELL\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;C:\Users\DELL\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;C:\Users\DELL\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;C:\Users\DELL\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-core\5.0.4.RELEASE\spring-core-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-jcl\5.0.4.RELEASE\spring-jcl-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\springframework\spring-test\5.0.4.RELEASE\spring-test-5.0.4.RELEASE.jar;C:\Users\DELL\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;C:\Users\DELL\.m2\repository\mysql\mysql-connector-java\8.0.21\mysql-connector-java-8.0.21.jar;C:\Users\DELL\.m2\repository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar;C:\Users\DELL\.m2\repository\com\h2database\h2\1.4.196\h2-1.4.196.jar;C:\Program Files\JetBrains\IntelliJ IDEA 2020.1.2\lib\idea_rt.jar, user.name=DELL, java.vm.specification.version=1.8, sun.java.command=com.intellij.rt.junit.JUnitStarter -ideVersion5 @w@C:\Users\DELL\AppData\Local\Temp\idea_working_dirs_junit.tmp @C:\Users\DELL\AppData\Local\Temp\idea_junit.tmp -socket58890, java.home=C:\Program Files (x86)\Java\jre1.8.0_261, sun.arch.data.model=32, user.language=it, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_261, java.ext.dirs=C:\Program Files (x86)\Java\jre1.8.0_261\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files (x86)\Java\jre1.8.0_261\lib\resources.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\rt.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\sunrsasign.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jsse.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jce.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\charsets.jar;C:\Program Files (x86)\Java\jre1.8.0_261\lib\jfr.jar;C:\Program Files (x86)\Java\jre1.8.0_261\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, idea.test.cyclic.buffer.size=1048576, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86}}, SystemEnvironmentPropertySource@6221807 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=DESKTOP-N74IH9B, LOCALAPPDATA=C:\Users\DELL\AppData\Local, PROCESSOR_LEVEL=6, USERDOMAIN=DESKTOP-N74IH9B, LOGONSERVER=\\DESKTOP-N74IH9B, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, PROCESSOR_ARCHITECTURE=x86, PSModulePath=C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules, SystemDrive=C:, OneDrive=C:\Users\DELL\OneDrive, APPDATA=C:\Users\DELL\AppData\Roaming, USERNAME=DELL, ProgramFiles(x86)=C:\Program Files (x86), CommonProgramFiles=C:\Program Files (x86)\Common Files, Path=C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\DELL\AppData\Local\Microsoft\WindowsApps;, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, DriverData=C:\Windows\System32\Drivers\DriverData, OS=Windows_NT, PROCESSOR_ARCHITEW6432=AMD64, COMPUTERNAME=DESKTOP-N74IH9B, PROCESSOR_REVISION=8e0c, CommonProgramW6432=C:\Program Files\Common Files, ComSpec=C:\WINDOWS\system32\cmd.exe, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, HOMEPATH=\Users\DELL, SystemRoot=C:\WINDOWS, TEMP=C:\Users\DELL\AppData\Local\Temp, HOMEDRIVE=C:, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 142 Stepping 12, GenuineIntel, USERPROFILE=C:\Users\DELL, TMP=C:\Users\DELL\AppData\Local\Temp, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, ProgramFiles=C:\Program Files (x86), PUBLIC=C:\Users\Public, NUMBER_OF_PROCESSORS=4, windir=C:\WINDOWS, =::=::\, IDEA_INITIAL_DIRECTORY=C:\WINDOWS\System32}}]
22:30:59.853 [main] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=-1}
22:30:59.854 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'Inlined Test Properties' with highest search precedence

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.0.0.BUILD-SNAPSHOT)

2020-08-01 22:31:00.397  INFO 9952 --- [           main] .d.SpringbootMyBatisDemoApplicationTests : Starting SpringbootMyBatisDemoApplicationTests on DESKTOP-N74IH9B with PID 9952 (started by DELL in C:\DATI\IntelliJ\06-springboot-mybatis-demo)
2020-08-01 22:31:00.398  INFO 9952 --- [           main] .d.SpringbootMyBatisDemoApplicationTests : The following profiles are active: prod
2020-08-01 22:31:00.419  INFO 9952 --- [           main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@12abca6: startup date [Sat Aug 01 22:31:00 CEST 2020]; root of context hierarchy
2020-08-01 22:31:01.041  INFO 9952 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-08-01 22:31:01.179  INFO 9952 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
2020-08-01 22:31:01.183  INFO 9952 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from URL [file:/C:/DATI/IntelliJ/06-springboot-mybatis-demo/target/classes/schema.sql]
2020-08-01 22:31:01.242  INFO 9952 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from URL [file:/C:/DATI/IntelliJ/06-springboot-mybatis-demo/target/classes/schema.sql] in 59 ms.
2020-08-01 22:31:01.246  INFO 9952 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executing SQL script from URL [file:/C:/DATI/IntelliJ/06-springboot-mybatis-demo/target/classes/data.sql]
2020-08-01 22:31:01.265  INFO 9952 --- [           main] o.s.jdbc.datasource.init.ScriptUtils     : Executed SQL script from URL [file:/C:/DATI/IntelliJ/06-springboot-mybatis-demo/target/classes/data.sql] in 19 ms.
2020-08-01 22:31:02.243  INFO 9952 --- [           main] .d.SpringbootMyBatisDemoApplicationTests : Started SpringbootMyBatisDemoApplicationTests in 2.386 seconds (JVM running for 3.516)
2020-08-01 22:31:02.432  INFO 9952 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@12abca6: startup date [Sat Aug 01 22:31:00 CEST 2020]; root of context hierarchy
2020-08-01 22:31:02.433  INFO 9952 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2020-08-01 22:31:02.441  INFO 9952 --- [       Thread-2] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

Process finished with exit code -1

Perché accade questo?

16 Risposte

  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    Verifico domani ..... ma intanto ti è chiaro come funziona MyBatis in generale?

    EDIT: ho guardato bene il progetto. Ad occhio lo unit test è "di parte" verso H2. Perché in UserAnnotationMapper quel "call identity()" è una cosa di H2, non MySQL. Quindi presumibilmente l'autore si è limitato a far funzionare tutto per H2 (che comunque è valido per unit-testing essendo in-memory), trascurando un po' MySQL.
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    Si si è tutto chiaro il funzionamento del Framework, inizialmente pensavo che l'errore fosse qui:
    
    	@Test
    	public void createUser() {
    		User user = new User(0, "george", "george@gmail.com");
    		System.out.println("ID associato all'utente: " + user.getId());
    		userMapper.insertUser(user);
    		System.out.println("ID associato all'utente: " + user.getId());
    		User newUser = userMapper.findUserById(user.getId()); //4
    		assertEquals("george", newUser.getName());
    		assertEquals("george@gmail.com", newUser.getEmail());
    	}
    
    ma non è così, quel userMapper.insertUser(user) modifica anche il campo id dell'oggetto user. Con il file .xml accade questo. Non so dirti molto in merito a "call identity()" ma si consiglia anche in questa pagina:
    https://mybatis.org/mybatis-3/java-api.htm
    L'autore propone una soluzione per H2 ed una per MySQL infatti ci sono i due file .properties.
    Ho corretto come di consueto application-prod.properties in questo modo come faccio di solito ma non dovrebbe essere sbagliato perché con il file .xml funziona:
    
    logging.level.org.springframework=INFO
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC&createDatabaseIfNotExist=true
    spring.datasource.username=root
    spring.datasource.password=admin
    spring.datasource.initialization-mode=always
    spring.datasource.continue-on-error=true
    
    Ho anche editato il pom aggiungendo la versione di MySQL. Ho anche provato ad aggiornare la versione di MyBatis, sempre dal pom.xml, ma nulla da fare, non ho risolto.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    						http://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.apress</groupId>
    	<artifactId>06-springboot-mybatis-demo</artifactId>
    	<packaging>jar</packaging>
    	<version>1.0-SNAPSHOT</version>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.0.0.BUILD-SNAPSHOT</version>
    		<relativePath/>
    	</parent>
    
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    	
    	<repositories>
    		<repository>
    			<id>spring-snapshots</id>
    			<name>Spring Snapshots</name>
    			<url>https://repo.spring.io/snapshot</url>
    			<snapshots>
    				<enabled>true</enabled>
    			</snapshots>
    		</repository>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
    
    	<pluginRepositories>
    		<pluginRepository>
    			<id>spring-snapshots</id>
    			<name>Spring Snapshots</name>
    			<url>https://repo.spring.io/snapshot</url>
    			<snapshots>
    				<enabled>true</enabled>
    			</snapshots>
    		</pluginRepository>
    		<pluginRepository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</pluginRepository>
    	</pluginRepositories>
    	
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    	<dependencies>
    
    		<!-- Dipendenza per poter utilizzare MyBatis nel progetto. -->
    		<dependency>
    			<groupId>org.mybatis.spring.boot</groupId>
    			<artifactId>mybatis-spring-boot-starter</artifactId>
    			<version>1.3.0</version>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    				
    		<dependency>
    			<groupId>mysql</groupId>
    			<artifactId>mysql-connector-java</artifactId>
    			<version>8.0.21</version>
    		</dependency>
    
    		<dependency>
    			<groupId>com.h2database</groupId>
    			<artifactId>h2</artifactId>
    		</dependency>
    
    	</dependencies>
    
    </project>
    
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    Si si è tutto chiaro il funzionamento del Framework
    Hai faticato a capire concetti ben più banali e ora dici che MyBatis ti è tutto chiaro?
    Ah ... ok ...

    giannino1995 ha scritto:


    L'autore propone una soluzione per H2 ed una per MySQL infatti ci sono i due file .properties.
    Sì ma UserAnnotationMapper va bene SOLO per H2, perché usa quel call identity() che è specifico di H2.

    giannino1995 ha scritto:


    Ho anche editato il pom aggiungendo la versione di MySQL. Ho anche provato ad aggiornare la versione di MyBatis, sempre dal pom.xml, ma nulla da fare, non ho risolto.
    Giusto una nota sulle versioni. Con Maven in generale le dependency devono avere il <version>. Ma con Spring Boot è leggermente diverso. Hai notato (anche negli altri progetti degli altri capitoli) che gli starter, il mysql-connector-java e h2 non hanno il <version> ?

    Perché? Beh, all'inizio si mette il <parent> che fa riferimento all'artifact spring-boot-starter-parent. Questo artifact ha a sua volta come parent l'artifact spring-boot-dependencies che ha 2 cose in particolare:

    a)
    Il <properties> contiene una grande quantità di definizioni di versioni:
        <properties>
            <activemq.version>5.15.8</activemq.version>
            <antlr2.version>2.7.7</antlr2.version>
                  .......
    
            <h2.version>1.4.197</h2.version>
                  .......
    
            <mysql.version>8.0.15</mysql.version>
                  .......
        </properties>
    b)
    dopo <properties> ha il blocco <dependencyManagement> che contiene le dependency di tutte le dipendenze. Del tipo:
                <dependency>
                    <groupId>com.h2database</groupId>
                    <artifactId>h2</artifactId>
                    <version>${h2.version}</version>
                </dependency>
    Noti quel ${h2.version} ? E' il riferimento alla property che il spring-boot-dependencies dichiara nel <properties>.

    Ora c'è il punto importante: <dependencyManagement> è particolare, NON tira dentro materialmente quelle dependency. Rappresenta solo la definizione "teorica" di una dependency.

    In pratica dice: se in un pom "figlio" (il TUO del tuo progetto) metti solo
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
    SENZA <version>, allora la versione la "erediti" da quella dichiarata nel spring-boot-dependencies.

    In questo caso NON è corretto che gli metti un <version> per cambiare la versione. Un IDE dovrebbe segnalartelo come warning (Eclipse lo segnala come warning "Overriding managed version" o "Duplicating managed version" se ci metti la stessa versione).

    Il modo giusto è impostare nel TUO pom la versione nel <properties>

    <h2.version>1.xx.yyy</h2.version>
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    Sai che ti dico? Che andiamo di male in peggio! Sul mio IntelliJ versione 2020.2 quindi aggiornatissimo se uso <mysql.version>8.0.21</mysql.version> falliscono tutti e 3 i test e l'IDE mi segna come sbagliato il tag. Se scrivo <version>8.0.21</version> non vedo errori e fallisce solo 1 test.
    Su Eclipse a te funziona tutto senza problemi?
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    se uso <mysql.version>8.0.21</mysql.version> falliscono tutti e 3 i test
    Intanto se metti una versione recentissima (8.x) del Connector/J di MySQL, va cambiato anche il driver-class-name, l'avevo detto qui: https://www.iprogrammatori.it/forum-programmazione/post8656293.html#p8656293

    giannino1995 ha scritto:


    l'IDE mi segna come sbagliato il tag.
    L'hai messo in <properties> ? Questo <mysql.version> va lì! Non nel <dependency>

    giannino1995 ha scritto:


    Se scrivo <version>8.0.21</version> non vedo errori e fallisce solo 1 test.
    Sì fallisce per quel call identity()

    giannino1995 ha scritto:


    Che andiamo di male in peggio!
    Eh sì se non fai attenzione ....
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    1) Si si, il driver-class-name l'ho cambiato.
    2) No l'ho lasciato nel <dependency> ma ho corretto tutto proprio ora. Comunque il fatto che IntelliJ non mi segni sbagliato il mio approccio di prima mentre Eclipse si mi lascia molto deluso. Altra delusione il fatto che @Autowired private UserMapper userMapper; e @Autowired private UserAnnotationMapper userMapper; vengano segnati come codici errati quando in realtà non dovrebbero esserlo.
    3) Strano che "call identity()" sia il problema perché non leggo da nessuna parte che sia prerogativa di H2. Comunque questo MyBatis serve a poco, c'è JPA che è il migliore. Nel primo corso che avevo fatto non avevo mai sentito parlare di MyBatis e Flyway.
    4) Comincio ad entrare nell'ottica di Spring ma non mi piace l'IoC e ancor meno la DI. A titolo di curiosità, Scala usa IoC e DI? Scala può anche essere usato per creare webapp? In Scala si parla di single-thread e multi-thread?

    Grazie di tutto come sempre
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    Altra delusione il fatto che @Autowired private UserMapper userMapper; e @Autowired private UserAnnotationMapper userMapper; vengano segnati come codici errati quando in realtà non dovrebbero esserlo.
    Vengono segnati come errori ma con QUALE errore preciso? O è solo un warning??

    giannino1995 ha scritto:


    3) Strano che "call identity()" sia il problema perché non leggo da nessuna parte che sia prerogativa di H2.
    Lo ripeto: con MySQL puoi solo usare UserMapper. Se usi UserAnnotationMapper il insertUser non funziona.

    identity() è una funzione di H2: http://www.h2database.com/html/functions.html#identit
    MySQL NON ce l'ha !

    giannino1995 ha scritto:


    Comunque questo MyBatis serve a poco, c'è JPA che è il migliore.
    La questione non è se uno è migliore dell'altro. Hanno obiettivi differenti.

    Con MyBatis il SQL lo scrive sempre lo SVILUPPATORE. MyBatis non si inventa nulla sul SQL. Se c'è un progetto "vecchio" che ha già un suo "parco" di query utilizzate da tempo e lo si vuole modernizzare, allora usare MyBatis è una buona soluzione, perché quelle query si possono ri-usare. Con JPA no (nì).

    giannino1995 ha scritto:


    ma non mi piace l'IoC e ancor meno la DI.
    Ah bene ... hai appena dato una pedata al concetto più importante e fondamentale di Spring. Ottimissimo .....

    giannino1995 ha scritto:


    Scala usa IoC e DI?
    Il "linguaggio" NON c'entra nulla con IoC/DI. Perché IoC/DI lo applica e mette in pratica un framework (come appunto Spring Framework).

    giannino1995 ha scritto:


    Scala può anche essere usato per creare webapp?
    Certo, così come anche Kotlin (ho fatto una app Spring Boot: kotlin-springboot-color-tools).

    giannino1995 ha scritto:


    In Scala si parla di single-thread e multi-thread?
    Certo, in linea generale. Ma essendo un linguaggio più orientato alla programmazione "funzionale", ci sono altri concetti e principi per affrontare le questioni sui thread e sulla concorrenza.

    EDIT: cosa c'entra Scala? Mica starai dicendo che vuoi imparare Scala??


    P.S. comunque per la cronaca, in quel springboot-mybatis-demo, se metto:

    nel pom.xml:
    - <mysql.version>8.0.21</mysql.version> in <properties>

    In application-prod.properties:
    - il driver com.mysql.cj.jdbc.Driver
    - ?serverTimezone=UTC nel url (perché io ho il server MySQL 8 )
    - la mia password di root (ovviamente)
    - spring.datasource.initialization-mode=always (perché altrimenti NON essendo embedded NON usa lo schema.sql)

    lasciando l'uso di UserMapper nella classe di test

    e avvio:

    mvn test -Dspring.profiles.active=prod

    Ottengo 3 test con successo.


    Ahhh che fatica ... (a spiegarti ...)
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    4) Comincio ad entrare nell'ottica di Spring ma non mi piace l'IoC e ancor meno la DI.
    .... allora è meglio che abbondoni Spring ed inizi una nuova avventura con qualcosa di altro
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    E' un warning:
    Could not autowire. No beans of 'UserMapper' type found.
    Inspection info:Checks autowiring problems in a bean class.
    Io non uso mvn test -Dspring.profiles.active=prod ma i profili.
    Potresti spiegarmi dove si scrive "mvn test -Dspring.profiles.active=prod" su IntelliJ?
    Potresti spedirmi esattamente il tuo progetto modificato? Anche io come te ho fatto le stesse modifiche non capisco perché a me il test maledetto non passi.
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    E' un warning:
    Could not autowire. No beans of 'UserMapper' type found.
    Inspection info:Checks autowiring problems in a bean class.
    Questo avvertimento credo sia solo una questione di mancanza (nel IDE) di nozioni sul "contesto" in cui girano i test. Mi spiego meglio: quando si fanno gli unit-test con JUnit base usato da solo, non c'è alcun meccanismo di dependency injection. JUnit non lo fornisce affatto.

    Ma nei test in queste applicazioni con Spring Boot non c'è solo JUnit. C'è innanzitutto quello starter spring-boot-starter-test (lo vedi nel pom). Questo tira dentro JUnit ma anche AssertJ, Mockito e altro tra cui anche l'artifact spring-test.

    E nella classe SpringbootMyBatisDemoApplicationTests se hai notato c'è

    @RunWith(SpringRunner.class)
    @SpringBootTest

    Questo fa sì che quando avvii i test, la esecuzione dei test è delegata a quel SpringRunner. Questo tra le altre cose fa anche "partire" tutto il contesto di Spring. Vedi anche il banner di Spring Boot tra l'altro. Quindi vengono trovati tutti i bean e la dependency injection "funziona".
    Quindi a runtime quel auto wiring FUNZIONA.

    Probabilmente l'IDE non ha sufficienti nozioni, forse bisogna installare un plugin apposito o forse serve la versione Ultimate (quella a pagamento) di IntelliJ IDEA. Non lo so per certo ora ...
    L'IDE vede una classe con dei test e vede @Autowired e pensa: boh, non so da dove potrebbe arrivare quel bean. Insomma manca di nozioni sul contesto.

    Non allarmarti, non arrovellarti per queste cose ... sono stupidaggini. Per favore ... vai avanti!

    giannino1995 ha scritto:


    Io non uso mvn test -Dspring.profiles.active=prod ma i profili.
    Potresti spiegarmi dove si scrive "mvn test -Dspring.profiles.active=prod" su IntelliJ?
    Sì anche io ho usato i profili (di Spring Boot, non quelli a livello Maven). Ma io ho avviato il test da prompt dei comandi ... non da un IDE.

    giannino1995 ha scritto:


    Potresti spedirmi esattamente il tuo progetto modificato? Anche io come te ho fatto le stesse modifiche non capisco perché a me il test maledetto non passi.
    Potrebbe comunque non essere utile ... io ho il MySQL server 8.x, non so che versione hai tu installata.
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    Io ho la versione 8.0.21 proprio come te. Che percorso usi prima di scrivere "mvn test -Dspring.profiles.active=prod"?
    Microsoft Windows [Versione 10.0.19041.388]
    (c) 2020 Microsoft Corporation. Tutti i diritti sono riservati.
    
    C:\Users\DELL>cd..
    
    C:\Users>cd..
    
    C:\>cd DATI
    
    C:\DATI>cd IntelliJ\06-springboot-mybatis-demo
    
    C:\DATI\IntelliJ\06-springboot-mybatis-demo>mvn test -Dspring.profiles.active=prod
    "mvn" non è riconosciuto come comando interno o esterno,
     un programma eseguibile o un file batch.
    
    C:\DATI\IntelliJ\06-springboot-mybatis-demo>cd out\artifacts\06_springboot_mybatis_demo_jar
    
    C:\DATI\IntelliJ\06-springboot-mybatis-demo\out\artifacts\06_springboot_mybatis_demo_jar>mvn test -Dspring.profiles.active=prod
    "mvn" non è riconosciuto come comando interno o esterno,
     un programma eseguibile o un file batch.
    
    C:\DATI\IntelliJ\06-springboot-mybatis-demo\out\artifacts\06_springboot_mybatis_demo_jar>
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    Io ho la versione 8.0.21 proprio come te.
    Va beh, io ho il MySQL Community Server 8.0.20.

    giannino1995 ha scritto:


    Che percorso usi prima di scrivere "mvn test -Dspring.profiles.active=prod"?
    Io ho già tutto configurato. Ho una installazione di Maven che ho messo io esplicitamente, fuori da ogni IDE. Ed ho JAVA_HOME, MAVEN_HOME e la PATH correttamente impostati.
    Cosa che in teoria dovresti già saper fare anche tu ...
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    JAVA_HOME, MAVEN_HOME e la PATH non sono correttamente impostati perché non li ho impostati, mi puoi spiegare?
    Gli altri progetti però funzionano e non ho impostato queste variabili...
    Che cosa rappresentano queste variabili?
  • Re: Usare l'interfaccia e le annotazioni con MyBatis

    giannino1995 ha scritto:


    JAVA_HOME, MAVEN_HOME e la PATH non sono correttamente impostati perché non li ho impostati, mi puoi spiegare?
    Gli altri progetti però funzionano e non ho impostato queste variabili...
    Che cosa rappresentano queste variabili?
    JAVA_HOME : la directory di installazione di Java es. C:\Program Files\Java\jdk1.8.0_261

    Download di Maven (lo zip dei binari): https://maven.apache.org/download.cg

    MAVEN_HOME : la directory di installazione di Maven es. C:\quellochevuoi\apache-maven-3.6.3

    poi in PATH vanno messi es.:

    C:\Program Files\Java\jdk1.8.0_261\bin
    e
    C:\quellochevuoi\apache-maven-3.6.3\bin
Devi accedere o registrarti per scrivere nel forum
16 risposte