前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mybatis映射器之insert-update-delete

Mybatis映射器之insert-update-delete

作者头像
zhangheng
发布2020-04-28 18:05:51
1.1K0
发布2020-04-28 18:05:51
举报

insert元素的配置

元素

说明

备注

id

他和mapper的命名空间组合起来必须是唯一的,提供给mybatis调用

如果命名空间和id组合起来不唯一,mybatis将会抛异常

paramterType

入参类型可以是类的全命名,也可以使类的别名(必须是在mybatis中定义好的)

可以选择javabean,map等复杂类型传递参数给sql

parameterMap

废弃

废弃

flushCache

在调用sql后,是否清空之前查询的本地缓存和二级缓存

取值为布尔类型,true/false

timeout

设置超时参数,等待超时将抛出异常,单位为秒

默认值是jdbc驱动或连接池设置的秒数

statementType

选择一种statement,取值为STATEMENT,PREPARED,CallableStatement

默认为PREPARED

databaseId

标识数据库厂商

提供多种数据库支持

keyProperty

表示以哪一列作为属性的主键,不能和keyColumn同时使用

联合主键可以用逗号隔开

useGeneratedKeys

这会令Myabatis使用JDBC的getGeneratedKeys方法来取出有数据库内部生成的主键,例如mysql和sqlserver的自增字段,oracle的序列。使用这个必须配合使用keyProperty或keyColumn。

取值为true/false,默认为false

keyColumn

指明第几列是主键,不能和keyProperty共同使用,只能接受整形参数

联合主键可以用逗号分割

lang

自定义语言,可使用第三方语言,使用较少

-

主键回填和自定义

现实中,数据表可能拥有自增字段,或者我们需要给一个字段插入特定值,而mybatis提供了实现的方法。

首先可以用keyProperty属性指定哪个是主键字段,同时使用useGeneratedKeys属性告诉mybatis这个主键是否使用数据库内置策略生成。

这里我们举两个例子,一个是使用mysql的自增功能,另一个是通过sql设置主键。

这个例子代码文件格式和Mybatis映射器之insert,完整代码参考这篇文章。

src/main/java/ --------------/MybatisInsertUpdateDeleteMain.java --------------/com/gavinzh/mybatis/ ----------------------------------/modal/MyInfo.java ----------------------------------/MyInfoMapperCopy.java src/main/resources/ ------------------/mybatis_insert_update_delete.xml ------------------/xxx/mybatis_mapper_insert_update_delete.xml

mapper配置文件mybatis_mapper_insert_update_delete.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gavinzh.mybatis.MyInfoMapperCopy">

    <insert id="insertByAuto" parameterType="com.gavinzh.mybatis.modal.MyInfo" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO test.my_info(user_name,user_age) VALUES (#{userName},#{userAge})
    </insert>

    <insert id="insertBySql" parameterType="com.gavinzh.mybatis.modal.MyInfo" useGeneratedKeys="true" keyProperty="id">
        <selectKey keyProperty="id" resultType="int" order="BEFORE">
            SELECT if(max(id) is NULL ,1 ,max(id)+1) as newId FROM test.my_info
        </selectKey>
        INSERT INTO test.my_info(user_name,user_age) VALUES (#{userName},#{userAge})
    </insert>

</mapper>

mapper接口MyInfoMapperCopy.java:

代码语言:javascript
复制
package com.gavinzh.mybatis;

import com.gavinzh.mybatis.modal.MyInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @author gavin
 * @version V1.0
 */
public interface MyInfoMapperCopy {
    int insertByAuto(MyInfo myInfo);

    int insertBySql(MyInfo myInfo);
}

main方法MybatisInsertUpdateDeleteMain.java:

代码语言:javascript
复制
import com.alibaba.fastjson.JSON;
import com.gavinzh.mybatis.MyInfoMapperCopy;
import com.gavinzh.mybatis.modal.MyInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author gavin
 * @version V1.0
 */
public class MybatisInsertUpdateDeleteMain {
    public static void main(String[] args) throws IOException {
        //配置
        String resource = "mybatis_insert_update_delete.xml";

        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        // mapper获取
        MyInfoMapperCopy myInfoMapperCopy = sqlSession.getMapper(MyInfoMapperCopy.class);

        //入参
        MyInfo myInfo = new MyInfo();


        // 自增主键
        myInfo.setUserName("test1");
        myInfo.setUserAge("11");
        myInfoMapperCopy.insertByAuto(myInfo);
        System.out.println(JSON.toJSONString(myInfo));

        // 通过sql获得指定主键
        myInfo.setUserName("test2");
        myInfo.setUserAge("22");
        myInfoMapperCopy.insertBySql(myInfo);
        System.out.println(JSON.toJSONString(myInfo));
    }
}

update和delete

这两者和insert差不多,返回的都是影响的行数int型,这里就不做展示了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • insert元素的配置
  • 主键回填和自定义
  • update和delete
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档