随笔 - 134,  文章 - 0,  评论 - 0,  阅读 - 21295

Mybatis 的逆向工程

Mybatis是一个半自动化的ORM框架,SQL语句需要要开发者自己定义,SQL定义在Mapper.xml中,与对应的Mapper接口对应

  • 实体类

  • 接口

  • Mapper.xml

    工作量较大不好开发。

    可以根据表来生成你要的接口和类还有接口--------逆向工程

    逆向工程是Mybatis提供的一项自动化方案,正对数据表自动的生成一些资源,但是逆向工程只正对单表,如果由级联关系无法自动生成。

    使用逆向工程 Mabtis Generator (MBG) ,是专门为Mybits框架定制的代码自动生成解决问题的方案。

1.创建maven,pom.xml添加相关依赖:

          <!--    mybatis-->
          <dependency>
              <groupId>org.mybatis</groupId>
              <artifactId>mybatis</artifactId>
              <version>3.4.5</version>
          </dependency>
  <!--        mysql-->
          <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>8.0.19</version>
          </dependency>
  <!--        mbg-->
          <dependency>
              <groupId>org.mybatis.generator</groupId>
              <artifactId>mybatis-generator-core</artifactId>
              <version>1.3.2</version>
          </dependency>
  <!--        lombox-->
          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>1.18.10</version>
          </dependency>

2.建表

3.配置mbg的配置文件

  • 配置数据库的连接信息 jdbcConnection

  • 配置javaBean的生成策略javaModelGenerator

  • 配置SQL的也设文件的生成策略javaClientGenerator

  • 配置需要逆向解析的数据表table( tableName:表名 domainObjectName:实体类名)

<?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="testTables" targetRuntime="Mybatis3">
        <jdbcConnection
                driverClass="com.mysql.cj.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/text?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8"
                userId="root"
                password="123456"
                ></jdbcConnection>
        <javaModelGenerator targetPackage="com.southwind.entity" targetProject="./src/main/java"></javaModelGenerator>
        <sqlMapGenerator targetPackage="com.southwind.repository" targetProject="./src/main/java"></sqlMapGenerator>
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.southwind.repository" targetProject="./src/main/java"></javaClientGenerator>
        <table tableName="people" domainObjectName="People"></table>
    </context>
</generatorConfiguration>

4.创建GeneratorMain类启动逆向工程

Mybatis的延迟加载

1.配置:

    <settings>
<!--        打印SQL-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
<!--        延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
    </settings>

2.Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shouthwind.repository.CourseRepository">
<!--    <resultMap id="courseMap" type="com.shouthwind.entity.Course">-->
<!--        <id column="cid" property="id"></id>-->
<!--        <result column="cname" property="name"></result>-->
<!--        <collection property="accounts" ofType="com.shouthwind.entity.Account">-->
<!--            <id column="aid" property="id"></id>-->
<!--            <result column="aname" property="name"></result>-->
<!--        </collection>-->
<!--    </resultMap>-->
<!--    <select id="findById" parameterType="java.lang.Integer" resultMap="courseMap">-->
<!--     select a.id aid,a.name aname,c.id cid,c.name cname from account a,t_course c,account_course ac where c.id=#{id} and a.id=ac.aid and c.id=ac.cid-->
<!-- </select>-->
    <resultMap id="courseMap" type="com.shouthwind.entity.Course">
        <id column="id" property="id"></id>
        <result column="name" property="name"></result>
        <association property="accounts"
                     javaType="com.shouthwind.entity.Account"
                     select="com.shouthwind.repository.AccountRepository.findById"
                     column="id"
                     ></association>
    </resultMap>
    <select id="findById" parameterType="java.lang.Integer" resultMap="courseMap">
        select * from t_course where id=#{id}
    </select>
</mapper>

3.创建AccountRepository.findByid

<select id="findBuId" parameterType="java.lang.Integer" resultType="com.shouthwind.entity.Account">
    select * from  account where id=#{id}
</select>
public Account findById(Integer id);

4.测试

public class Test6 {
    public static void main(String[] args) {
        InputStream inputStream = Test5.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取实现了自定义代理接口的对象
        CourseRepository courseRepository=sqlSession.getMapper(CourseRepository.class);
        Course course =courseRepository.findById(1);
        System.out.println(course.getAccounts().getName());
    }
}

延迟加加载是使用频率较高的应用,好的使用可以减少数据库的交互,可以提高程序运行效率的手段,一般用于d多表关联查询。

posted on   Steam残酷  阅读(38)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示