当前位置: 首页 > news >正文

MyBatis各种SQL操作及执行添加功能获取自增的主键

目录

一、查询一个实体类对象

二、查询一个List集合

三、查询单个数据

四、查询一条数据及多条数据到map集合

查询一条数据到map集合

查询多条数据到map集合

五、模糊查询

六、批量删除

七、动态设置表名

八、执行添加功能时获取自增的主键


一、查询一个实体类对象

映射方法:User getUserById(@Param("id") int id);

映射文件:

<select id="getUserById" resultType="User">
    select * from t_user where id = #{id}
</select>

二、查询一个List集合

映射方法:List<User> getAllUser();

映射文件

<select id="getAllUser" resultType="User">
    select * from t_user
</select>

注意:当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常
TooManyResultsException;但是若查询的数据只有一条,可以使用实体类或集合作为返回值

三、查询单个数据

映射方法:int getCount();

映射文件:

<select id="getCount" resultType="java.lang.Integer">
    select count(id) from t_user
</select>

四、查询一条数据及多条数据到map集合

查询一条数据到map集合

映射方法:Map<String,Object> getUserToMap(@Param("id") int id);

映射文件:

<select id="getUserToMap" resultType="java.util.Map">
    select * from t_user where id = #{id}
</select>

注意:将一条数据查询到map集合中时,map的键是表中的字段名,map的值是表中的数据

查询多条数据到map集合

方式一:

映射方法:List<Map<String,Object>> getAllUserToMap();

映射文件:

<select id="getAllUserToMap" resultType="java.util.Map">
    select * from t_user
</select>

方式二:

映射方法:

@MapKey("id")
Map<String,Object> getAllUserToMap();

映射文件:

<select id="getAllUserToMap" resultType="java.util.Map">
    select * from t_user
</select>

注意:

● 方式一中每条查出来的数据都对应一个Map集合,然后再利用List集合将这些Map集合
组织起来
● 方式二中每条查出来的数据都存放在一个Map集合中,但是这个Map集合的键由映射方
法上方的@MapKey注解指定,而Map集合的值又是另外一个Map集合,作为值的Map
集合中键对应表中字段名,值对应表中数据

五、模糊查询

映射方法:List<User> getUserByLike(@Param("mohu") String mohu);

映射文件:

<select id="getUserByLike" resultType="User">
    <!--方式1-->
    select * from t_user where username like '%${mohu}%'
    <!--方式2-->
    select * from t_user where username like concat("%",#{mohu},"%")
    <!--方式3-->
    select * from t_user where username like "%"#{mohu}"%"
</select>

注意:不能使用 like '%#{mohu}%' 的方式,因为#{}会被解析成?,这个问号会被当成字符串的一
部分造成参数获取失败

六、批量删除

映射方法:void deleteSomeUser(@Param("ids") String ids);

映射文件:

<delete id="deleteSomeUser">
    delete from t_user where id in(${ids})
</delete>

注意:这里获取参数的方式是${},因为#{}会自动添加引号,如果使用#{}的方式会造成SQL语句解
析成 delete from t_user where id in('ids') 从而报错

七、动态设置表名

映射方法:List<User> getUserList(@Param("table") String table);

映射文件:

<select id="getUserList" resultType="User">
    select * from ${table}
</select>

注意:这里使用${}是因为使用#{}时会自动添加引号,而表名不允许添加表名

八、执行添加功能时获取自增的主键

映射方法:void insertUser(User user);

映射文件:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into t_user values(null,#{username},#{password},#{age},#
{gender},#{email})
</insert>

测试方法:

@Test
public void testInsertUser(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
    User user = new User(null,"老六","1234567",36,"男","laoliu@qq.com");
    mapper.insertUser(user);
    System.out.println(user);//在这一步中打印出的User对象中可以看到自增的id,如果配置文件中不使    用useGeneratedKeys和keyProperty,则id仍然是null
    }

注意:这里的useGeneratedKeys设置使用自增主键为true,keyProperty是将获取的主键值赋给实体对象中的某个属性。这样,在添加这个实体对象后,自增的主键也能在实体对象中获得,而不需要进行查询

相关文章:

  • 【学习笔记】模拟赛题解
  • node.js 使用教程-3.gulp-file-include 详细教程
  • 【可视化大屏教程】用Python开发智慧城市数据分析大屏
  • 【云原生 | 从零开始学Kubernetes】二十三、Kubernetes控制器Statefulset
  • git三板斧--Linux
  • 内存分配.
  • 谷粒商城超详细笔记+踩坑(2)——分布式组件、前端基础(回顾知识点)
  • 为 TiDB 客户端服务端间通信开启加密传输
  • C语言函数解决问题:1.求二进制中不同位的个数;2.交换二进制的奇数位和偶数位;3.使用指针打印数组内容
  • PyQT5入门案例(一)工资统计系统
  • Life:歌曲学习之教一个不会唱歌的人学会唱出《情非得已》、《海阔天空》、《红日》、《老男孩》等歌曲
  • 24.STM32的IO口扩展PCF8574
  • 论文阅读_知识蒸馏_TinyBERT
  • 测试4年,4门语言在手,我拿到了年包50W+的offer
  • Xorm 使用手册,增删改查之查
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Angular2开发踩坑系列-生产环境编译
  • LeetCode29.两数相除 JavaScript
  • PermissionScope Swift4 兼容问题
  • Python - 闭包Closure
  • Python_网络编程
  • React-Native - 收藏集 - 掘金
  • Redis的resp协议
  • SpiderData 2019年2月16日 DApp数据排行榜
  • STAR法则
  • Terraform入门 - 3. 变更基础设施
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • VUE es6技巧写法(持续更新中~~~)
  • Vue学习第二天
  • yii2中session跨域名的问题
  • 工程优化暨babel升级小记
  • 官方解决所有 npm 全局安装权限问题
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 如何进阶一名有竞争力的程序员?
  • 深度学习入门:10门免费线上课程推荐
  • 白色的风信子
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​ubuntu下安装kvm虚拟机
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #pragma once
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (4) PIVOT 和 UPIVOT 的使用
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (9)目标检测_SSD的原理
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)WLAN定义和基本架构转
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。