Mybatis逆向工程生成pojo、mapper.java和mapper.xml

Mybatis的逆向工程可以在设计好数据库表的基础上,通过java程序,生成pojo、mapper、和mapper.xml

生成了mapper.xml可满足大部门的增删改查的接口和方法。

在Service中可直接掉用mapper.java中的方法操作数据库。

步骤:

1. 在eclipse中new一个普通的project.

2. 导包



3. 数据库表

CREATE TABLE `items` (
  `items_id` int(11) NOT NULL AUTO_INCREMENT,
  `items_name` varchar(32) NOT NULL COMMENT '商品名称',
  `items_price` float(10,1) NOT NULL COMMENT '商品定价',
  `items_detail` text COMMENT '商品描述',
  `items_pic` varchar(64) DEFAULT NULL COMMENT '商品图片',
  `items_createtime` datetime NOT NULL COMMENT '生产日期',
  PRIMARY KEY (`items_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8

4. 编写generatorConfig.xml,打开官方下载的docs文件夹,打开index.html,里面有详细的介绍和生成方法

在这里使用xml和java程序的方式。参照Running MyBatis和XML Configuration File Reference就可以完成这个Java程序。



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>
	<context id="caigouTables" targetRuntime="MyBatis3">
		<commentGenerator>
			<!-- 是否去除自动生成的注释 true:是 : false:否 -->
			<property name="suppressAllComments" value="true" />
		</commentGenerator>
		<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
			password="123456">
		</jdbcConnection>

		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer true,把JDBC DECIMAL 和 
			NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- targetProject:生成PO类的位置 -->
		<javaModelGenerator targetPackage="com.plin.ssm.po"
			targetProject=".\src">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>
        <!-- targetPackage:mapper映射文件生成的位置 -->
		<sqlMapGenerator targetPackage="com.plin.ssm.mapper" 
			targetProject=".\src">
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>
		<!-- targetPackage:mapper接口的生成位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.plin.ssm.mapper" 
			targetProject=".\src">
			<property name="enableSubPackages" value="false" />
		</javaClientGenerator>
		
		<!-- 指定表 -->
		<!-- 商品表 -->
		<table schema="mybatis" tableName="items" />

	</context>
</generatorConfiguration>

主要是三个地方:(其他地方不用管)

      数据库连接信息;

      生成的pojo包名和生产的mapper包名

      要生成的数据库名称和表名

5. 新建一个class(GeneratorSqlmap.class), 包含Main方法。里面的代码也是官方文档Ctrl+c过来。主要修改配置的src/generatorConfig.xml的位置和名字。

GeneratorSqlmap.class

package com.plin.mybatis_generator_main;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;

public class GeneratorSqlmap {

		public void generator() throws Exception{

			List<String> warnings = new ArrayList<String>();
			boolean overwrite = true;
			//指定 逆向工程配置文件
			File configFile = new File("src/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();
			}
			
		}
}

6. 运行这个程序。自动生成包、pojo、mapper.java、mapper.xml。



7. 使用生成的包和测试 

    将mapper包和po包直接拷贝到需要工程的src下。注意拷贝后查看Mapper的Namespace,要与原来的Spring配置文件一致,否则会出现mapper的namespace错误,期望的namespace和实际的namespace不一致,因为namespace是根据包名和类名来生成的。建议在生成的java程序中,就将包名设置为项目实际的包名。

关于Maven和spring,MyBatis整合参考我另一篇文章:Spring Boot和Maven 整合Mybatis项目


测试一个程序:

@Test
	public void testSelectByExample() {
		ItemsExample itemsExample = new ItemsExample();
		Criteria criteria = itemsExample.createCriteria();
		criteria.andItemsNameEqualTo("水杯");
		criteria.andItemsIdEqualTo(3);
		List<Items> list= (List<Items>) itemsMapper.selectByExample(itemsExample);
		System.out.println(list);
	}

运行结果





版权声明:本文为lping985原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。