• 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的
  • 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:

    • Java实体类
    • Mapper接口
    • Mapper映射文件

      开始之前的目录结构

      image.png

      创建逆向工程的步骤

      1. 添加依赖和插件pom.xml

      ```xml <?xml version=”1.0” encoding=”UTF-8”?> <project xmlns=”http://maven.apache.org/POM/4.0.0

      1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      4.0.0

      org.example MyBatis_demo1

      1.0-SNAPSHOT 8 8

      1. <groupId>org.mybatis</groupId>
      2. <artifactId>mybatis</artifactId>
      3. <version>3.5.7</version>

      1. <groupId>junit</groupId>
      2. <artifactId>junit</artifactId>
      3. <version>4.12</version>
      4. <scope>test</scope>

      1. <groupId>mysql</groupId>
      2. <artifactId>mysql-connector-java</artifactId>
      3. <version>5.1.3</version>

      org.mybatis.generator mybatis-generator-maven-plugin 1.3.0 org.mybatis.generator mybatis-generator-core 1.3.2 com.mchange c3p0 0.9.2 mysql mysql-connector-java 5.1.3

  1. <a name="bNSLK"></a>
  2. ## 2. 创建MyBatis的核心配置文件mybatis-config.xml
  3. ```xml
  4. <?xml version="1.0" encoding="UTF-8" ?>
  5. <!DOCTYPE configuration
  6. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  7. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  8. <configuration>
  9. <properties resource="jdbc.properties"></properties>
  10. <typeAliases>
  11. <package name="com.lyd.mybatis.pojo"/>
  12. </typeAliases>
  13. <!--设置连接数据库的环境-->
  14. <environments default="development">
  15. <environment id="development">
  16. <transactionManager type="JDBC"/>
  17. <dataSource type="POOLED">
  18. <property name="driver" value="${jdbc.driver}"/>
  19. <property name="url" value="${jdbc.url}"/>
  20. <property name="username" value="${jdbc.username}"/>
  21. <property name="password" value="${jdbc.password}"/>
  22. </dataSource>
  23. </environment>
  24. </environments>
  25. <!--引入映射文件-->
  26. <mappers>
  27. <package name="com.lyd.mybatis.mapper"/>
  28. </mappers>
  29. </configuration>

3. 创建逆向工程的配置文件generatorConfig.xml

文件名必须是generatorConfig.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE generatorConfiguration
  3. PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  4. "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
  5. <generatorConfiguration>
  6. <!--
  7. targetRuntime: 执行生成的逆向工程的版本
  8. MyBatis3Simple: 生成基本的CRUD(清新简洁版)
  9. MyBatis3: 生成带条件的CRUD(奢华尊享版)
  10. -->
  11. <context id="DB2Tables" targetRuntime="MyBatis3Simple">
  12. <!-- 数据库的连接信息,写死 -->
  13. <jdbcConnection driverClass="com.mysql.jdbc.Driver"
  14. connectionURL="jdbc:mysql://localhost:3306/mybatisdb"
  15. userId="root"
  16. password="123456">
  17. </jdbcConnection>
  18. <!--
  19. 实体类的生成策略:
  20. targetPackage:包名
  21. targetProject:包位置
  22. enableSubPackages:是否是包名,true就是把targetPackage当成包名,false就是把他当成普通文件夹
  23. trimStrings:去掉字符串两端的空格
  24. -->
  25. <javaModelGenerator targetPackage="com.lyd.mybatis.pojo" targetProject=".\src\main\java">
  26. <property name="enableSubPackages" value="true" />
  27. <property name="trimStrings" value="true" />
  28. </javaModelGenerator>
  29. <!-- SQL映射文件的生成策略 -->
  30. <sqlMapGenerator targetPackage="com.lyd.mybatis.mapper"
  31. targetProject=".\src\main\resources">
  32. <property name="enableSubPackages" value="true" />
  33. </sqlMapGenerator>
  34. <!-- Mapper接口的生成策略 -->
  35. <javaClientGenerator type="XMLMAPPER"
  36. targetPackage="com.lyd.mybatis.mapper" targetProject=".\src\main\java">
  37. <property name="enableSubPackages" value="true" />
  38. </javaClientGenerator>
  39. <!-- 逆向分析的表 -->
  40. <!-- tableName设置为*号,可以对应所有表,此时不写domainObjectName -->
  41. <!-- domainObjectName属性指定生成出来的实体类的类名 -->
  42. <table tableName="t_emp" domainObjectName="Emp"/>
  43. <table tableName="t_dept" domainObjectName="Dept"/>
  44. </context>
  45. </generatorConfiguration>

4. 使用插件开始构建

打开Maven管理窗口,双击这个插件
image.png
这个表示构建成功
image.png

构建之后的目录

要重新构建,就要删掉之前创建的那些东西,再构建。

简单版本目录

image.png

完全版本目录

image.png

逆向构建的QBC条件查询(Query By Criteria)

  • selectByExample:按条件查询,需要传入一个example对象或者null;如果传入一个null,则表示没有条件,也就是查询所有数据
  • example.createCriteria().xxx:创建条件对象,通过andXXX方法为SQL添加查询添加,每个条件之间是and关系
  • example.or().xxx:将之前添加的条件通过or拼接其他条件
  • 可以用链式写法
  • 打一个点就能看到example对象里面包含了所有属性的方法,每个属性字段好几个方法,等于,在xx之间,在xx中,大于等………

image.png

  1. @Test
  2. public void testQBC() throws IOException {
  3. InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
  4. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
  5. SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
  6. SqlSession sqlSession = sqlSessionFactory.openSession(true);
  7. EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
  8. //条件对象
  9. EmpExample example = new EmpExample();
  10. //查询员工名字为张三,并且年龄为15
  11. example.createCriteria().andEmpNameEqualTo("张三").andAgeEqualTo(15);
  12. //或者查eid=7的
  13. example.or().andEidEqualTo(7);
  14. //又或者查询年龄在15-40之间的,性别为女的
  15. example.or().andAgeBetween(15,40).andSexEqualTo("女");
  16. List<Emp> emps = mapper.selectByExample(example);
  17. emps.forEach(System.out::println);
  18. }

image.png

Selective后缀的方法

  • 不加Selective后缀的方法,如果某一个值为null,也会将对应的字段改为null
  • 加了Selective后缀的方法,如果某个值为null,则不修改这个字段

    image.png