一、構(gòu)建一個(gè)環(huán)境:
1. 首先創(chuàng)建一個(gè)表:
- CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
2. 然后注入數(shù)據(jù)
- insert into pet values('Fluffy', 'Harold', 'cat', 'f', '1993-02-04', null);
- insert into pet values('Claws', 'Gwen', 'cat', 'm', '1994-03-17', null);
- insert into pet values('Buffy', 'Harold', 'dog', 'f', '1989-05-13', null);
- insert into pet values('Fang', 'Benny', 'dog', 'm', '1990-08-27', null);
- insert into pet values('Bowser', 'Diane', 'dog', 'm', '1979-08-31', '1995-07-29');
- insert into pet values('Chirpy', 'Gwen', 'bird', 'f', '1998-09-11', null);
- insert into pet values('Whistler', 'Gwen', 'bird', null, '1997-12-09', null);
- insert into pet values('Slim', 'Benny', 'snake', 'm', '1996-04-29', null);
insert into pet values('Fluffy', 'Harold', 'cat', 'f', '1993-02-04', null);insert into pet values('Claws', 'Gwen', 'cat', 'm', '1994-03-17', null);insert into pet values('Buffy', 'Harold', 'dog', 'f', '1989-05-13', null);insert into pet values('Fang', 'Benny', 'dog', 'm', '1990-08-27', null);insert into pet values('Bowser', 'Diane', 'dog', 'm', '1979-08-31', '1995-07-29');insert into pet values('Chirpy', 'Gwen', 'bird', 'f', '1998-09-11', null);insert into pet values('Whistler', 'Gwen', 'bird', null, '1997-12-09', null);insert into pet values('Slim', 'Benny', 'snake', 'm', '1996-04-29', null);
注:這里的sql例子來(lái)自 http://dev.mysql.com/doc/refman/5.5/en/creating-tables.html
3. 在 Mybatis 主頁(yè) http://code.google.com/p/mybatis/ 上下載 Mybatismybatis-generator-core [本文使用的是 1.3.0 版本]。當(dāng)然運(yùn)行 mybatis-generator生成的代碼還需要下載 mybatis 的 jar 包[本例使用的是 3.0.2 版本],和相關(guān)數(shù)據(jù)庫(kù)的 jdbc[本文中使用的是MySql的jdbc] 。
二、運(yùn)行 mybatis-generator
1. 要運(yùn)行 generator ,需要給 generator 提供一個(gè)配置文件,指定其生成的數(shù)據(jù)庫(kù)的相關(guān)信息。
以下是一個(gè)示例:
- <?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>
- <classPathEntry location="mysql-connector-java-5.1.6-bin.jar" />
-
- <context id="DB2Tables" targetRuntime="MyBatis3">
-
- <commentGenerator>
- <property name="suppressDate" value="true" />
- </commentGenerator>
-
- <jdbcConnection driverClass="com.mysql.jdbc.Driver"
- connectionURL="jdbc:mysql://localhost/test" userId="qgd" password="123456">
- </jdbcConnection>
-
- <javaTypeResolver>
- <property name="forceBigDecimals" value="false" />
- </javaTypeResolver>
-
- <javaModelGenerator targetPackage="test.model"
- targetProject="../src/main/java">
- <property name="enableSubPackages" value="true" />
- <property name="trimStrings" value="true" />
- </javaModelGenerator>
-
- <sqlMapGenerator targetPackage="test.dao"
- targetProject="../src/main/java">
- <property name="enableSubPackages" value="true" />
- </sqlMapGenerator>
-
- <javaClientGenerator type="XMLMAPPER"
- targetPackage="test.dao" targetProject="../src/main/java">
- <property name="enableSubPackages" value="true" />
- </javaClientGenerator>
-
- <table tableName="pet" domainObjectName="Pet">
- </table>
-
- </context>
- </generatorConfiguration>
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><classPathEntry location="mysql-connector-java-5.1.6-bin.jar" /><context id="DB2Tables" targetRuntime="MyBatis3"><commentGenerator><property name="suppressDate" value="true" /></commentGenerator><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost/test" userId="qgd" password="123456"></jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><javaModelGenerator targetPackage="test.model"targetProject="../src/main/java"><property name="enableSubPackages" value="true" /><property name="trimStrings" value="true" /></javaModelGenerator><sqlMapGenerator targetPackage="test.dao"targetProject="../src/main/java"><property name="enableSubPackages" value="true" /></sqlMapGenerator><javaClientGenerator type="XMLMAPPER"targetPackage="test.dao" targetProject="../src/main/java"><property name="enableSubPackages" value="true" /></javaClientGenerator><table tableName="pet" domainObjectName="Pet"></table></context></generatorConfiguration>
這個(gè)配置文件提供了 mybatis-generator所需要的參數(shù)信息:
* 其中classPathEntry 是引用的jdbc的類(lèi)路徑,這里將jdbc jar和generator的jar包放在一起了;
* commentGenerator 是用來(lái)除去時(shí)間信息的,這在配合類(lèi)似subversion的代碼管理工具時(shí)使用很有效,因?yàn)榭梢詼p少?zèng)]有必要的注釋遷入;
* jdbcConnection是指定的jdbc的連接信息;
* javaTypeResolver式類(lèi)型轉(zhuǎn)換的信息,這里并沒(méi)有用到;
* javaModelGenerator是模型的生成信息,這里將指定這些Java model類(lèi)的生成路徑;
* sqlMapGenerator是mybatis 的sqlMapper XML文件的生成信息,包括生成路徑等;
* javaClientGenerator是應(yīng)用接口的生成信息;
* table是用戶(hù)指定的被生成相關(guān)信息的表,它必須在指定的jdbc連接中已經(jīng)被建立。
2. mybatis-generator 有多種運(yùn)行方式,最簡(jiǎn)單的就是命令行的方式,只需要指定相應(yīng)的配置文件的路徑即可:
- java -jar mybatis-generator-core-1.3.0.jar -configfile ../src/main/resource/config.xml -overwrite
java -jar mybatis-generator-core-1.3.0.jar -configfile ../src/main/resource/config.xml -overwrite
運(yùn)行后生成的代碼包括模型類(lèi) test.model.Pet 和 test.model.PetExample , test.dao.PetMapper 接口以及其相對(duì)應(yīng)的 xml 映射文件,在這里就不在贅述了。
三、使用 mybatis-generator 生成的代碼
1. 現(xiàn)在我們要利用這些生成的代碼,首先我們需要一個(gè)關(guān)于所有映射的配置文件。需要我們手寫(xiě)如下:【不知道為什么generator沒(méi)有選擇自動(dòng)生成這個(gè)文件,畢竟這些信息generator都可以得到】
- <?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>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC" />
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.jdbc.Driver" />
- <property name="url" value="jdbc:mysql://localhost/test" />
- <property name="username" value="qgd" />
- <property name="password" value="123456" />
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="test/dao/PetMapper.xml" />
- </mappers>
- </configuration>
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost/test" /><property name="username" value="qgd" /><property name="password" value="123456" /></dataSource></environment></environments><mappers><mapper resource="test/dao/PetMapper.xml" /></mappers></configuration>
2. 另外還要使用然后我們還需要一個(gè)Main示例方法來(lái)調(diào)用這些已生成的代碼:
- package test;
-
- import java.io.Reader;
- import java.util.List;
-
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import test.dao.PetMapper;
- import test.model.Pet;
- import test.model.PetExample;
-
- public class Test {
-
- public static void main(String[] args) throws Exception {
- String resource = "MapperConfig.xml";
- Reader reader = Resources.getResourceAsReader(resource);
- SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
- SqlSession sqlSession = sqlMapper.openSession();
-
- PetExample pet = new PetExample();
- pet.or().andDeathIsNotNull();
- try {
- PetMapper mapper = sqlSession.getMapper(PetMapper.class);
- List<Pet> allRecords = mapper.selectByExample(pet);
- for (Pet s : allRecords)
- System.out.println(s);
- } finally {
- sqlSession.close();
- }
- }
- }
package test;import java.io.Reader;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import test.dao.PetMapper;import test.model.Pet;import test.model.PetExample;public class Test {public static void main(String[] args) throws Exception {String resource = "MapperConfig.xml";Reader reader = Resources.getResourceAsReader(resource);SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);SqlSession sqlSession = sqlMapper.openSession();PetExample pet = new PetExample();pet.or().andDeathIsNotNull();try {PetMapper mapper = sqlSession.getMapper(PetMapper.class);List<Pet> allRecords = mapper.selectByExample(pet);for (Pet s : allRecords)System.out.println(s);} finally {sqlSession.close();}}}
這樣就可以打印出相應(yīng)的查詢(xún)結(jié)果信息了。
四、小結(jié)
該示例的完整的Eclipse工程見(jiàn)附件mybatis-generator-usage.zip,其中已經(jīng)包含了示例需要使用的jar包。
本文中只是用到了mybatis-generator 的一部分功能,mybatis-generator生成代碼的方式還包括ant或Maven腳本,或者直接使用javaAPI生成;另外通過(guò)修改配置文件,generator還可以指定表的生成細(xì)節(jié),并可以添加插件。其功能文檔在generator的分發(fā)包的doc文件夾下有更詳細(xì)的介紹。
這里使用的表示沒(méi)有主鍵的表,針對(duì)有一個(gè)主鍵或多個(gè)主鍵的表,mybatis-generator的生成的內(nèi)容也有所不同,感興趣的讀者可以自行試驗(yàn)一下。