Maison >Java >javaDidacticiel >Spring+SpringMVC+MyBatis apprentissage approfondi et construction-Ingénierie inverse MyBatis

Spring+SpringMVC+MyBatis apprentissage approfondi et construction-Ingénierie inverse MyBatis

巴扎黑
巴扎黑original
2017-06-26 09:34:552086parcourir

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.

1. Qu'est-ce que l'ingénierie inverse

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.

2. Téléchargez l'ingénierie inverse

3. Comment l'utiliser (nécessite de savoir l'utiliser)

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.

3.1 Exécuter l'ingénierie inverse

Il est recommandé d'utiliser la méthode du programme Java sans recourir aux outils de développement.

3.2fichier de configuration de la génération du mappeur

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>

3.3 Utiliser les classes Java pour générer des fichiers de mappage

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 :

3.4 Copier le fichier mapper généré dans le répertoire spécifié dans le projet

3.4.1mapper.xml

Mapper.xml Copiez le fichier dans le répertoire mapper

3.4.2mapper.java

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.

3.4.3Test de l'interface du mappeur

  = ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"=(ItemsMapper) applicationContext.getBean("itemsMapper" ="手机" =ItemsExample.Criteria criteria="笔记本3"List<Items> list= =itemsMapper.selectByPrimaryKey(1 Items items=itemsMapper.selectByPrimaryKey(1"水杯"

4. Précautions d'ingénierie inverse

4.1Le contenu du fichier Mapper n'est pas écrasé mais ajouté

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.

4.2 Problèmes de schéma de table

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 :

XXXX est le nom de un schéma, supprimez le préfixe de schéma de mapper.xml par lots après la génération. Si elle n'est pas supprimée, la requête échouera lorsque l'utilisateur Oracle modifiera l'instruction SQL.

Méthode d'opération de raccourci : Remplacement par lots dans le fichier mapper.xml : "from XXXX" est vide.

Le schéma de l'objet de requête Oracle peut être interrogé à partir de dba_objects, comme suit :

select * from dba_objects

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn