Ich habe endlich mein altes System, das mit Spring + iBATIS erstellt wurde, auf Spring + MyBatis3 migriert. Ich habe mehrmals versucht, zu migrieren, aber die Anzahl der SQL-Definitionsdateien überschreitet 1000, und die manuelle Migration in die Definitionsdatei für MyBatis dauert zu lange. Offiziell? Tool funktionierte nicht gut, also gab ich auf. Wenn ich jedoch nicht auf MyBatis migrieren konnte, konnte ich die Version von Spring nicht aktualisieren. Daher hielt ich es für umständlich. Daher erstellte ich ein Migrationstool für Definitionsdateien und schloss die Migration sicher ab. Ich glaube nicht, dass es viel Nachfrage gibt, aber ich habe beschlossen, es öffentlich zu machen, damit es denjenigen hilft, die irgendwo in Schwierigkeiten sind.
Mybatis / ibatis2mybatis auf GitHub scheint das offizielle Tool zu sein, aber ich habe mich für ein Migrationstool entschieden, da dieses Tool in den folgenden Fällen nicht erfolgreich migriert werden konnte tat. (Ich denke, es gab andere, aber ich habe vergessen ...)
<dynamic>
, <isPropertyAvailable>
, <isNotPropertyAvailable>
compile group: 'org.apache.ibatis', name: 'ibatis-sqlmap', version: '2.3.4.726'
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.5'
compile group: 'org.mybatis', name: 'mybatis-spring', version: '1.3.1'
callSettersOnNulls
), um dasselbe Verhalten zu erzielen.returnInstanceForEmptyRow
), um dasselbe Verhalten zu erzielen. Diese Änderung gibt jedoch auch leere Instanzen zurück, wenn verschachtelte Ergebnisse zugeordnet werden. In diesem Fall hat iBATIS null zurückgegeben. Um dasselbe Verhalten zu erzielen, setzt das später beschriebene Migrationstool "notNullColumn".<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean" scope="singleton">
<property name="configLocations">
<list>
<value>classpath:/ibatis.xml</value>
</list>
</property>
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath*:/mybatis/**/*.xml" />
<property name="configuration">
<bean class="org.apache.ibatis.session.Configuration">
<property name="callSettersOnNulls" value="true"/>
<property name="returnInstanceForEmptyRow" value="true"/>
</bean>
</property>
</bean>
public class Dao extends SqlMapClientDaoSupport {
public Object find(String id) throws SQLException {
return getSqlMapClient().queryForObject(id);
}
public List findList(String id) throws SQLException {
return getSqlMapClient().queryForList(id);
}
}
public class Dao extends SqlSessionDaoSupport {
public Object find(String id) throws SQLException {
return getSqlSession().selectOne(id);
}
public List findList(String id) throws SQLException {
return getSqlSession().selectList(id);
}
}
Ich habe ein Tool zum Migrieren der iBATIS sqlMap-Datei in die MyBatis-Mapper-Datei erstellt, daher werde ich es verwenden. Zum Ausführen dieses Tools ist ein JDK erforderlich. Installieren Sie es daher im Voraus.
GitHub - ogasada/ibatisToMyBatis3
$ git clone https://github.com/ogasada/ibatisToMyBatis3.git
$ ./gradlew convert
Das Migrationstool ist möglicherweise nicht ausreichend, da ich es auf die von mir benötigten Funktionen beschränke. Das Programm selbst ist keine große Sache, daher denke ich, dass Sie Funktionen hinzufügen können, wenn Sie es entsprechend ändern.