ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Mybatis的逆向工程与延迟加载

2022-06-23 22:37:04  阅读:81  来源: 互联网

标签:xml 逆向 -- mybatis Mybatis id 加载


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:实体类名)

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多表关联查询。

标签:xml,逆向,--,mybatis,Mybatis,id,加载
来源: https://www.cnblogs.com/HJZ114152/p/16406972.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有