• MyBatis框架:第十一章:mybatis 逆向工程


    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','admin@atguigu.com');
    insert into t_user(`username`,`password`,`email`) values('wzg168','123456','admin@atguigu.com');
    insert into t_user(`username`,`password`,`email`) values('admin168','123456','admin@atguigu.com');
    insert into t_user(`username`,`password`,`email`) values('lisi','123456','admin@atguigu.com');
    insert into t_user(`username`,`password`,`email`) values('wangwu','123456','admin@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)
    );
    
    
    ## 插入初始化测试数据
    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  + "	" );
    		}
    		System.out.println();
    	} finally {
    		session.close();
    	}
    }
    

    测试的结果
    在这里插入图片描述
    运行方法:在eclipse 中,选择pom.xml文件,击右键先择Run AS——>Maven Build… ——>在Goals框中输入:mybatis-generator:generate

  • 相关阅读:
    jQuery easyui datagrid pagenation 的分页数据格式
    Mysql操作符号
    jquery JSON的解析方式
    线程有几种状态
    工作日志2014-07-07
    leetcode
    Fragment中的setUserVisibleHint()方法调用
    Android开发:Eclipse中SqliteManager插件使用
    海南出差报告总结(案件录入与案件追踪系统)
    Python学习十四:filter()
  • 原文地址:https://www.cnblogs.com/javawxid/p/12812086.html
Copyright © 2020-2023  润新知