MyBatis框架:第十一章:mybatis 逆向工程
MyBatis逆向工程,簡稱MBG。是一個專門為MyBatis框架使用者定制的代碼生成器??梢钥焖俚母鶕?jù)表生成對應(yīng)的映射文件,接口,以及Bean類對象。
在Mybatis中,有一個可以自動對單表生成的增,刪,改,查代碼的插件。
叫 mybatis-generator-core-1.3.2。
它可以幫我們對比數(shù)據(jù)庫表之后,生成大量的這個基礎(chǔ)代碼。
這些基礎(chǔ)代碼有:
1、數(shù)據(jù)庫表對應(yīng)的javaBean對象
2、這些javaBean對象對應(yīng)的Mapper接口
3、這些Mapper接口對應(yīng)的配置文件
16.1、準(zhǔn)備數(shù)據(jù)庫表
create database mbg;
use mbg;
create table t_user(
id
int primary key auto_increment,
username
varchar(30) not null unique,
password
varchar(40) not null,
email
varchar(50)
);
insert into t_user(username
,password
,email
) values(‘a(chǎn)dmin’,‘a(chǎn)dmin’,‘a(chǎn)dmin@atguigu.com’);
insert into t_user(username
,password
,email
) values(‘wzg168’,‘123456’,‘a(chǎn)dmin@atguigu.com’);
insert into t_user(username
,password
,email
) values(‘a(chǎn)dmin168’,‘123456’,‘a(chǎn)dmin@atguigu.com’);
insert into t_user(username
,password
,email
) values(‘lisi’,‘123456’,‘a(chǎn)dmin@atguigu.com’);
insert into t_user(username
,password
,email
) values(‘wangwu’,‘123456’,‘a(chǎn)dmin@atguigu.com’);
create table t_book(
id
int primary key auto_increment,
name
varchar(50),
author
varchar(50),
price
decimal(11,2),
sales
int,
stock
int,
img_path
varchar(100)
);
插入初始化測試數(shù)據(jù)
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘java從入門到放棄’ , ‘國哥’ , 80 , 9999 , 9 , ‘static/img/default.jpg’);
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘?dāng)?shù)據(jù)結(jié)構(gòu)與算法’ , ‘嚴(yán)敏君’ , 78.5 , 6 , 13 , ‘static/img/default.jpg’);
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘怎樣拐跑別人的媳婦’ , ‘龍伍’ , 68, 99999 , 52 , ‘static/img/default.jpg’);
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘木虛肉蓋飯’ , ‘小胖’ , 16, 1000 , 50 , ‘static/img/default.jpg’);
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘C++編程思想’ , ‘剛哥’ , 45.5 , 14 , 95 , ‘static/img/default.jpg’);
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘蛋炒飯’ , ‘周星星’ , 9.9, 12 , 53 , ‘static/img/default.jpg’);
insert into t_book(id
, name
, author
, price
, sales
, stock
, img_path
)
values(null , ‘賭神’ , ‘龍伍’ , 66.5, 125 , 535 , ‘static/img/default.jpg’);
select * from t_user;
select * from t_book;
16.2、生成一個java工程
導(dǎo)入下面的包:
log4j-1.2.17.jar
mybatis-3.2.8.jar
mybatis-generator-core-1.3.2.jar
mysql-connector-java-5.1.7-bin.jar
在src目錄下準(zhǔn)備log4j.properties配置文件
Global logging configuration
log4j.rootLogger=DEBUG, stdout
MyBatis logging configuration…
#log4j.logger.org.mybatis.example.BlogMapper=TRACE
Console output…
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
16.3、準(zhǔn)備 mybatis-generator-core 的配置文件
<?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>
<!--
targetRuntime 屬性設(shè)置生成的代碼是什么樣的版本
MyBatis3Simple 表示帶有單表的簡單的增,刪,改,查
MyBatis3 表示帶有單表的增,刪,改,查,之外,還有類似Hiberante 的 QBC復(fù)雜查詢
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<!-- 去掉全部的注釋 -->
<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--
jdbcConnection 為數(shù)據(jù)庫連接的四要素信息。
請修改成為你自己的內(nèi)容
-->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mbg"
userId="root"
password="root">
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--
javaModelGenerator 生成表對應(yīng)的javaBean
targetPackage 屬性設(shè)置生成的類的包名
targetProject 屬性設(shè)置生成的工程的路徑 一般生成為當(dāng)前工程。寫為 .\
-->
<javaModelGenerator targetPackage="com.bean" targetProject=".\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--
sqlMapGenerator 生成表對應(yīng)的sql的xml配置文件
targetPackage 屬性設(shè)置生成的sql配置文件的包名
targetProject 屬性設(shè)置生成的工程的路徑 一般生成為當(dāng)前工程。寫為 .\
-->
<sqlMapGenerator targetPackage="com.mapper" targetProject=".\src">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!--
javaClientGenerator 生成mybatis客戶端的代碼 ===dao或mapper之類
targetPackage 屬性設(shè)置生成的mybatis的調(diào)用代碼,比如mapper之類的接口
targetProject 屬性設(shè)置生成的工程的路徑 一般生成為當(dāng)前工程。寫為 .\
-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mapper" targetProject=".\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!--
table 配置哪些表需要我們映射生成java代碼
tableName 是表名
domainObjectName 是javaBean名
-->
<table tableName="t_user" domainObjectName="User"></table>
<table tableName="t_book" domainObjectName="Book"></table>
</context>
</generatorConfiguration>
16.4、用于生成的java代碼
public static void main(String[] args) throws Exception, Exception {
List warnings = new ArrayList();
boolean overwrite = true;
// 配置文件的名稱 mbg_config.xml
File configFile = new File(“mbg_config.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);
}
17、mybatis插件的開發(fā)
17.1、mybatis的源碼分析
mybatis框架中有四大對象:
Executor 負(fù)責(zé)update, query, flushStatements, commit, rollback, getTransaction, close, isClosed
ParameterHandler 負(fù)責(zé)getParameterObject, setParameters
ResultSetHandler 負(fù)責(zé)handleResultSets, handleOutputParameters
StatementHandler 負(fù)責(zé)prepare, parameterize, batch, update, query
過濾器相關(guān):
InterceptorChain 過濾器鏈 管理管理和調(diào)用全部的過濾器執(zhí)行
Interceptor 過濾器 負(fù)責(zé)攔截Executor、ParameterHandler、ResultsetHandler、StatementHandler
17.3、mybatis的分頁插件pageHelper使用
1、先導(dǎo)入mybatis-pageHelper的jar包。
2、到mybatis-config.xml核心配置文件中配置 分頁的拼接器。
<plugins>
<!-- com.github.pagehelper為PageHelper類所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor"> </plugin>
</plugins>
3、使用mybatis-pageHelper示例代碼:
@Test
public void testQueryUsers() {
SqlSession session = sqlSessionFactory.openSession();
try {
Page page = PageHelper.startPage(1, 5);
UserMapper userMapper = session.getMapper(UserMapper.class);
List list = userMapper.queryUsers();
System.out.println(“當(dāng)前頁:” + page.getPageNum());
System.out.println(“總頁數(shù):” + page.getPages());
System.out.println(“每頁顯示數(shù)量:” + page.getPageSize());
System.out.println(“總記錄數(shù):” + page.getTotal());
System.out.println(“當(dāng)前頁數(shù)據(jù):” + page.getResult());
System.out.println(page);
for (User user : list) {
System.out.println(user);
}
} finally {
session.close();
}
}
4、測試結(jié)果:
17.4、PageInfo類的使用。
PageInfo 類是專門給分頁使用的一個類。可以方便的幫我們計算出需要顯示的頁碼。使用起來也很簡單。
使用示例:
@Test
public void testQueryUsers() {
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper userMapper = session.getMapper(UserMapper.class);
PageHelper.startPage(5, 2);
List list = userMapper.queryUsers();
PageInfo pageInfo = new PageInfo<>(list, 5);
System.out.println(“當(dāng)前頁:” + pageInfo.getPageNum());
System.out.println(“總頁數(shù):” + pageInfo.getPages());
System.out.println(“每頁顯示數(shù)量:” + pageInfo.getPageSize());
System.out.println(“總記錄數(shù):” + pageInfo.getTotal());
// 遍歷當(dāng)前頁數(shù)據(jù)
for (User user : list) {
System.out.println(user);
}
// 遍歷分頁條頁碼
System.out.print(“分頁條,頁碼是:”);
for (int i : pageInfo.getNavigatepageNums() ) {
System.out.print( i + “\t” );
}
System.out.println();
} finally {
session.close();
}
}
測試的結(jié)果
運行方法:在eclipse 中,選擇pom.xml文件,擊右鍵先擇Run AS——>Maven Build… ——>在Goals框中輸入:mybatis-generator:generate