>  기사  >  Java  >  Spring+SpringMVC+MyBatis 심층 학습 및 구성-MyBatis 리버스 엔지니어링

Spring+SpringMVC+MyBatis 심층 학습 및 구성-MyBatis 리버스 엔지니어링

巴扎黑
巴扎黑원래의
2017-06-26 09:34:552020검색

재인쇄할 소스를 표시해 주세요:

앞서 언급한 대로: Spring+SpringMVC+MyBatis 심층 학습 및 구성 (9)-MyBatis 및 Spring 통합

매퍼 자동 생성 도구 mybatis-generator-core-1.3.2 사용 공식 웹사이트에서 po 클래스 및 매퍼 매핑 파일을 생성합니다.

1. 리버스 엔지니어링이란 무엇입니까? Mybatis는 프로그래머가 직접 SQL 문을 작성하도록 요구합니다. Mybatis는 공식적으로 mybatis 실행에 필요한 코드(mapper.java, mapper.xml, po...)를 생성할 수 있는 기능을 제공합니다.

실제 기업 개발에서 일반적으로 사용되는 리버스 엔지니어링 방법:

데이터베이스 테이블에서 Java 코드를 생성합니다.

2. 리버스 엔지니어링 다운로드

3. 사용 방법(사용 방법을 알아야 함)

추후 데이터베이스 테이블 수정, 확장, 수요 수정 및 기타 이유로 자동 생성되는 po 및 매퍼 적용 범위가 잘못 업데이트되었습니다. 특별히 역생성된 새 프로젝트 생성기SqlmapCustom을 생성한 후 필요에 따라 자동으로 생성된 po, 매퍼 등을 프로젝트에 복사합니다.

3.1 리버스 엔지니어링 실행

개발 도구에 의존하지 말고 자바 프로그램 방식을 사용하는 것이 좋습니다.

3.2 매퍼 생성 구성 파일

GeneratorConfig에서 매퍼 생성 세부 사항을 구성합니다.

(3) 매퍼 파일이 있는 패키지 경로입니다.

구성 파일은 다음과 같습니다.

<?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 Java 클래스를 사용하여 매퍼 파일 생성

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();
        }
    }

}
생성된 코드:

3.4 생성된 매퍼 파일을 프로젝트에서 지정한 디렉터리에 복사합니다

3.4.1mapper.xml

Mapper.xml 파일은 매퍼 디렉토리에 복사됩니다

3.4.2mapper.java

Mapper.xml 파일은 매퍼 디렉토리에 복사됩니다

참고: mapper.xml 파일과 mapper.java 파일은 동일한 디렉터리에 있으며 파일 이름도 동일합니다.

3.4.3매퍼 인터페이스 테스트

  = 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. 리버스 엔지니어링 주의사항

4.1매퍼 파일의 내용은 덮어쓰지 않고 추가됩니다.

XXXMapper.xml 파일이 이미 존재하는 경우 재생성되면 mapper.xml 파일은 덮어쓰여지고 내용이 추가되어 mybatis 구문 분석이 실패합니다.

해결책: 원래 생성된 mapper.xml 파일을 삭제하고 다시 생성하세요.

MyBatis에 의해 자동으로 생성된 po 및 mapper.java 파일은 콘텐츠가 추가되지 않고 이 문제 없이 직접 덮어쓰기됩니다.

4.2 테이블 스키마 문제

다음은 Oracle 데이터베이스 테이블에 대한 코드 생성에 대한 스키마 문제입니다.

Schema는 데이터베이스 스키마입니다. Oracle에서 한 명의 사용자가 하나의 스키마에 해당한다는 것을 알 수 있습니다. 동일한 테이블 이름에 액세스할 수 있는 Oracle 데이터베이스에 여러 스키마가 있는 경우 mybatis를 사용하여 테이블에 대한 mapper.xml을 생성하면 매퍼 콘텐츠가 중복되어 mybatis 구문 분석 오류가 발생합니다.

해결책: 다음과 같이 테이블의 스키마를 채웁니다.

XXXX는 생성 후 매퍼의 스키마 접두사를 제거합니다. xml을 일괄적으로 제거하지 않으면 Oracle 사용자가 sql 문을 변경할 때 쿼리가 실패합니다.

단축 작업 방법: mapper.xml 파일의 일괄 교체: "from XXXX."

Oracle 쿼리 개체의 스키마는 다음과 같이 dba_objects에서 쿼리할 수 있습니다.

select * from dba_objects

위 내용은 Spring+SpringMVC+MyBatis 심층 학습 및 구성-MyBatis 리버스 엔지니어링의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.