一.使用Mybatis进行一些基本的数据库操作

首先要创建一个使用了Mybatis框架的Java项目,在我的上篇博客中有详细的讲解Mybatis-01-简介及入门
另外我将这个示例程序传到了Github上Mybatis入门

1.模糊查询

1.1 mapper.xml配置文件中配置查询语句

  //mapper.xml文件中定义的SQL,使用模糊查询的关键字LIKE<select id="query1" parameterType="String"resultType="com.sandking.mybatis.pojo.BbsEmployee">SELECT * FROM `bbs_employee` WHERE username LIKE #{username}</select>
  • mapper.xml文件中一个SQL对应一个MappedStatement对象,SQL的id即是Mappedstatement对象的id
  • parameterType属性用来声明输入参数的类型
  • resultTypey属性用来声明输出结果的类型,如果是持久化类,则填写其全路径
  • # { }是输入参数的占位符,相当于JDBC中的PreparedStatement类编程中的 ? 占位符

1.2 测试程序通过SQL的id调用查询语句

    @Testpublic void query1(){SqlSession sqlSession = sqlSessionFactory.openSession();//在测试程序中传入参数  ----->  %参数%//使用sqlSessoin的selectOne()方法,只能用来查询一条数据,如果查出多条数据则报错,查询多条数据使用selectList()方法BbsEmployee bbsEmployee = sqlSession.selectOne("query1","%ad%");System.out.println(bbsEmployee.getUsername());sqlSession.close();}

Mybatis查询总结:

1.根据结果集的数量使用查询方法,selectList()方法可以用来执行查询有多个结果的查询,而selectOne()方法不能,否则会报错

2.mapper.xml文件中的SQL必须定义参数类型(parameterType)和结果类型(resultType)

parameterType:指定输入参数类型,mybatis通过ognl从输入对象中获取参数值拼接在sql中
resultType:指定输出结果类型,mybatis将SQL查询结果的一行记录数据映射为resultType指定类型的对象。如果有多条数据,则分别进行映射,并把对象存放到List容器中

3.mapper映射文件中将参数拼接进SQL语句的方式“ #{ } ”和 ” ${ } ”

#{ }表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换。#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

上面示例程序使用 #{ } 拼接SQL语句,下面再举例使用 ${ } 拼接SQL语句

//这里SQL语句中的 LIKE '%${value}%' 部分变量名value是固定的,指程序中传来的值
<select id="query2" parameterType="String"resultType="com.sandking.mybatis.pojo.BbsEmployee">SELECT * FROM `bbs_employee` WHERE username LIKE '%${value}%'</select>
    @Testpublic void query2(){SqlSession sqlSession = sqlSessionFactory.openSession();//查询方法的第二个参数,即输入参数不用再加修饰符BbsEmployee bbsEmployee = sqlSession.selectOne("query2","ad");System.out.println(bbsEmployee.getUsername());sqlSession.close();}

${ }表示拼接sql串,通过${ }可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换,${ }可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${ }括号中只能是value。

实际应用中 #{ } 和 ${ }经常搭配混合使用

2.插入数据

2.1 mapper.xml映射文件中定义SQL语句

  //insert语句只用定义输入参数类型,这里是一个持久化类<insert id="insert" parameterType="com.sandking.mybatis.pojo.BbsEmployee">INSERT INTO `bbs_employee`(username,password) VALUES(#{username},#{password})</insert>

2.2 编写测试程序

    @Testpublic void insert(){SqlSession sqlSession = sqlSessionFactory.openSession();//创建一个持久化类的对象作为插入操作的参数BbsEmployee bbsEmployee = new BbsEmployee();bbsEmployee.setUsername("sisisi");bbsEmployee.setPassword("123");sqlSession.insert("insert",bbsEmployee);System.out.println(bbsEmployee);sqlSession.commit();}

2.3 运行结果:

id为自增主键,执行插入操作后打印bbsEmployee对象,发现id值为0
打开Navicat却看见插入的这条数据的id值为6,说明插入语句不会自动返回自增主键的值

如果想得到插入数据后自增主键的值,需要通过在映射文件中添加配置,返回插入数据后自动生成的自增主键
Mybatis不仅可以返回自增主键的值,也可以返回uuid主键的值

<1>返回自增主键

  <insert id="insert" parameterType="com.sandking.mybatis.pojo.BbsEmployee"><!-- selectKey:主键返回 --><!-- keyColumn:主键对应的表中的字段 --><!-- keyProperty:主键对应的持久化类中的属性 --><!-- order:设置执行查询操作的时机(在instert执行之前或执行之后) --><!-- resultType:设置返回的id的类型 --><selectKey keyColumn="id" keyProperty="id" order="AFTER"resultType="int">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO `bbs_employee`(username,password) VALUES(#{username},#{password})</insert>

再次执行插入操作后,控制台打印的结果

发现打印id值不再为0,打开Navicat发现第二次插入数据的id值为7,与控制台打印的id相同,说明程序正确返回了自增主键的值

<2>返回uuid主键

  <insert id="insert" parameterType="com.sandking.mybatis.pojo.BbsEmployee">//在执行insert操作前执行查询<selectKey keyColumn="id" keyProperty="id" order="BEFORE"resultType="String">SELECT LAST_INSERT_ID()</selectKey>INSERT INTO `bbs_user`(username,password) VALUES(#{username},#{password})</insert>

3.更新数据

  //根据id值确定更改哪条数据<insert id="update" parameterType="com.sandking.mybatis.pojo.BbsEmployee">UPDATE `bbs_employee` SETpassword = #{password} WHERE id = #{id}</insert>
    @Testpublic void update(){SqlSession sqlSession = sqlSessionFactory.openSession();BbsEmployee bbsEmployee = new BbsEmployee();bbsEmployee.setId(5);bbsEmployee.setPassword("3425");sqlSession.update("update",bbsEmployee);sqlSession.commit();sqlSession.close();}

4.删除数据

<delete id="delete" parameterType="int">DELETE FROM `bbs_employee` WHERE id = #{id}</delete>
@Testpublic void delete(){SqlSession sqlSession = sqlSessionFactory.openSession();sqlSession.delete("delete",6);sqlSession.commit();sqlSession.close();}

Mybatis-02-对数据库的基本操作相关推荐

  1. 第六天 02.mysql数据库的基本操作和密码爆破

    mysql数据库的基本操作 简介: ​ 数据库是什么 ​ 存储数据的仓库,数据是有组织的进行存储. mysql是一种关系数据库管理系统 使用工具:phpstudy mysql 默认端口 3306 一. ...

  2. Mybatis 02 基础应用

    Mybatis 02 基础应用 一.代码开发demo 1.基于mapper代码开发 1.1.开发方式 ​ 只需要开发Mapper接口和对应的Mapper映射文件,接口定义声明,文件定义sql. 1.2 ...

  3. JDBC编程:2(数据库的基本操作)

    数据库的基本操作 查询数据 在开始前先简单地介绍一下什么是静态SQL和动态SQL: 静态SQL,在编译阶段就可以确定数据库要做什么事情.在某种高级语言中,如果嵌入了SQL语句,而这个SQL语句的主体结 ...

  4. docx文件上传java_java上传文件通过mybatis存储到数据库的blob格式中.docx

    java上传文件通过mybatis存储到数据库的blob格式中.docx 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 上传文件通过 myb ...

  5. 通过sql语句对MySql数据库的基本操作

    一.数据库的基本操作 1 CREATE DATABASE mybookstore; 2 DROP DATABASE mybookstore; 二.表的基本操作 1.创建表 insert into 表名 ...

  6. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel

    springboot+mybatis+sqlserver导出数据库数据并实现下载到excel 1.准备工作 1.1 下载一个springboot框架demo 1.2 配置maven 1.3 引入需要的 ...

  7. Mybatis插入MySQL数据库中文乱码

    Mybatis插入MySQL数据库中文乱码 在dataSource.properties配置文件中设置useUnicode=true&characterEncoding=utf-8编码即可. ...

  8. 图解sqlserver 2000 还原数据库的基本操作

    图解sqlserver 2000 还原数据库的基本操作,是我在测试单位服务器上的数据库,恢复数据的完整性所进行的简单测试.由于时间紧张,我不直接在博文里写出来了,有好多图不大方便插入,所以有爱好这个知 ...

  9. 使用mybatis向oracle数据库插入数据异常

    遇到了使用mybatis向oracle数据库插入数据异常的问题, 具体的报错如下:org.springframework.jdbc.UncategorizedSQLException: ### Err ...

  10. 实现MySQL数据库的基本操作(增删改查)

    (注意:数据库操作所有命令都要在最后加分号,关键字不区分大小写) 一.数据库的基本操作 1.查看已有库: show databases; 2.创建库: create database 库名 [char ...

最新文章

  1. android:ellipsize实现跑马灯效果总结
  2. linux中终端字符界面打印QQ,教你如何在开发驱动时在图形界面下的终端打印字符!!...
  3. Docker运行操作系统环境(BusyBoxAlpineDebian/UbuntuCentOS/Fedora)
  4. python3简单代码_python3实现简单汉诺塔的代码教程
  5. 利用根轨迹法进行控制系统的分析和设计
  6. 计算机网络中的mac全称,计算机网络中MAC地址与IP地址
  7. C语言自学完备手册(02)——变量的声明与定义
  8. “段子手”黄允松的严肃一面:数字化转型是颠覆式创新
  9. VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt
  10. 国际版抖音tiktok,一个蓬勃发展阶段的社交娱乐跨境电商平台
  11. 《大数据时代》 概要
  12. php solr,PHP: Solr - Manual
  13. 不知道自己不知道 知道自己不知道 不知道自己知道 知道自己知道
  14. 分享一款在线仿站源码 简单好用的扒站平台
  15. 尚硅谷李立超JavaScript笔记
  16. 计算机应用外审到期未反应,计算机应用 审理中 超期
  17. 导航 headroom详细使用方法
  18. 基于遗传算法求解物流配送中心选址附Matlab代码
  19. 奥格斯堡大学计算机系,奥格斯堡大学排名
  20. GIT 技巧命令讲解笔记2020 (二)

热门文章

  1. java一元稀多项式_数据结构之线性表- 一元稀疏多项式计算器
  2. logback配置控制打印台异常信息_老板下了死命令,要把日志系统切换到Logback
  3. matlab中心化样本矩阵,第二讲实验.doc
  4. java数据流更新文件内容,数据流 · Java 文件操作 · 看云
  5. java关联查询实战_MyBatis初级实战之六:一对多关联查询
  6. 算法笔记_面试题_19.链表_模板及示例十几道
  7. 数据结构-图的应用-拓扑排序
  8. Cassandra安装和初次使用
  9. 第三方登录、支付接口本地代码调试方法
  10. java开发工具比较(16个工具修订版)