mapper注解的主要作用,@mapper注解的使用_SpringBoot-Mybatis通用mapper使用

 2023-10-21 阅读 33 评论 0

摘要:mybatis是一個很好用的工具,但是編寫mapper是一件很麻煩的事,自mybatis 3.0開始可以使用注解的方式,極大的簡化了xml的編寫量,本地想看看mybatis源碼,自己擴展寫一個工具,在閱讀源碼過程中發現一個通用mapper的工具包,感覺不

mybatis是一個很好用的工具,但是編寫mapper是一件很麻煩的事,自mybatis 3.0開始可以使用注解的方式,極大的簡化了xml的編寫量,本地想看看mybatis源碼,自己擴展寫一個工具,在閱讀源碼過程中發現一個通用mapper的工具包,感覺不用重復造輪子了,簡要記錄一下spring boot整合通用mapper的使用。

mapper注解的主要作用,

v2-9279888ba590ef006b612450bbb01c86_b.jpg
  1. 確保可以正常使用mybatis

  2. pom引入依賴包,starter需要配合@Mapper注解使用,這里采用這種方式,或者使用@MapperScan注解,@tk.mybatis.spring.annotation.MapperScan(basePackages = "掃描包")配合原生mapper使用。

    <dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>{version}</version>
    </dependency>

    Mybatis框架,我使用的版本是2.0.2

  3. Mybatis 掃描配置(Deprecated, spring 自動配置)

    @Configuration
    //TODO 注意,由于MapperScannerConfigurer執行的比較早,所以必須有下面的注解
    @AutoConfigureAfter(MybatisAutoConfiguration.class)
    public class MyBatisMapperScannerConfig {@Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");mapperScannerConfigurer.setBasePackage("org.springboot.sample.mapper");Properties properties = new Properties();// 這里要特別注意,不要把MyMapper放到 basePackage 中,也就是不能同其他Mapper一樣被掃描到。 properties.setProperty("mappers", MyMapper.class.getName());properties.setProperty("notEmpty", "false");properties.setProperty("IDENTITY", "MYSQL");mapperScannerConfigurer.setProperties(properties);return mapperScannerConfigurer;}
    }
  4. 新建BaseMapper類,該類不能被當做普通Mapper一樣被掃描 ,不加@Mapper注解,或者放在不同文件夾

    package com.zj.mapper;import tk.mybatis.mapper.common.Mapper;
    import tk.mybatis.mapper.common.MySqlMapper;public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
    }
  5. mapper注入為null。業務處理dao層,擴展BaseMapper

    package com.zj.mapper;import com.zj.model.OrderInfo;
    import org.apache.ibatis.annotations.Mapper;@Mapper
    public interface OrderInfoMapper extends BaseMapper<OrderInfo> {}
  6. 其他和使用普通mybatis一致,service層部分代碼

    orderInfoMapper.insertSelective(info);
    OrderInfo info = orderInfoMapper.selectByPrimaryKey(id);

    通用mapper提供常用的一些操作方法: deleteByPrimaryKey, insert, insertSelective, selectByPrimaryKey, updateByPrimaryKeySelective, updateByPrimaryKey, insertList等很多方法,需要你進一步探索

  7. Mybatis。主鍵id問題

    當使用insert,insertSelective等方法時,希望返回由數據庫產生的逐漸,需要在實體類上增加注解

    @Id
    @GeneratedValue(generator = "JDBC")
    private Long orderInfoId;

    generator="JDBC"表示 MyBatis 使用 JDBC 的 getGeneratedKeys 方法來取出由數據庫內部生成的主鍵 ,適用于MySQL,SQL Server等的自增主鍵。

    mapper,或者:

    @Id
    @KeySql(useGeneratedKeys = true)
    private Long id;
  8. 如果實體字段和數據庫字段不一致,可以使用@Column注解,其他注解 參見注解

     @Column(name="SCORE_SUM")private String sumScore;
  9. MBG生成參見https://github.com/abel533/Mapper/wiki/4.1.mappergenerator,demo見 git@github.com:silloy/mybatis-generator.git

  10. 更多細節參見wiki

通用Mapper極大的簡化了xml文件的編寫,但仍需要少許xml文件,有待進一步優化。同時因為這是一個個人項目,使用不太熟悉不建議使用。

本文由 歧途老農 創作,采用 CC BY 4.0 CN 協議 進行許可。 可自由轉載、引用,但需署名作者且注明文章出處。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/156615.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息