Mybatis之****

mybatis****能做什么?

  • 首先****的作用就是帮我们把 已经存在的数据表 生成他们的pojo对象。

接下来,我们开始****吧~

  1. 建立一个数据库,名为codepay,运行如下sql,生成数据表
/*
Navicat MySQL Data Transfer

Source Server         : 本地
Source Server Version : 80013
Source Host           : 127.0.0.1:3306
Source Database       : codepay

Target Server Type    : MYSQL
Target Server Version : 80013
File Encoding         : 65001

Date: 2019-03-22 18:19:55
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for t_code
-- ----------------------------
DROP TABLE IF EXISTS `t_code`;
CREATE TABLE `t_code` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `xsdcode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `used` varchar(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `subject` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `xsdCode` (`xsdcode`)
) ENGINE=InnoDB AUTO_INCREMENT=234 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for t_pay
-- ----------------------------
DROP TABLE IF EXISTS `t_pay`;
CREATE TABLE `t_pay` (
  `id` varchar(255) NOT NULL,
  `payname` varchar(255) NOT NULL,
  `payamout` double(255,0) NOT NULL,
  `paytime` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `paystaus` varchar(255) NOT NULL,
  `mail` varchar(255) NOT NULL,
  `auditpass` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `xsdcode` int(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `xsdCode` (`xsdcode`),
  CONSTRAINT `t_pay_ibfk_1` FOREIGN KEY (`xsdcode`) REFERENCES `t_code` (`id`) ON DELETE SET NULL ON UPDATE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

数据库信息如下:

数据库如图

  1. 首先创建一个maven工程(为什么用maven工程呢?因为jar包管理起来不方便,没有学过maven的同学,可以先了解一下maven)
    pom依赖如下:
<dependencies>
  	<dependency>
	    <groupId>org.mybatis.generator</groupId>
	    <artifactId>mybatis-generator-core</artifactId>
	    <version>1.3.7</version>
	</dependency>
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>8.0.11 </version>
	</dependency>
	<dependency>
		 <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
		 <version>3.4.5</version>
	</dependency>

  </dependencies>
  1. 配置 ****的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>
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" /> -->

  <context id="DB2Tables" targetRuntime="MyBatis3">
    <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/codepay?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=GMT%2B8" userId="root" password="123456">
    </jdbcConnection>

    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

    <javaModelGenerator targetPackage="com.raven.pojo" targetProject=".\src">
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

    <sqlMapGenerator targetPackage="config" targetProject=".\resources">
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

    <javaClientGenerator type="XMLMAPPER" targetPackage="com.raven.dao" targetProject=".\src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

    <!-- <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" > <property name="useActualColumnNames" value="true"/> <generatedKey column="ID" sqlStatement="DB2" identity="true" /> <columnOverride column="DATE_FIELD" property="startDate" /> <ignoreColumn column="FRED" /> <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> </table> -->
    <table tableName="t_code" domainObjectName="Code"></table>
    <table tableName="t_pay" domainObjectName="Pay"></table>

  </context>
</generatorConfiguration>

介绍一下里面主要标签的作用

  • jdbcConnection配置自己的数据源信息
  • <javaModelGenerator>
    targetPackage指定自动生成的pojo的包名
    targetProject指定路径
  • <sqlMapGenerator>
    targetPackage指定自动生成的mapper.xml文件的包名
    targetProject指定路径
  • <javaModelGenerator>
    targetPackage指定自动生成的dao层接口的包名
    targetProject指定路径
  • <table>
    tableName表示数据表的名字
    domainObjectName表示POJO的名字
    4.运行代码,生成 pojo 实体类
public class MybatisGener {
	public static void main(String[] args) throws Exception {
		   List<String> warnings = new ArrayList<String>();
		   boolean overwrite = true;
		   // ****的配置文件
		   File configFile = new File("resources/generatorConfig.xml");
		   System.out.println(configFile.exists());
		   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);
	}
}

生成之后的工程目录如下:
在这里插入图片描述
接下来,我们玩一玩mybatis为我们生成的接口,真的很强大。尤其是生成的 *Example,查询起来真的很好玩。

public class GenerTest {
		public static void main(String[] args) throws IOException {
			
			InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
			SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
			SqlSession openSession = build.openSession();
			PayMapper payMapper = openSession.getMapper(PayMapper.class);
			PayExample payExample = new PayExample();
			Criteria createCriteria = payExample.createCriteria();
			createCriteria.andIdIsNotNull();
			List<Pay> list = payMapper.selectByExample(payExample);
			list.forEach((e)->{
				System.out.println(e.toString());
			});
		
		}
}