前言

  相信大家在使用mybatis写mapper接口的时候,最常用且简单的方法就是增删改查了。我也是刚开始做项目,在本篇文章中,我将根据自己在vhr微人力项目中的mapper接口方法为实例,记录一下接口中常用的增删改查方法

1.insert

  1.1 insert的使用

    1.1.1 接口方法

    int insert(Nation record);

    1.1.2 SQL实现

  <insert id="insert" parameterType="com.ku.vhr.model.Nation">
insert into vhr_project.nation
(id, name) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR})
</insert>
  1. SQL语句中的插入操作,我们使用<insert></insert>,id的名称必须于mapper中的插入方法名保持一致,不然会报错;
  2. parameterType是指你传入的参数的参数类型,在mapper接口中的insert方法中我传入的是Nation实体类对象,因此我的插入参数类型为我定义的Nation类
  3. 在数据库中插入数据语句格式:insert into `数据库名.表名` (`字段名1`, `字段名2`, ...) values (#{属性名1,jdbcType="", #{属性名2,jdbcType=""}, ...})
  4. 其中jdbcType的作用是防止在插入过程中因属性名为空而报错,在编写SQL语句的时候最好加上
  5. jdbcType的常用类型

JDBC Type            Java Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean
BOOLEAN boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CLOB Clob
BLOB Blob
ARRAY Array
DISTINCT mapping of underlying type
STRUCT Struct
REF Ref
DATALINK java.net.URL[color=red][/color]

jdbcType常用类型

  1.2 insert测试

    1.2.1 测试代码

 @Test
public void insert(){
// System.out.println(nationMapper);
Nation nation = new Nation();
nation.setId(55);
nation.setName("珞巴族");
int rows = nationMapper.insert(nation);
System.out.println(rows);
}

insertTest

    1.2.2 测试结果

2.insertSelective

  2.1 insertSelective的使用

    2.1.1 接口方法

int insertSelective(Nation record);

    2.1.2 SQL实现

<insert id="insertSelective" parameterType="com.ku.vhr.model.Nation">
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="name != null">
name
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="name != null">
#{name,jdbcType=VARCHAR}
</if>
</trim>
</insert>

insertSelective

  1. 在insertSelective方法中,是允许选择性插入的,这是insertSelective方法与insert方法的本质区别,且一般执行default,insert不执行default
  2. 在insertSelective方法中,标签<trim></trim>可以用于增删改以及条件判断,在该方法中的作用就是判断数据库字段以及属性是否为空,如果为空,插入报错
  3. prefix 是指在字段前面添加什么,suffix是指在字段插入之后加上什么,suffixOverrides是指最后去掉什么
  4. SQL插入语句格式为insert into `数据库名.表名` (`字段名1`, `字段名2`, ...) values (#{属性名1,jdbcType="", #{属性名2,jdbcType=""}, ...}),
  5. 从into开始就是用<trim></trim>标签来执行,所以第一个<trim></trim>标签prefix指"(",suffix指最后一个字段之后的")",suffixOverrides指去掉最后的","
  6. 第二个<trim></trim>标签prefix指"values (",suffix指最后一个字段之后的")",suffixOverrides指去掉最后的","
  7. <if test= "t条件判断"></if>标签,主要是用于条件判断;主要注意的是,条件中的变量必须是实体类的属性

  2.2 insertSelective测试

    2.2.1 测试代码

    @Test
public void insertSelective(){
Nation nation = new Nation();
nation.setId(56);
nation.setName("基诺族");
int rows = nationMapper.insertSelective(nation);
System.out.println(rows);
}

insertSelectiveTest

    2.2.2 测试结果

3.deleteById

  3.1 deleteById的使用

    3.1.1 接口方法

int deleteById(Integer id);

    3.1.2 SQL实现

<delete id="deleteById" paramentType="java.lang.Integer">
delete from vhr_project.nation
where id = #{id,jdbcType=Integer}
</delete>
  1. 根据id删除的SQL语句格式为:delete from `数据名.表名` where id = #{id,jdbcType=Integer}

  3.2 deleteById测试

    3.2.1 测试方法

@Test
public void deleteById(){
int rows = nationMapper.deleteById(57);
System.out.println(rows);
}

deleteByIdTest

4.updateById

  4.1 updateById的使用

    4.1.1 接口方法

int updateById(Nation record);

    4.1.2 SQL实现

<update id="updateById" parameterType="com.ku.vhr.model.Nation">
update vhr_project.nation
set name = #{name,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
</update>

updateById

  1. 修改的SQL语句格式:update `数据库名.表名` set `字段1` = #{属性1,jdbcType=""}, `字段2` = #{属性2,jdbcType=""},...
  2. 在updateById方法中,如果修改字段为空,那么数据库中会更新为null

  4.2 updateById测试

    4.2.1 测试方法

@Test
public void updateById(){
Nation nation = new Nation();
nation.setId(55);
nation.setName("什么族");
int rows = nationMapper.updateById(nation);
System.out.println(rows);
}

updateByIdTest

    4.2.2 测试结果

5.updateByIdSelective

  5.1 updateByIdSelective的使用

    5.1.1 接口方法

int updateByIdSelective(Nation record);

    5.1.2 SQL实现

    <update id="updateByIdSelective" parameterType="com.ku.vhr.model.Nation">
update vhr_project.nation
<set>
<if test="name != null">
name = #{name,jdbcType=VARCHAR}
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>

updateByIdSelective

  1. 在updateByIdSelective的SQL中使用<set></set>类似于<trim></trim>用于写条件判断,但是<set></set>只能用于修改SQL
  2. 在updateByIdSelective方法中,我们可以选择性地对字段进行修改,如果为空就忽略更新

5.2 updateByIdSelective测试

    5.2.1 测试方法

    @Test
public void updateByIdSelective(){
Nation nation = new Nation();
nation.setId(55);
nation.setName("珞巴族");
int rows = nationMapper.updateById(nation);
System.out.println(rows);
}

updateByIdSelectiveTest

    5.2.2 测试结果

6.selectById

  6.1 selectById的使用

    6.1.1 接口方法

Nation selectById();

    6.1.2 SQL实现

<select>
select <include ref = "Base_Column_List"/>
from `vhr_project.nation`
where id = #{id,jdbcType=INTEGER}
</select>

selectById

  1. 根据id查询数据的SQL语句格式:select * from `数据库名.表名` where `字段主键` = #{属性id,jdbcType=INTEGER}
  2. <include=ref="别名"/>是与<sql id = "别名">字段1, 字段2, 字段3, 字段4, 字段5</sql>一起联用的,
  3. <sql></sql>是用来提取重用的SQL片段,以此定义,多次使用,非常方便
  4. sql id = "别名"></sql>中的id是<include ref=""/>中的ref的值

  6.2 selectById测试

    6.2.1 测试方法

@Test
public void selectById(){
Nation nation = nationMapper.selectById(2);
System.out.println(nation);
}

selectByIdTest

    6.2.2 测试结果

7.getAll

  7.1 getAll的使用

    7.1.1 接口方法

List<Nation> getAllNations();

    7.1.2 SQL实现

<select id="getAllNations" resultMap="BaseResultMap">
select * from vhr_project.nation
</select>

getAll

  1. 获取各类的全部信息SQL格式:select * from `数据库名.表名`

  7.2 getAll测试

    7.2.1 测试方法

@Test
public void getAllNations(){
List<Nation> allNations = nationMapper.getAllNations();
for (Nation nation : allNations) {
System.out.println(nation);
}
}

getAllTest

    7.2.2 测试结果

8.参考链接

https://blog.csdn.net/jiankunking/article/details/52403300?ops_request_misc=&request_id=&biz_id=102&utm_term=SQL%E6%A0%87%E7%AD%BE%E6%98%AF%E7%94%A8%E6%9D%A5%E6%8A%BD%E5%8F%96%E5%8F%AF%E9%87%8D%E7%94%A8%E7%9A%84SQL%E7%89%87%E6%AE%B5%EF%BC%8C%E5%8D%95%E7%8B%AC%E5%AE%9A%E4%B9%89%EF%BC%8C%E6%96%B9%E4%BE%BF%E5%A4%9A%E6%AC%A1%E5%BA%94&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-52403300.142^v67^js_top,201^v4^add_ask,213^v2^t3_esquery_v2&spm=1018.2226.3001.4187

https://blog.csdn.net/good_good_xiu/article/details/122690774?ops_request_misc=&request_id=&biz_id=102&utm_term=prefix%EF%BC%9A%E6%8B%BC%E6%8E%A5%E5%90%8E%E7%BB%ADsql%E6%97%B6%E9%9C%80%E8%A6%81%E5%8A%A0%E4%B8%8A%E7%9A%84%E5%89%8D%E7%BC%80%20suffix%EF%BC%9A&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-122690774.142^v67^js_top,201^v4^add_ask,213^v2^t3_esquery_v2&spm=1018.2226.3001.4187

9.如果我写的有什么问题,请大家帮我指正!我会持续修改的

mapper接口中常见的增删改查的更多相关文章

  1. 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器

    一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...

  2. Mybatis学习总结(二)—使用接口实现数据的增删改查

    在这一篇中,让我们使用接口来实现一个用户数据的增删改查. 完成后的项目结构如下图所示: 在这里,person代表了一个用户的实体类.在该类中,描述了相关的信息,包括id.name.age.id_num ...

  3. MVC模式:实现数据库中数据的增删改查功能

    *.数据库连接池c3p0,连接mysql数据库: *.Jquery使用,删除时跳出框,确定是否要删除: *.使用EL和JSTL,简化在jsp页面中插入的java语言 1.连接数据库 (1)导入连接数据 ...

  4. MVC设计模式((javaWEB)在数据库连接池下,实现对数据库中的数据增删改查操作)

    设计功能的实现: ----没有业务层,直接由Servlet调用DAO,所以也没有事务操作,所以从DAO中直接获取connection对象 ----采用MVC设计模式 ----采用到的技术 .MVC设计 ...

  5. python 调用zabbix api接口实现主机的增删改查

    python程序调用zabbix系统的api接口实现对zabbix_server端主机的增删改查,使用相关功能时候,需要打开脚本中的相关函数. 函数说明: zabbixtools()  调用zabbi ...

  6. 数据库中简单的增删改查(CRUD)

    一切都是基于数据,而对数据的管理都离不开数据库.最近学到数据库的简单操作,所以写下这篇文章,总结一下学习到的知识.浅陋之处,多多见谅. 补充一下:一直弄不清SQL Server,Mysql ,以及Or ...

  7. 详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)

    一.序言 好久没写博客了,这次主要聊聊 node 和 mongoDb . 先说明一下技术栈  node + express + mongoose + mongoDb.这篇博客,主要讲述 mongoDb ...

  8. Angularjs中表格的增删改查

    在一个管理系统中,不外乎都是增删改查.现在比如有个表格,我想修改当前行的数据,如下图所示 一点击修改的时候,当前页面我需要修改的数据,变成能修改的样式,点击保存能保存当前修改的数据,如下图所示 需要引 ...

  9. 2018.8.1 python中字典的增删改查及其它操作

    一.字典的简单介绍 1.dict 用{}来表示       键值对数据           {key:value} 唯一性 2.键都必须是可哈希,不可变的数据类型就可以当做字典中的键 值没有任何限制 ...

  10. mysql基础之mariadb对表中数据的增删改查

    复习: 查看表:show tables; 创建表:create table 表名(字符类型); 删除表:drop table 表名; 对表的结构进行增删改查: 查看表结构:desc 表名; 修改表-添 ...

随机推荐

  1. 阿里云Linux服务器安装Maven实战教程

    下载地址 https://maven.apache.org/download.cgi 文件上传 把下载的文件上传到阿里云服务器 /usr/local/software 的目录(使用工具) window ...

  2. javaweb本地启动很快,服务器上面启动特别慢

    在JVM环境中解决 打开$JAVA_PATH/jre/lib/security/java.security这个文件,找到下面的内容: securerandom.source=file:/dev/ura ...

  3. 数据库自动备份,crontab定时任务

    查看crontab运行状态service crond status 查看当前用户的crontab,输入 crontab -l: 编辑crontab,输入 crontab -e: 删除crontab,输 ...

  4. 大胖子走迷宫【spfa跑状态】【到这个点,并且这个胖 = max(到这个点,按照时间变的这个胖)

    大胖子走迷宫 题意 思路 普通的bfs走迷宫,多加了一个熟悉,就是胖的圈数.可以来回走,普通的bfs可能不太好处理,我们把这些状态放进spfa跑. 状态定义为{x,y,fat}:坐标位置,胖的圈数. ...

  5. 9、http cache管理器

    jmeter决定是否缓存的功能  2.操作步骤:

  6. C# 动态操作 控件位置绑定 [ Anchor ] 属性

    注: 1.此类属于非常用类,只因本人需要编写的...顺便刷贴一下 2.对于初学,其中的枚举使用可以为你加深一点印象 以下为操作类代码: public class AchCtrer { #region ...

  7. (c语言描述 函数递归汉诺塔)

    汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序 ...

  8. 关于JSP无法使用静态引用的问题案例

    问题描述: 在写项目时,对于头部信息,尾部信息,分页信息等出现频率高,又很雷同的部分进行抽取时,使用到了jsp的静态引用功能,但之前我每次使用,都会导致程序报错,甚至出现tomcat无法正常启动的情况 ...

  9. 持续集成环境(4)-Jenkins凭证管理

    凭据可以用来存储需要密文保护的数据库密码.Gitlab密码信息.Docker私有仓库密码等,以便 Jenkins可以和这些第三方的应用进行交互. 安装Credentials Binding插件 要在J ...

  10. pod进阶

    一.Lifecycle 官网:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/ 通过前面的分享,关于pod是什么相信看 ...