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

简介: 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  + "\t" );
    }
    System.out.println();
  } finally {
    session.close();
  }
}

测试的结果

运行方法:在eclipse 中,选择pom.xml文件,击右键先择Run AS——>Maven Build… ——>在Goals框中输入:mybatis-generator:generate

相关文章
|
3月前
|
Java 数据库连接 Maven
后端框架学习-----mybatis(使用mybatis框架遇到的问题)
这篇文章总结了在使用MyBatis框架时可能遇到的几个常见问题及其解决方法,包括配置文件注册、接口绑定、方法名匹配、返回类型匹配、Maven资源导出、时区设置和字符编码问题。
|
19天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
33 1
持久层框架MyBatisPlus
|
20天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
118 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
|
1月前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
34 0
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
3月前
|
Java 数据库连接 mybatis
mybatis框架图
文章介绍了MyBatis框架的起源、发展和其作为持久层框架的功能,提供了MyBatis的框架图以帮助理解其结构和组件。
mybatis框架图
|
3月前
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)
|
3月前
|
Java 数据库连接 mybatis
后端框架的学习----mybatis框架(9、多对一处理和一对多处理)
这篇文章介绍了在MyBatis框架中如何处理多对一和一对多的关联查询,通过定义`<resultMap>`和使用`<association>`与`<collection>`元素来实现对象间的关联映射。
|
3月前
|
Java 数据库连接 测试技术
后端框架的学习----mybatis框架(8、lombok)
这篇文章介绍了如何在MyBatis框架中使用lombok库来简化Java实体类的编写,包括在IDEA中安装Lombok插件、在项目中导入lombok依赖以及在实体类上使用Lombok提供的注解。
下一篇
无影云桌面