11、MyBatis-generator-Maven方式
阿新 • • 發佈:2019-03-12
mave 覆蓋 推薦 exce record sage cef 關聯 兩個
配置依賴
依賴信息 pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>mybatis</groupId> <artifactId>generator</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.7</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.0</version> </dependency> </dependencies> <properties> <configuration.path>${basedir}/src/main/resources/generatorConfig.xml</configuration.path> </properties> <build> <plugins> <!-- 指定jdk --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <encoding>UTF-8</encoding> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <configuration> <!-- 允許移動生成的文件 --> <verbose>true</verbose> <!-- 允許覆蓋生成的文件 --> <overwrite>true</overwrite> <!-- 配置文件中的 contexts --> <contexts>DMySQLTables</contexts> <!-- 配置文件路徑 --> <configurationFile>${configuration.path}</configurationFile> <!-- MBG 生成文件的目錄。只要配置文件中 targetProject 設置為 MAVEN(區分大小寫),就會使用此目錄,如果該目錄不存在會創建該目錄 --> <outputDirectory>${project.build.directory}/generated-sources/mybatis-generator</outputDirectory> <!-- 為 true,則“compile”,“provided”和“system”範圍的依賴項將添加到生成器的類路徑中 --> <includeCompileDependencies>true</includeCompileDependencies> <!-- 為true,則將任何範圍的依賴項添加到生成器的類路徑中 --> <includeAllDependencies>true</includeAllDependencies> </configuration> </plugin> </plugins> <resources> <!-- 把xml文件也打包到相應位置 --> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <excludes> <exclude>**/*.properties</exclude> </excludes> <filtering>true</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build> </project>
數據庫信息 db.properties
jdbc.user=root jdbc.password=root jdbc.driverClass=com.mysql.cj.jdbc.Driver jdbc.jdbcUrl=jdbc:mysql://192.168.8.136:3306/mybatis
generator 配置 generatorConfig.xml
<?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> <!-- 指定DB2或JDBC驅動位置 --> <!--<classPathEntry location="D:\repository\mysql\mysql-connector-java\8.0.15\mysql-connector-java-8.0.15.jar"/>--> <!--加載配置文件--> <properties resource="db.properties"/> <!-- context:一組環境 id:必選,唯一標識符,用於在生成錯誤時提示 defaultModelType:指定生成 JavaBean 的模式 conditional:默認,類似於層次模型,表只包含一個字段時不會生成單獨的類,該字段將合並到基本記錄類中。 flat:所有字段生成在一個 JavaBean 中 hierarchical:主鍵列會生成主鍵類,Blob 列也單獨生成一個類,再其余字段一個類,類之間存在適當的繼承關系。 targetRuntime: MyBatis3:默認的值,生成基於 MyBatis3.x 以上版本的內容,包括XXXBySample MyBatis3Simple:類似 MyBatis3,不生成 XXXBySample MyBatis3DynamicSql、Ibatis2Java2、Ibatis2Java5 introspectedColumnImpl:值為類的全限定名,用於擴展 MBG --> <context id="DMySQLTables" defaultModelType="conditional" targetRuntime="MyBatis3"> <!--默認false,為true將分隔SQL關鍵字(如果它們在表中用作列名)。 MBG維護了不同數據庫的SQL關鍵字列表(SqlReservedWords),如特定關鍵字不在MBG的列表中,可使用<columnOverride>分隔--> <property name="autoDelimitKeywords" value="false"/> <!-- 指明數據庫的用於標記數據庫對象名的符號,如ORACLE是雙引號",MYSQL是反引號` --> <property name="beginningDelimiter" value="`"/> <property name="endingDelimiter" value="`"/> <!-- 生成 Java 文件的編碼格式,有關有效編碼的信息參閱 java.nio.charset.Charset --> <property name="javaFileEncoding" value="UTF-8"/> <!-- Java代碼格式化程序的全類名,該類須實現org.mybatis.generator.api.JavaFormatter,並有無參數構造函數,MBG 默認 org.mybatis.generator.api.dom.DefaultJavaFormatter --> <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/> <!-- XML代碼格式化,須實現org.mybatis.generator.api.XmlFormatter,並有無參數構造函數,MBG 默認 org.mybatis.generator.api.dom.DefaultXmlFormatter --> <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/> <commentGenerator> <!-- 指定 MBG 是否將在生成的代碼中包含任何 coments --> <property name="suppressAllComments" value="true" /> <!-- 指定 MBG 是否將在生成的註釋中包含生成時間戳 --> <property name="suppressDate" value="true"/> </commentGenerator> <!-- 指定數據庫連接的屬性,MBG 使用 JDBC 的 DatabaseMetaData 類來發現配置中指定表的屬性, 每個 context 元素都需要一個 connectionFactory 或 jdbcConnection 元素 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.jdbcUrl}" userId="${jdbc.user}" password="${jdbc.password}"/> <!-- javaTypeResolver:處理數據庫中的類型到 Java 中的類型,默認使用 org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl type:指定用戶提供的 Java Type Resolver。該類必須實現 org.mybatis.generator.api.JavaTypeResolver 接口,並必須有公共默認構造函數。可寫 DEFAULT--> <javaTypeResolver type="DEFAULT"> <!-- forceBigDecimals:MBG 是否強制對 DECIMAL 和 NUMERIC 字段使用 java.math.BigDecimal,而不是在可能時替換整數類型 true:如果數據庫列的類型為 DECIMAL 或 NUMERIC,則 Java 類型解析程序將始終使用 java.math.BigDecimal false:默認, scale > 0 或 length > 18 使用 BigDecimal scale = 0 且 length [10,18] 使用 Long scale = 0 且 length [5,9] 使用 Integer scale = 0 且 length < 5 使用 Short --> <property name="forceBigDecimals" value="false"/> <!-- useJSR310Types:指定 MyBatis Generator 是否應強制在 DATE,TIME 和 TIMESTAMP 字段中使用 JSR-310 數據類型,而不是使用 java.util.Date true:則類型將按如下方式解析: DATE java.time.LocalDate TIME java.time.LocalTime TIMESTAMP java.time.LocalDateTime 註意:類型解析器將始終解析以下JSR-310類型,無論此屬性的值如何: TIME_WITH_TIMEZONE java.time.OffsetTime TIMESTAMP_WITH_TIMEZONE java.time.OffsetDateTime --> <property name="useJSR310Types" value="true"/> </javaTypeResolver> <!-- javaModelGenerator:Java模型生成器,此元素是 context 元素的必需子元素,負責:1,key類(見context的defaultModelType);2,java類;3,查詢類 targetPackage:生成的類將被放置的包,真實的包受 enableSubPackages 屬性控制 targetProject:目標項目,指定一個存在的本地文件系統目錄,生成的內容會放到指定目錄中,如果目錄不存在,MBG 不會自動建目錄 --> <javaModelGenerator targetPackage="test.model" targetProject="src/main/java"> <!-- constructorBased:是否為每一個生成的類創建一個全參構造方法,且構建 SQL 結果映射以使用構造函數,而不是每個字段的“setter”,屬性僅適用於MyBatis3。 如果“immutable”屬性設置為 true,則忽略此屬性(並強制為 true)。默認值為 false。<table>元素中的相應屬性可覆蓋此屬性 --> <property name="constructorBased" value="false"/> <!-- enableSubPackages:是否在 targetPackage 的基礎上,根據數據庫的 schema 再生成一層 package,最終生成的類放在這個 package 下,默認為false 假設 MYSCHMA 中的表為 MYTABLE,targetPackage 屬性為“com.mycompany”。如果此屬性為true,則類放在“com.mycompany.myschema”中。 false,則類放在“com.mycompany” --> <property name="enableSubPackages" value="false"/> <!-- immutable:是否創建不可變類,默認 false,如果為true,MBG 會創建一個全參構造方法,類沒有“setter”方法,忽略“constructorBased”屬性 屬性僅適用於MyBatis3,<table>元素中的相應屬性可以覆蓋此屬性。--> <property name="immutable" value="false"/> <!-- rootClass:設置一個根對象(全類名),生成的 keyClass 或者 recordClass 會繼承這個類;在Table的rootClass屬性中可以覆蓋該選項 註意:如果在key class或者record class中有root class相同的屬性,MBG就不會重新生成這些屬性了 --> <!--<property name="rootClass" value=""/>--> <!-- trimStrings:設置是否在getter方法中,對String類型字段調用trim()方法,默認false。可以使用<table>或<columnOverride>元素中的trimStrings屬性覆蓋。 --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- sqlMapGenerator:SQL Map的XML文件生成器,如果指定sqlMapGenerator,MBG 生成SQL映射XML文件和模型classess。如果未指定sqlMapGenerator,則僅生成模型類。 在Mybatis3之後,我們可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),或者使用 Mapper 接口加 Annotation,所以,如果 javaClientGenerator 配置中配置了需要生成 XML 的話,這個元素就必須配置 targetPackage/targetProject:同 javaModelGenerator --> <sqlMapGenerator targetPackage="test.xml" targetProject="src/main/java"> <!-- 同 javaModelGenerator 中的 enableSubPackages--> <property name="enableSubPackages" value="false"/> </sqlMapGenerator> <!-- javaClientGenerator:即生成 Mapper 接口,如果沒有配置該元素,那麽默認不會生成 Mapper 接口 targetPackage/targetProject:同javaModelGenerator type:Java客戶端生成器,指定用戶提供的Java客戶端生成器。用戶提供的 DAO 生成器必須擴展 org.mybatis.generator.codegen.AbstractJavaClientGenerator 類,並且必須具有公共默認構造函數。 如果 <context> targetRuntime 是 MyBatis3 1,ANNOTATEDMAPPER:會生成使用Mapper接口+Annotation的方式創建(SQL生成在annotation中),不會生成對應的XML 2,MIXEDMAPPER:使用混合配置,會生成Mapper接口,並適當添加合適的Annotation,但是XML會生成在XML中 3,XMLMAPPER:會生成Mapper接口,接口完全依賴XML 如果 <context> targetRuntime 是 MyBatis3Simple ANNOTATEDMAPPER/XMLMAPPER 如果 <context> targetRuntime 是 Ibatis2Java2 或 Ibatis2Java5 IBATIS/GENERIC-CI/GENERIC-SI/SPRING implementationPackage:如果指定,實現類將放在此包中 --> <javaClientGenerator type="XMLMAPPER" targetPackage="test.dao" targetProject="src/main/java" implementationPackage="test.dao"> <!-- enableSubPackages:控制實際包路徑的計算方式 true,則計算的包將是表的目錄和模式的 implementationPackage 加子包(如果存在) false(默認值),則計算的包將與implementationPackage屬性中指定的完全相同。 MBG 將根據生成的包創建文件夾 --> <property name="enableSubPackages" value="false"/> <!-- exampleMethodVisibility:設置不同“ByExample”方法的可見性 - selectByExample,deleteByExample等。不指定,方法將是公共的,並在界面中聲明 public 默認值:實現類中生成的方法將是public,並且將在接口中聲明方法 private:實現類中生成的方法將是私有的,並且不會在接口中聲明方法 protected:實現類中生成的方法將受到保護,並且不會在接口中聲明方法 default:實現類中生成的方法將具有默認(包)可見性,並且不會在接口中聲明方法 如果目標運行時為 MyBatis3,則忽略此屬性 --> <property name="exampleMethodVisibility" value="public"/> <!-- methodNameCalculator:選擇方法名稱計算器。方法名稱計算器可用於為 DAO 方法提供不同的名稱。可以選擇預定義值,也可以指定實現 org.mybatis.generator.api.DAOMethodNameCalculator 接口類的全類名 default 默認值:生成的方法名稱將非常簡單(“insert”,“updateByPrimaryKey”等) extended:生成的方法名稱將包含與方法關聯的域對象的名稱(“insertWidget”,“updateWidgetByPrimaryKey”等) 如果目標運行時為MyBatis3,則忽略此屬性。--> <property name="methodNameCalculator" value="default"/> <!-- rootInterface:為所有生成的接口對象指定超級接口。 可以通過在Table配置上指定rootInterface屬性來覆蓋此值 MBG不驗證接口是否存在,或者是否是有效的Java接口。屬性的值為全類名 --> <!--<property name="rootInterface" value=""/>--> <!--true,則帶註釋的客戶端將使用 MyBatis 中的 SqlBuilder 生成動態SQL。使用 MyBatis 3.2 及更高版本時,不推薦使用該構建器以支持新的SQL類。 false,MBG 將生成使用新 SQL 構建器的客戶端。默認 false --> <property name="useLegacyBuilder" value="false"/> </javaClientGenerator> <!-- 指定要逆向分析哪些表,根據表創建 javaBean --> <table tableName="dept" domainObjectName="Dept"/> </context> </generatorConfiguration>
運行
使用
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!-- 外部 properties 配置文件 --> <properties resource="db.properties"/> <!-- settings包含很多重要的設置項,setting:用來設置每一個設置項。name:設置項名,value:設置項取值 --> <settings> <!-- 開啟全局二級緩存 --> <setting name="cacheEnabled" value="true"/> <!-- 本地(一級)緩存作用域,默認 SESSION,會緩存一個會話(SqlSession)中執行的所有查詢。 設置為 STATEMENT,會話僅作用在語句執行上,對 SqlSession 的調用將不會共享數據,可認為是禁用一級緩存 --> <setting name="localCacheScope" value="SESSION"/> <!-- 控制臺打印SQL --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <!-- typeAliases:別名處理器:可以為我們的java類型起別名,別名不區分大小寫 --> <typeAliases> <!-- typeAlias:為某個java類型起別名,type:指定要起別名的類型全類名;默認別名就是類名小寫,alias:指定新的別名 --> <!--<typeAlias type="com.bean.MyUser" alias="myUser"/>--> <!-- package:為某個包下的所有類批量起別名,name:指定包名,為當前包以及下面所有的後代包的每一個類都起一個默認別名(類名小寫) --> <package name="test.model"/> <!-- 批量起別名的情況下,可以在 Bean 上使用 @Alias 註解為某個類指定新的別名 --> </typeAliases> <!-- environments:環境配置,default 指定使用某種環境 environment:配置一個具體的環境信息;必須有兩個標簽;id代表當前環境的唯一標識 transactionManager:事務管理器 type:事務管理器的類型 JDBC(JdbcTransactionFactory) | MANAGED(ManagedTransactionFactory)自定義事務管理器:實現 TransactionFactory 接口,type 為全類名 dataSource:數據源 type:數據源類型 UNPOOLED(UnpooledDataSourceFactory) | POOLED(PooledDataSourceFactory)| JNDI(JndiDataSourceFactory) 自定義數據源:實現 DataSourceFactory 接口,type 為全類名 配置註冊類:org.apache.ibatis.session.Configuration --> <environments default="development-mysql"> <environment id="development-mysql"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.8.136:3306/mybatis?allowMultiQueries=true"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> <environment id="development-oracle"> <transactionManager type="MANAGED"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!-- databaseIdProvider:支持多數據庫廠商; type="DB_VENDOR":VendorDatabaseIdProvider 作用就是得到數據庫廠商的標識(getDatabaseProductName()),mybatis就能根據數據庫廠商標識來執行不同的 SQL --> <databaseIdProvider type="DB_VENDOR"> <!-- 為不同的數據庫廠商起別名 --> <property name="MySQL" value="mysql"/> <property name="Oracle" value="oracle"/> <property name="SQL Server" value="sqlserver"/> </databaseIdProvider> <!-- mappers:將 SQL 映射文件註冊到全局配置中 --> <mappers> <!-- 引用類路徑下的 SQL 映射文件 --> <mapper resource="test/xml/DeptMapper.xml"/> <!-- 引用網路路徑或者磁盤路徑下的sql映射文件 --> <!--<mapper url="file:///var/mappers/AuthorMapper.xml"/>--> <!-- 引用 Class 接口註冊,沒有 SQL 映射文件,所有的 SQL 都是利用註解寫在接口上 --> <!--<mapper class="com.dao.MyUserMapperAnnotation"/>--> <!-- 批量註冊,有 SQL 映射文件,映射文件名必須和接口同名,並且放在與接口同一目錄下 --> <!--<package name="test.xml"/>--> </mappers> </configuration>
測試方法
public static void main(String[] args) throws IOException { SqlSession session = null; try { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); session = sqlSessionFactory.openSession(); DeptMapper mapper = session.getMapper(DeptMapper.class); // 查詢所有 System.out.println(mapper.selectByExample(null)); // 條件查詢 DeptExample deptExample = new DeptExample(); DeptExample.Criteria criteria = deptExample.createCriteria(); criteria.andIdEqualTo(1); System.out.println(mapper.selectByExample(deptExample)); } finally { if (session != null) { session.close(); } } }
官方配置文檔
https://www.cnblogs.com/ygjlch/p/6471924.html
xxxExample類的使用
https://blog.csdn.net/biandous/article/details/65630783
11、MyBatis-generator-Maven方式