上一篇文章:《Mybatis基本知识十六:查询缓存之第三方查询缓存》

若文中有纰漏,请多多指正!!!

1.前言

使用Mybatis进行开发,不仅可以使用mapper配置文件进行开发,也可以使用注解的方式。映射文件中无非就是存放着增、删、改、查的SQL映射标签,Mybatis注解式开发就是要替换映射文件中的SQL标签。

本章节主要讲解单表式注解开发,用于注解开发的入门案例讲解,后续将讲解动态SQL注解式开发以及关联关系型注解开发。

2.数据准备(MySql数据库)

  • 表结构
/**商品信息*/create table productinfo(       id int primary key auto_increment, --主键       proName varchar(50),--商品名称       proNo  varchar(50), --商品编号             proDescription  varchar(200)--商品描述);
  • 实体映射
public class ProductInfo {    private Integer id;//主键    private String proName;//商品名称    private String proNo;//商品编号          private String proDescription;//商品描述}

3.单表的增删改查注解配置

1)Mybatis进行注解开发大概有以下几点事项:

  • 只需配置主配置文件。
  • mapper配置文件不再需要配置。
  • 接口中进行注解配置。

2)关于插入数据自动获取主键的问题(示例中都有配置):

  • 可以通过配置insert标签的属性获取主键:

useGeneratedKeys: 配置此属性会告诉MyBatis利用JDBC 的 getGeneratedKeys 方法来取出由数据(比如:MySQL 和 SQL Server 这样的数据库中自动递增字段)内部生成的主键。默认:false。

keyProperty: 标记一个属性(一般为要映射实体的属性), MyBatis 会通过 getGeneratedKeys 或者通过 insert 语句的 selectKey 子元素设置它的值。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

keyColumn :通过生成的键值设置表中的列名。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。如果数据库支持自动生成主键的字段(比如 MySQL 和 SQL Server),那么你可以设置 useGeneratedKeys=”true”,然后再把 keyProperty 设置到目标属性上就OK。如果数据库还支持多行插入, 也可以传入一个数组或集合,并返回自动生成的主键。

  • 通过获取主键

对于不支持自动生成主键类型的数据库或可能不支持自动生成主键的JDBC 驱动来说,可以使用标签获取主键。

3)增删改查的简单配置如下:

  • 注解配置
/**Dao层接口*/public interface ProductInfoDao {    /**保存信息,并返回主键**/    @Insert("insert into ProductInfo(proName,proNo,proDescription) values(#{proName},#{proNo},#{proDescription})")    @Options(useGeneratedKeys = true,keyProperty="id",keyColumn="id")     //@SelectKey(statement="select @@identity",keyColumn="id",keyProperty="id",before=false,resultType = int.class)    void saveProducrInfoCatchID(ProductInfo proInfo);    /**获取所有返回LIST*/    @Select("select * from ProductInfo")    @Results({        @Result(id=true,property="id",column="id"),        @Result(property="proName",column="proName"),        @Result(property="proNo",column="proNo"),        @Result(property="proDescription",column="proDescription")    })    List findAllListInfo();    /**根据主键查询*/    @Select("select * from ProductInfo where id = #{id}")    ProductInfo findById(int id);    /**根据商品编号模糊查询*/    @Select("select * from ProductInfo where proNo like concat('%',#{proNo},'%')")    List findProInfoByProNo(String proNo);    //删除    @Delete("delete from productInfo where id = #{id}")    void deleteByID(int id);    //修改    @Update("update productInfo set proName = #{proName},proNo=#{proNo},proDescription=#{proDescription}    where id = #{id}")    void updateProduct(ProductInfo info);}
  • 测试方法
public class TestDemo {    private ProductInfoDao dao;    SqlSession sqlSession = null;    @Before    public void setUp() throws Exception{        sqlSession = MyBatisUtil.getSqlSession();        dao = sqlSession.getMapper(ProductInfoDao.class);    }    /**保存信息,并返回主键**/    @Test    public void saveProducrInfoCatchID(){        ProductInfo proInfo = new ProductInfo("电冰箱","002","最新款电冰箱");        System.out.println("执行前:"+proInfo);        dao.saveProducrInfoCatchID(proInfo);        System.out.println("执行后:"+proInfo);        sqlSession.commit();//提交    }    //查询所有    @Test    public void  findAllListInfo(){        List list = dao.findAllListInfo();        if(list != null){            for (ProductInfo productInfo : list) {                System.out.println(productInfo);            }        }    }    /**根据主键查询*/    @Test    public void  findById(){        ProductInfo pro = dao.findById(4);        System.out.println(pro);    }    /**根据商品编号模糊查询*/    @Test    public void findProInfoByProNo(){        List list = dao.findProInfoByProNo("001");        if(list != null){            for (ProductInfo productInfo : list) {                System.out.println(productInfo);            }        }    }    /**简单删除*/    @Test    public void deleteByID(){        dao.deleteByID(7);    }    /**简单修改*/    @Test    public void updateProductById(){        //1.查询修改对象        ProductInfo beforeInfo = dao.findById(6);        System.out.println("执行前beforeInfo:"+beforeInfo);        //2.修改值        beforeInfo.setProDescription("修改了电视");        //3.执行更新操作        dao.updateProduct(beforeInfo);        //4.再查询        ProductInfo afterInfo = dao.findById(6);        System.out.println("执行后afterInfo:"+afterInfo);    }    @After    public void setDown(){        if(sqlSession != null)            sqlSession.close();    }}

进行完DAO接口的注解配置,一个简单的单表的增删改查也就完成了。有兴趣的learner可以亲自动手试一下。

4.基本注解

  • 增删改查相关注解

增删改查相关注解

结果集映射相关注解

结果集映射相关注解

5.下载练习

链接:https://pan.baidu.com/s/1wxDPaght70sIPEV-DEeT_w 提取码:4im4

@select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发相关推荐

  1. Mybatis(1)---入门篇单表查询

    1.Mybatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

  2. springboot整合mybatis实现简单的单表增删改查(完整代码可下载)

    搭建项目 项目简单效果,前端效果丑的一批,主要是后端功能实现: springboot增删改查 csdn完整代码下载链接: springboot+mybatis Gitee下载地址: Gitee下载地址 ...

  3. Mybatis Plus配置以及单表操作

    MyBatis-Plus ,是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生.他的官方网站为:(https://mp.baomidou.com/ ...

  4. 基于 MyBatis 手撸一个分表插件

    背景 事情是酱紫的,上级leader负责记录信息的业务,每日预估数据量是15万左右,所以引入sharding-jdbc做分表. 上级leader完成业务的开发后,走了一波自测,git push后,就忙 ...

  5. @select注解_mybatis开发,你用 xml 还是注解?我 pick xml

    最近在看公司项目时发现有的项目mybatis是基于注解开发的,而我个人的习惯是基于xml文件开发. 对于mybatis注解开发的原理理解不够,于是翻阅了部分源码,写下此文.主要介绍了mybatis开发 ...

  6. Mybatis多条件直接查询Param注解版

    1.UserMapper接口 package com.william.dao;import com.william.domain.QueryValueObject; import com.willia ...

  7. mybatis笔记之使用Mapper接口注解

    1. mybatis支持的映射方式 mybatis支持的映射方式有基于xml的mapper.xml文件.基于java的使用Mapper接口class,简单学习一下mybatis使用接口来配置映射的方法 ...

  8. springmvc+mybatis多数据源配置,AOP注解动态切换数据源

    springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...

  9. ❤️Mybatis编程界的能手—使用注解开发(建议收藏)

    ❤️Mybatis编程界的能手-使用注解开发(建议收藏) ❤️1.面向对象编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因:解耦,可拓展, 提 ...

最新文章

  1. 在html表单中设置数组的方法是什么,js如何处理表单中的数组方式?
  2. wince支持多线程编程吗_以前面试只问多线程,现在都开始问响应式编程了!我懵了...
  3. 《VMware Virtual SAN权威指南》一2.2.4 容量层设备
  4. 【linux】查看内存使用情况
  5. php重载,PHP重载基础知识回顾
  6. 设置Eclipse中的字符集为UTF-8
  7. mysql 5.1 for linux_linux下安装mysql5.1.68
  8. Apple Watch要用上microLED显示屏了 最早明年...
  9. 在线播放器 在网页中插入MediaPlayer 兼容IE和FF的代码调试
  10. ansible常用ad hoc操作
  11. CF1096F Inversion Expectation
  12. java query dsl_java – QueryDsl – 具有字符串值的case表达式
  13. 大型网站的 HTTPS 实践(三):基于协议和配置的优化
  14. mysql infobright 缺点_Infobright存储引擎的特点
  15. whistle抓包工具学习
  16. cad完全卸载教程_卸载后 如何彻底删除CAD2010?
  17. 30个世界顶级思维,看完豁然开朗
  18. 怎么解决电脑系统故障?
  19. JAVA8 日期和时间(LocalDate、LocalDateTime、ZoneId、Duration、Period、Instant)API 用法详解
  20. 为什么navicat总是闪退问题解决

热门文章

  1. java安全级别过高_Java应该是更高级别还是更低级别?
  2. Spring Boot Web Slice测试–示例
  3. jndi ldap_什么是JNDI,SPI,CCI,LDAP和JCA?
  4. jaxb 处理_休息使用Jersey –包含JAXB,异常处理和客户端程序的完整教程
  5. ant 构建_有用的Ant构建标签
  6. apache camel_什么时候使用Apache Camel?
  7. JPA实体锁定模式的差异
  8. 设计模式的Java 8 Lambda表达式–命令设计模式
  9. 协同遗漏的效果–使用简单的NIO客户端/服务器测量回送延迟
  10. apache lucene_Apache Lucene拼写检查器的“您是不是要”功能