第三十八章:MyBatis框架之mybatis 逆向工程11

MyBatis逆向工程,簡稱MBG。是一個專門爲MyBatis框架使用者定製的代碼生成器。可以快速的根據表生成對應的映射文件,接口,以及Bean類對象。
在Mybatis中,有一個可以自動對單表生成的增,刪,改,查代碼的插件。

叫 mybatis-generator-core-1.3.2。

它可以幫我們對比數據庫表之後,生成大量的這個基礎代碼。
這些基礎代碼有:
1、數據庫表對應的javaBean對象
2、這些javaBean對象對應的Mapper接口
3、這些Mapper接口對應的配置文件

16.1、準備數據庫表

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('admin','admin','[email protected]');
insert into t_user(`username`,`password`,`email`) values('wzg168','123456','[email protected]');
insert into t_user(`username`,`password`,`email`) values('admin168','123456','[email protected]');
insert into t_user(`username`,`password`,`email`) values('lisi','123456','[email protected]');
insert into t_user(`username`,`password`,`email`) values('wangwu','123456','[email protected]');

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


## 插入初始化測試數據
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 , '數據結構與算法' , '嚴敏君' , 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工程
導入下面的包:
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目錄下準備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、準備 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 屬性設置生成的代碼是什麼樣的版本
   			MyBatis3Simple 	表示帶有單表的簡單的增,刪,改,查
   			MyBatis3		表示帶有單表的增,刪,改,查,之外,還有類似Hiberante 的 QBC複雜查詢
    -->
  <context id="DB2Tables" targetRuntime="MyBatis3">
  	<!-- 去掉全部的註釋 -->
	<commentGenerator>
        <property name="suppressAllComments" value="true" />
    </commentGenerator>
  	<!-- 
  		jdbcConnection 爲數據庫連接的四要素信息。
  		請修改成爲你自己的內容
  	 -->
    <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 生成表對應的javaBean
		targetPackage 屬性設置生成的類的包名
		targetProject 屬性設置生成的工程的路徑    一般生成爲當前工程。寫爲 .\
	 -->
    <javaModelGenerator targetPackage="com.bean" targetProject=".\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>
	<!-- 
		sqlMapGenerator 生成表對應的sql的xml配置文件
		targetPackage 屬性設置生成的sql配置文件的包名
		targetProject 屬性設置生成的工程的路徑    一般生成爲當前工程。寫爲 .\		
	 -->
    <sqlMapGenerator targetPackage="com.mapper"  targetProject=".\src">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>
	
	<!-- 
		javaClientGenerator 生成mybatis客戶端的代碼 ===dao或mapper之類
		targetPackage 屬性設置生成的mybatis的調用代碼,比如mapper之類的接口
		targetProject 屬性設置生成的工程的路徑    一般生成爲當前工程。寫爲 .\	
	 -->
    <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<String> warnings = new ArrayList<String>();
		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插件的開發
17.1、mybatis的源碼分析
mybatis框架中有四大對象:
Executor 負責update, query, flushStatements, commit, rollback, getTransaction, close, isClosed
ParameterHandler 負責getParameterObject, setParameters
ResultSetHandler 負責handleResultSets, handleOutputParameters
StatementHandler 負責prepare, parameterize, batch, update, query
過濾器相關:
InterceptorChain 過濾器鏈 管理管理和調用全部的過濾器執行
Interceptor 過濾器 負責攔截Executor、ParameterHandler、ResultsetHandler、StatementHandler

17.3、mybatis的分頁插件pageHelper使用
1、先導入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<User> page = PageHelper.startPage(1, 5);
		UserMapper userMapper = session.getMapper(UserMapper.class);
		List<User> list = userMapper.queryUsers();
		System.out.println("當前頁:" + page.getPageNum());
		System.out.println("總頁數:" + page.getPages());
		System.out.println("每頁顯示數量:" + page.getPageSize());
		System.out.println("總記錄數:" + page.getTotal());
		System.out.println("當前頁數據:" + page.getResult());
		System.out.println(page);
		for (User user : list) {
			System.out.println(user);
		}
	} finally {
		session.close();
	}
}

4、測試結果:
在這裏插入圖片描述
17.4、PageInfo類的使用。
PageInfo 類是專門給分頁使用的一個類。可以方便的幫我們計算出需要顯示的頁碼。使用起來也很簡單。
使用示例:

@Test
public void testQueryUsers() {
	SqlSession session = sqlSessionFactory.openSession();
	try {
		UserMapper userMapper = session.getMapper(UserMapper.class);
		PageHelper.startPage(5, 2);
		List<User> list = userMapper.queryUsers();
		PageInfo<User> pageInfo = new PageInfo<>(list, 5);
		System.out.println("當前頁:" + pageInfo.getPageNum());
		System.out.println("總頁數:" + pageInfo.getPages());
		System.out.println("每頁顯示數量:" + pageInfo.getPageSize());
		System.out.println("總記錄數:" + pageInfo.getTotal());
      // 遍歷當前頁數據
		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();
	}
}

測試的結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章