Maison >Java >javaDidacticiel >Spring+SpringMVC+MyBatis apprentissage approfondi et construction-Ingénierie inverse MyBatis
Veuillez indiquer la source de la réimpression :
Comme mentionné précédemment : Spring+SpringMVC+MyBatis apprentissage et construction approfondis (9) - Intégration MyBatis et Spring
Généré automatiquement à l'aide du mappeur de le site officiel L'outil mybatis-generator-core-1.3.2 est utilisé pour générer des classes po et des fichiers de mappage de mappeur.
Mybatis exige que les programmeurs écrivent eux-mêmes des instructions SQL. Mybatis propose officiellement une ingénierie inverse qui peut générer automatiquement le code requis pour l'exécution de mybatis pour une seule table (mapper.java). , mapper .xml, po...)
Dans le développement réel d'une entreprise, la méthode d'ingénierie inverse couramment utilisée :
Générer du code Java à partir de la table de la base de données.
Afin de prévenir modification et extension ultérieures de la table de base de données. En raison de la modification des exigences et d'autres raisons, la couverture du PO et du mappeur générée automatiquement par la mise à jour est incorrecte. Nous créons un nouveau générateur de projet spécifiquement généré de manière inverséeSqlmapCustom, puis copions le po, le mappeur, etc. généré automatiquement dans le projet selon les besoins.
Il est recommandé d'utiliser la méthode du programme Java sans recourir aux outils de développement.
Configurez les informations détaillées de la génération du mappeur dans generatorConfig.xml, faites attention aux modifications suivantes :
(1) Ajoutez la table de base de données à être généré ;
(2) Le chemin du package où se trouve le fichier po
(3) Le chemin du package où se trouve le fichier du mappeur ;
Le fichier de configuration est le suivant :
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="testTables" targetRuntime="MyBatis3"><commentGenerator><!-- 是否去除自动生成的注释 true:是 : false:否 --><property name="suppressAllComments" value="true" /></commentGenerator><!--数据库连接的信息:驱动类、连接地址、用户名、密码 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/mybatisdemo" userId="root"password=""></jdbcConnection><!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver" connectionURL="jdbc:oracle:thin:@127.0.0.1:1521:yycg" userId="yycg" password="yycg"> </jdbcConnection> --><!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 NUMERIC 类型解析为java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- targetProject:生成PO类的位置 --><javaModelGenerator targetPackage="joanna.yan.po"targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /><!-- 从数据库返回的值被清理前后的空格 --><property name="trimStrings" value="true" /></javaModelGenerator><!-- targetProject:mapper映射文件生成的位置 --><sqlMapGenerator targetPackage="joanna.yan.mapper" targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- targetPackage:mapper接口生成的位置 --><javaClientGenerator type="XMLMAPPER"targetPackage="joanna.yan.mapper" targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><p roperty name="enableSubPackages" value="false" /></javaClientGenerator><!-- 指定数据库表 --><table tableName="items"></table><table tableName="orders"></table><table tableName="orderdetail"></table><table tableName="user"></table><!-- <table schema="" tableName="sys_user"></table> <table schema="" tableName="sys_role"></table> <table schema="" tableName="sys_permission"></table> <table schema="" tableName="sys_user_role"></table> <table schema="" tableName="sys_role_permission"></table> --><!-- 有些表的字段需要指定java类型 <table schema="" tableName=""> <columnOverride column="" javaType="" /> </table> --></context></generatorConfiguration>
public class GeneratorSqlmap {public void generator() throws Exception{ List<String> warnings = new ArrayList<String>();boolean overwrite = true;//指定 逆向工程配置文件File configFile = new File("generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings); myBatisGenerator.generate(null); } public static void main(String[] args) throws Exception {try { GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap(); generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
Après génération Code :
Mapper.xml Copiez le fichier dans le répertoire mapper
Copiez le fichier Mapper.xml dans le répertoire mapper
Remarque : Le fichier mapper.xml et le fichier mapper.java se trouvent dans un répertoire portant le même nom de fichier.
= ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"=(ItemsMapper) applicationContext.getBean("itemsMapper" ="手机" =ItemsExample.Criteria criteria="笔记本3"List<Items> list= =itemsMapper.selectByPrimaryKey(1 Items items=itemsMapper.selectByPrimaryKey(1"水杯"
Lorsque le fichier XXXMapper.xml existe déjà, s'il est régénéré, le contenu du fichier mapper.xml ne sera pas écrasé mais le contenu sera ajouté, ce qui entraînera un échec d'analyse de mybatis.
Solution : supprimez le fichier mapper.xml généré à l'origine et générez-le à nouveau.
Les fichiers po et mapper.java générés automatiquement par MyBatis ne sont pas des contenus ajoutés mais directement écrasés sans ce problème.
Voici le problème de schéma pour le code de génération de table de base de données Oracle :
Le schéma est le schéma de base de données Dans Oracle, un utilisateur correspond à un schéma. , qui peut être compris comme L'utilisateur est le schéma. Lorsqu'il existe plusieurs schémas dans la base de données Oracle pouvant accéder au même nom de table, l'utilisation de mybatis pour générer mapper.xml pour la table entraînera une duplication du contenu du mappeur, entraînant des erreurs d'analyse de mybatis.
Solution : Remplissez le schéma dans le tableau, comme suit :