J'ai finalement migré mon ancien système construit avec Spring + iBATIS vers Spring + MyBatis3. J'ai essayé plusieurs fois de migrer, mais le nombre de fichiers de définition SQL dépasse 1000 et la migration manuelle vers le fichier de définition de MyBatis prend trop de temps. Officiel? ne fonctionnait pas bien, alors j'ai abandonné. Cependant, si je ne pouvais pas migrer vers MyBatis, je ne pouvais pas mettre à niveau la version de Spring, j'ai donc pensé que c'était gênant, j'ai donc créé un outil de migration de fichier de définition et terminé la migration en toute sécurité. Je ne pense pas qu'il y ait beaucoup de demande, mais j'ai décidé de le rendre public pour qu'il soit utile aux gens qui sont en difficulté quelque part.
Mybatis / ibatis2mybatis sur GitHub semble être l'outil officiel, mais j'ai décidé de créer un outil de migration car cet outil ne pouvait pas migrer correctement dans les cas suivants fait. (Je pense qu'il y en avait d'autres, mais j'ai oublié ...)
property
n'est pas défini dans des balises telles que <isEqual>
, <isNotEqual>
, <iterate>
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'
SqlMapClientFactoryBean
pour utiliser SqlSessionFactoryBean
.callSettersOnNulls
) pour obtenir le même comportement.returnInstanceForEmptyRow
) pour obtenir le même comportement. Cependant, cette modification renverra également des instances vides lors du mappage des résultats imbriqués. Dans ce cas, iBATIS a renvoyé null, donc afin de lui donner le même comportement, l'outil de migration décrit plus tard définit 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>
SqlMapClientDaoSupport
à SqlSessionDaoSupport
getSqlMapClient ()
par getSqlSession ()
getSqlMapClient (). QueryForObject ()
par getSqlSession (). SelectOne ()
getSqlMapClient (). QueryForList ()
par getSqlSession (). SelectList ()
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);
}
}
J'ai créé un outil pour migrer le fichier iBATIS sqlMap vers le fichier de mappage MyBatis, je vais donc l'utiliser. Un JDK est nécessaire pour exécuter cet outil, veuillez donc l'installer à l'avance.
GitHub - ogasada/ibatisToMyBatis3
$ git clone https://github.com/ogasada/ibatisToMyBatis3.git
systemProp.targetDir
dans le fichier gradle.properties
$ ./gradlew convert
L'outil de migration peut être inadéquat car je le limite aux fonctionnalités dont j'ai besoin. Le programme lui-même n'est pas un gros problème, donc je pense que vous pouvez ajouter des fonctions si vous le modifiez correctement.
Recommended Posts