zoukankan      html  css  js  c++  java
  • springboot整合mybatis通用Mapper

    参考:

    https://blog.csdn.net/x18707731829/article/details/82814095

    https://www.jianshu.com/p/6d2103451dcb

    SpringBoot整合MyBatis Generator可以帮助我们快速生成实体类、接口、mapper.xml文件,可以提高开发的效率,但是每次新增表都要执行一次Generator生成相应的代码,这样重复的操作生成增删查改重复的的代码,有没有一种通用的接口,不用生成mapper.xml文件,就可以调用通用接口的方法,实现单表的增删改查操作呢,这就是tk.mybatis.mapper 支持单表操作,不支持通用的多表联合查询。

    通用mapper的作用:调用通用接口的方法,实现单表的增删改查操作,不需要写大量的sql语句在xml文件中

    开发人员不需要编写sql语句,不需要在dao中增加方法,只要写好实体类,就能支持相应的增删改查方法

    通用mapper详解

    使用通用mapper,默认继承了如下方法

    Select
    方法:List<T> select(T record);
    说明:根据实体中的属性值进行查询,查询条件使用等号

    方法:T selectByPrimaryKey(Object key);
    说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号

    方法:List<T> selectAll();
    说明:查询全部结果,select(null)方法能达到同样的效果

    方法:T selectOne(T record);
    说明:根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号

    方法:int selectCount(T record);
    说明:根据实体中的属性查询总数,查询条件使用等号

    Insert
    方法:int insert(T record);
    说明:保存一个实体,null的属性也会保存,不会使用数据库默认值

    方法:int insertSelective(T record);
    说明:保存一个实体,null的属性不会保存,会使用数据库默认值

    Update
    方法:int updateByPrimaryKey(T record);
    说明:根据主键更新实体全部字段,null值会被更新

    方法:int updateByPrimaryKeySelective(T record);
    说明:根据主键更新属性不为null的值

    Delete
    方法:int delete(T record);
    说明:根据实体属性作为条件进行删除,查询条件使用等号

    方法:int deleteByPrimaryKey(Object key);
    说明:根据主键字段进行删除,方法参数必须包含完整的主键属性

    Example方法
    方法:List<T> selectByExample(Object example);
    说明:根据Example条件进行查询
    重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列

    方法:int selectCountByExample(Object example);
    说明:根据Example条件进行查询总数

    方法:int updateByExample(@Param("record") T record, @Param("example") Object example);
    说明:根据Example条件更新实体record包含的全部属性,null值会被更新

    方法:int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
    说明:根据Example条件更新实体record包含的不是null的属性值

    方法:int deleteByExample(Object example);
    说明:根据Example条件删除数据

    注解:

    转载:cnblogs.com/yirgaMonkey/p/9392412.html

    1.1@Table 注解 注解
    作用:建立实体类和数据库表之间的对应关系。
    默认规则:实体类类名首字母小写作为表名。Employee 类→employee 表。

    用法:在@Table 注解的 name 属性中指定目标数据库表的表名


    1.2@Column 注解 注解
    作用:建立实体类字段和数据库表字段之间的对应关系。
    默认规则:
    实体类字段:驼峰式命名
    数据库表字段:使用“_”区分各个单词

    用法:在@Column 注解的 name 属性中指定目标字段的字段名  用来解决和数据库字段不对应的情况    @Column  (" 数据库实际字段名 ")


    1.3@Id 注解 注解
    通用 Mapper 在执行 xxxByPrimaryKey(key)方法时,有两种情况。
    情况 1:没有使用@Id 注解明确指定主键字段
    SELECT emp_id,emp_name,emp_salary_apple,emp_age FROM tabple_emp WHERE emp_id = ?
    AND emp_name = ? AND emp_salary_apple = ? AND emp_age = ?
    之所以会生成上面这样的 WHERE 子句是因为通用 Mapper 将实体类中的所有
    字段都拿来放在一起作为联合主键。

    情况 2:使用@Id 主键明确标记和数据库表中主键字段对应的实体类字段


    1.4@GeneratedValue 注解 注解
    作用:让通用 Mapper 在执行 insert 操作之后将数据库自动生成的主键值回写到实
    体类对象中。
    自增主键用法:
    序列主键用法:
    应用场景:购物车结账
     增加商品销量...
     减少商品库存...
     生成订单数据→封装到 Order 对象中→保存 Order 对象→数据库自动生成主键
    值→回写到实体类对象 Order 中
     生成一系列订单详情数据→List<OrderItem>→在每一个 OrderItem 中设置

    Order 对象的主键值作为外键→批量保存 List<OrderItem>

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    • 根据底层数据库自动选择方式,需要底层数据库的设置
    • 如MySQL,会使用自增字段,需要将主键设置成auto_increment。

    1.5@Transient 主键 主键
    用于标记不与数据库表字段对应的实体类字段。
    @Transient

    private String otherThings; //非数据库表中字段

  • 相关阅读:
    linux常用命令整理
    总结五大常用算法!
    python数组(列表、元组及字典)
    网络编程---笔记1
    python3与python2的区别 记录一波
    Python学习week3-python数据结构介绍与列表
    Python学习week2-python介绍与pyenv安装
    Python学习week1-linux文件系统与IO重定向
    Python学习week1-计算机基础
    css3文本多行省略
  • 原文地址:https://www.cnblogs.com/flypig666/p/11729506.html
Copyright © 2011-2022 走看看