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

上一篇文章:《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.基本注解

  • 增删改查相关注解
02ba93a27c76499cb4a5d5bd931bd51d

增删改查相关注解

结果集映射相关注解
ae52a89a141549d9bc50679bddc151d6

结果集映射相关注解

5.下载练习

链接:https://pan.baidu.com/s/1wxDPaght70sIPEV-DEeT_w 提取码:4im4
7be508d5-dd7c-497b-a0b2-ce910bd99d0e

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql主从切换机制torch_MySQL Replication设置(Master/Slave)实现主从复制

一、Master配置1、my.cnf配置# vim /etc/mysql/mariadb.conf.d/50-server.cnf[mysqld]log-binmysql-bin //[必须]启用二进制日志server-id140 //[必须]服务器唯一ID,默认是1,一般取IP最后一段2、重启mysqlsudo service mysql restart3、在主服务器上建立…

junit测试线程_一个在自己的线程中运行测试的JUnit规则

junit测试线程有时,能够在单独的线程中运行JUnit测试会很有帮助。 特别是在编写与封装的ThreadLocal或类似对象进行交互的集成测试时,这可能会派上用场。 单独的线程将隐式确保每次测试运行都未初始化threadlocal的与线程相关的引用。 这篇文章介绍了提供…

maven servlet配置_第一个Servlet配置

使用IntelliJ IDEA创建一个Simple Maven项目2. Add Framework Support3. 配置Tomcat打开菜单Run -> 选择Edit Configuration 如果侧边栏没有Tomcat,点击“”号 -> 选择“Tomcat Server” -> 选择“Local”,到此画面 ,Apply -> OK4. 在Tomcat…

如何将四元数方向转化为旋转举证_是否有将四元数旋转转换为欧拉角旋转的算法?...

frodo2975..7我一直在寻找类似解决方案的几天,我终于遇到了这个网站,它有一个将四元数转换为任意Euler和Tait-Bryan旋转的算法!这是代码:///// Quaternion to Euler///enum RotSeq{zyx, zyz, zxy, zxz, yxz, yxy, yzx, yzy, xyz, xyx, xzy,xzx};void twoaxisrot(double r11, do…

使用Spring Boot和DJL进行深度学习

总览 这是Spring Boot上的另一篇文章 ,该文章将展示如何使用Deep Java Library (DJL)构建示例Web应用程序, Deep Java Library (DJL)是Java的开源深度学习库,用于诊断X射线图像上的COVID-19。 …

ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

每一位办公族,可能都遇到过这样的问题:1、随着信息化高速发展和企业“互联网”的深入,越来越多的办公平台和软件被开发出来,正如移动互联网端APP应用层出不穷一样,给人们带来了极大地便利性。2、凡事有利有弊&#xff…

r java_如何在R中使用JAVA写的程序包?

不过我对 Java 真的不太熟悉,按照教程调用这个 LLDA 包之后只会使用 inferencer。如果你不嫌麻烦可以考虑先用 Java 计算出结果,然后在 R 中载入这些结果.具体步骤如下:0 - 文件夹 JGibbLDA-v.1.0 放在 R 的工作目录下。1 - 用 JDK 和他提供的…

c语言c99标准_C语言的灵魂指针,配合这个新增的关键字,能够生成更高效的程序...

正如我前面的文章提到的,C语言虽然已经比较成熟,但是近些年来也是有所发展的——比如增加了许多新特性。遗憾的是,可能因为C语言程序员的工资比不过互联网程序员,国内很多教材比较老旧,几乎不涉及近些年来C语言新增的新…

java ee的小程序_Java EE 8 –为更多设备提供更多应用程序

java ee的小程序如果我不喜欢夏天的一件事,那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于今年的这个无聊的时间里,做得很好,并给了我一个写关于新的和即将到来的Java EE 8规范的博客帖子的机会,其中丰富了…

java随机姓名_Java生成随机姓名、性别和年龄的实现示例

一、定义实体类Person,封装生成的数据package net.dc.test;public class Person {private String name;private String sex;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {r…

matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21

数字图像处理期末复习2018-12-21愉快先生0.204字数 5547 阅读 18342018-12-22 19:35(数字图像冈萨雷斯第二版教材)一、基本原理图像的读取、存储操作:i imread(filename) ; imwrite(i,’image.jpg’); 图像显示的⽅法及区别:imshow(i); imshow(i,[]);%0…

带有HttpClient的自定义HTTP标头

在Apache HTTPClient请求中设置自定义HTTP标头的快速指南。 在HttpRequest上,调用setHeader()方法以将HttpHeaders内容类型设置为JSON。 适用于各种版本的HttpClient(4.3之前和之后)。 1.简介 在本教程中,…

java 递归深度优先遍历_Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)

package com.yc.test;import java.util.ArrayList;import java.util.List;import com.yc.tree.ThreeLinkBinTree;import com.yc.tree.ThreeLinkBinTree.Node;/**** author wb**遍历二叉树指的是按某种规律依次访问二叉树的每个节点,对二叉树的遍历过程就是将非线性结…

大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构

Oracle RAC结构Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后,才正在推出了属于自己的RAC集群解决方案。RAC​和集群分类章节提到的集群系统有很多相似之处,从下图我们大概了解一下RAC集群的层次结构和所需的软硬件环境。Oracle Rac…

java obix_obix协议在java中的配置和使用详解

前言本文主要给大家介绍的是关于obix协议在java中的配置和使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。什么是 oBIX?简单来讲,obix是一种 XML 通讯协议,使用Http Request/Post方式进行数据通…

java7和java8切换_仍不切换到Java 8的6个理由

java7和java8切换Java 8很棒。 期。 但是……在我们有机会玩耍并玩弄它之后,就该退出了,避免吃盐。 所有的好东西都是有代价的,在这篇文章中,我将分享Java 8的主要痛点。请确保在升级和释放7之前您已经意识到了这些痛点。 1.并行…

python求阶乘之和_python计算阶乘前n项和

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 知道公式后就很简单了,利用for循环,第几行i1就等于几,当然python中是没有…

您需要了解的有关UI测试的所有信息

让我们从一个问题开始。 用户在网站上进行互动的第一件事是什么? 接口,当然。 网站的外观是在用户身上产生“第一印象”的第一件事。 交互式Web应用程序可以为用户带来成败,这就是为什么越来越多的人选择对其Web应用程序进行UI测试的原因。 …

python docx库使用样例_Python docx库用法示例分析

本文实例分析了Python docx库用法。分享给大家供大家参考,具体如下: 打开及保存文件: from docx import Document document Document(test.docx) document.save(test.docx) 添加文本: document.add_paragraph(test text) 调整文本…

使用java理解程序逻辑试卷_《使用Java理解程序逻辑》试题分析

1、在Java中,一下方法属于String类的有()A:insert(int offset,char [] c);B:replace(int start,int end String str);C:split(String regex);D:endsWith(String suffix);正确答案:C、D解析:A&am…