Mybatis之序列插入语句(Mysql和Oracle)总结

用最简单方法实现MyBatis动态SQL标签的用法详解 1.MyBatis动态SQL MyBatis 的强大特性之一便是它的动态 SQL,即拼接SQL字符串。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。 动态 SQL 元素和使用 JST 阅读详情

在使用mybatis根据ID自增长插入语句问题?

在mybatis核心配置文件中解决

MYSQL解决办法:

<!--     public void addDept(Dept dept);
            mysql支持自增主键;自增主键的获取,mybatis也是利用statement.getGeneratedKeys()
            要想前台获取添加的数字,添加两个属性
            useGeneratedKeys="true": 使用自增主键获取主键值
            keyProperty: 对应的主键属性,也就是mybatis获取到主键值以后,将这个值封装给javaBean的哪个属性
     -->
    <insert id="addDept" useGeneratedKeys="true" keyProperty="deptno" databaseId="mysql" >
        insert into dept(dname,loc) values (#{dname},#{loc});
    </insert>


Oracle解决办法:

<!--Oracle不支持    自增;Oracle使用序列序列来模拟自增;
        每次插入的数据的主键是从序列中拿到的值:如歌获取到这个值?    
     -->
     <insert id="addDept" databaseId="oracle" >
         <!-- keyProperty:查出的主键封装给JavaBean的哪个属性 
              order="BEFORE":当前SQL在插入之前运行
                      AFTER:当前SQL在插入之后运行
              resultType: 查出数据的返回值类型
              
              BEFORE运行顺序:
                  先运行selectKey查询id的sql;查出id的值封装给javaBean的id属性
                  再运行插入的SQL;就可以取出id属性对应的值
              AFTER:
                 先 运行插入的SQL(从序列中取出新值作为id)
                  再运行selectKey查询id的sql
         -->
         <selectKey keyProperty="deptno" order="BEFORE" resultType="Integer">
             <!-- 编写查询主键的SQL语句 -->
             <!-- BEFORE:-->
                SELECT seq_deptno.nextval FROM dual
            <!-- AFTER:     
                SELECT seq_deptno.currval FROM dual
             -->
         </selectKey>
             <!-- 插入时的主键是从序列中拿到的 -->
            <!-- BEFORE: -->
                insert into dept(deptno,dname,loc) 
                values (#{deptno},#{dname},#{loc})
            <!-- AFTER:    
                insert into dept(deptno,dname,loc) 
                values (seq_deptno.nextval,#{dname},#{loc})
            -->
    </insert>
     
--------------------- 

mybatis 更新数据表、自动增长序列、


一、更新数据表
1.在映射文件中添加:
<update id="updateStudentById" parameterType="Student">
update student set name=#{name},age=#{age} where id=#{id}
</update>
2.在测试文件中添加(先查询出修改的对象,然后在修改)
String statement="com.huayu.mapper.studentMapper"+".selectStudentById";
// String statement1="com.huayu.mapper.studentMapper"+".updateStudentById";
// Student st=sqlSession.selectOne (statement,6);
// st.setName("huahua");
// st.setAge(20);
// sqlSession.update(statement1, st);


二、添加数据时,针对id设主键,避免唯一约束,如何实现自动增长
1.第一种方式:
在oracle中.
a、添加序列表
b、在映射文件中找到insert元素输入以下内容,如:
<insert id="insertStudentById" parameterType="Student">
<selectKey keyProperty="id" resultType="int" order="BEFORE">
select s_t_seq.nextval from dual
</selectKey>
insert into student values(#{id},#{name},#{age})
</insert>
在触发器中


2.第二种方式
在mysql中.
1.打开cmd输入mysql -u root
2.创建数据库名称:create database 名字;
3.use 名字
4.create table Student(
student_id int(6) not null primary key auto_increment,
student_name varchar(10) not null,
student_age int(2) not null
);
5.将映射文件insert修改为
<insert id="insertStudent" parameterType="Student" useGenerateKeys="true"
  keuProperty="id">
insert 语句
</insert>
6、将driver改成com.mysql.jdbc.Driver
将url改成jdbc:mysql://localhost:3306/mysql数据库名字


三、
1.mybatis嵌套结果(使用association进行关联)
首先,在映射文件中根据班级id查询班级的信息
<select id="selectClassById" parameterType="int" resultMap="selectClasses">
select * from class c,teacher t where c.t_id=t.t_id and  c_id = #{id}
</select>
使用resultMap引用对象的属性,注意id和上面的resultMap名称一致
<resultMap type="Classes" id="selectClasses">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>


<关联,一对一映射>
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>

2.嵌套查询
通过多条select语句得到结果
先根据班级id查出班级信息
<select id="selectClass1" parameterType="int" resultMap="selectClassMap">
select * from class where c_id=#{id}
</select>
再根据resultMap去引用resultMap标签里的属性,它包括:
Classes类的属性
<resultMap type="Classes" id="selectClassMap">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
和Classes关联的teacher类的属性
<association property="teacher" column="t_id" select="selectTeacher">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
</association>
</resultMap>
四、一对多映射


五、动态sql;
1.先把要使用的条件写成java类的属性;
2.在映射文件中查询语句;
<select id="selectTt" parameterType="Tt" resultType="Student"> 
select * from student where  age between #{minAge} and #{maxAge}
//判断模糊条件是否为空
<if test='pipi!="%null%"'>
and name like #{pipi}
</if>
在测试类里面也要写成t.setPipi("%h%")来设置条件;

--------------------- 
 

mybatis 批量插入使用序列以及批量更新(Oracle数据库) insert into MOBILE_RECIPIENT(ID, MOBILE_DETAIL_ID, MOBILE, ERROR, STATUS, CREATE_TIME,CONTENT)  select SEQUENCE_MOBILE_RECIPIENT_ID.NEXTVAL ,A.* from (         select            #{item.mobileDeta 阅读详情

相关推荐

SAP MRKO与MIRO的对比分析:为何寄售结算需要定制开发?

本文深入分析了SAP系统中MRKO与MIRO在寄售结算中的功能差异,揭示了标准MRKO在财务控制和业务流程上的局限性。通过定制开发实践,如BAdI增强和界面优化,企业可显著提升结算效率与准确性。文章还探讨了未来SAP S/4HANA在寄售结算中的智能化趋势,为相关企业提供技术参考。

weixin_29300241的博客 419

Mybatis-序列的使用

MyBatis用序列插入对象 <insert id="addGroup" parameterType="xxVO"> select seq_xx.nextVal from dual INSERT INTO ( ) VALUES( sys_guid(), SYSDATE, SYSDAT

写博客只为学习 4561

abaqus运行报错 WindowsError:[Error 2]

abaqus提交job总是提示“WindowsError [Error 2”,报这个错误,可能是由于安装其他软件改变了abaqus软件的路径导致,总结了看到的教程,按照下面的方法可以解决这个问题。 步骤一:找到你的abaqus安装路径(我是按照一个安装视频安装的,安装路径为SIMULI1),然后找到SIMULIA文件夹,点击进入后找到commands文件夹,将这个路径复制下来。 步骤二:我的电脑右键属性,在左侧中找到高级系统设置并...

az101za的博客 1万+

mysql和mybaits自增长序列详解_MyBatis Oracle 自增序列的实现方法

mybatis oracle 自增序列的代码如下所示:SELECT SEQ_TABLE.NEXTVAL FROM dualINSERT INTO s_id,name,ageVALUES(#{s_id} #{name}, #{age} )resultType="int" 返回的是一个int类型keyProperty 把返回值,赋值给:parameterType中对象的对象的属性,也就是xxxxx类中...

weixin_30225755的博客 311

利用VS2019编写安卓APP的步骤和所遇问题的解决办法

遇到了代码错误,这个可以将鼠标箭头置于错误代码处,这样VS2019给你解决办法,给的方法不能解决,并且读了程序都没有问题,那么你应该重启软件,这样还是不能解决,你尝试重新生成解决方案,还是不能解决有可能是运用的代码与当前版本不相符和、过时了,这个时候应当运用相应版本的代码。注:VS2019编写APP的空间不是很稳定,当你写的代码没有问题,但是出现了报错,可能是空间崩溃了,这个时候可以重启软件。点击“+”号,创建密钥存储,输入“别名”、“密码”、以及下面中的任意一项,直至红色框消失后。

youbestcando的博客 7812

Spring 核心技术解析【纯干货版】- I:Spring 基础模块 Spring-Core 模块精讲

Spring-Core 模块,是 Spring 核心容器模块之一。虽然 “Core” 本身就有 “核心的,重要的部分” 的含义,但是它并非是实现(常被我们说为 Spring 核心机制)IOC / AOP 的模块。Spring 中的 IOC 机制,主要来自于 BeanFactory 容器和 ApplicationContext 容器,这二者分别由同为核心容器模块的 Spring-Bean 模块 和 Spring-Context 模块所提供。

栗筝i的博客 2522

解决oracle及Mysql数据库在mybatis中主键自增问题(创建序列等方法)2021

mybatis解决主键自增问题 最近,小编刚实习,说一下在工作中遇到的问题,其中就有mybatis解决主键自增的问题 在oracle数据库中 1、创建序列 在oracle中没有像mysql一样可以使用 AUTO_INCREMENT id int(11) NOT NULL AUTO_INCREMENT 所以需要用到序列,首先在数据库中新建序列 创建序列 CREATE SEQUENCE DHDC_PS_ID_SEQ INCREMENT BY 1 - 每次加几个

dhaixuexi_1的博客 1502

【数据集】MODIS 的 MOD07 大气廓线产品概述及下载

MODIS 的 MOD07 大气廓线产品概述及下载

WW、forever的博客 550

Mybatis之序列插入语句(Mysql和Oracle)

在使用mybatis根据ID自增长插入语句问题? 在mybatis核心配置文件中解决 MYSQL 解决办法: <!-- public void addDept(Dept dept); mysql支持自增主键;自增主键的获取,mybatis也是利用statement.getGeneratedKeys() 要想前台获取添加的数字,添...

Jadeon 7676

激光器安规详细解读 - 一级 - 并以940波长为例

前言: 作为人工智能的重要解决方案,激光作为不可或缺的一个选项。但是,激光的安规问题始终是要得到关注。尤其是3D识别技术在人脸上的使用的时候,如何判读激光器的安全使用规范,变得非常重要。本文,尝试从欧洲激光标准IEC 60825-1:2014,以及国家激光产品规则标准GB 7247.1,抛砖引玉,写出自己的理解。 本节,主要讨论,人脸识别需要符合的安全等级1: 1 激光标准的分类 激光国际...

山云的专栏 5036

超强干货之---Python-数据爬取(爬虫)

定义: 深度优先搜索是一种遍历或搜索树或图的算法,从起始节点开始,一直沿着一个分支走到底,再回溯到上一个节点继续搜索下一个分支,直到遍历完所有节点。特点递归:通常用递归实现,或者使用栈来模拟递归过程。内存占用低:在有大量分支的情况下,内存占用比广度优先搜索低。适合目标较深的情况:如果目标节点距离起始节点较深,DFS能更快找到目标。适用场景需要遍历所有节点的情况,如生成树、迷宫搜索。目标节点较深,且分支较多时。在大规模数据爬取时,选择合适的存储方式取决于数据的规模、结构和访问需求。

房东的猫的博客 5万+

oracle 批量插入 mysql 区别,Oracle/Mysql批量插入的sql,效率比较高

1、oracle 批量插入:insert into tableName(col1,col2,col3...)select 1,'第一行第一列值','第二列值' from dual unionselect 2,' 第二行第一列值 ','第二列值' from dual unionselect 3,' 第三行第一列值 ','第二列值' from dual;至于这里的dual表是啥,可以自己问go...

weixin_42691388的博客 573

【汇编实战开发笔记】一段汇编代码如何“反编译”成C代码?

介绍了一种由汇编代码得到C代码的方法

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 1万+

MyBatis批量插入-Oracle

MyBatis批量插入 今天再用MyBatis操作Oracle实现批量操作的时候,遇到了比较奇葩的: 由于Oracle不同与MySQL 批量插入操作的时候,是不能Values(…),(…)这样完成批量插入操作的,所以我们需要另寻道路 在SqlPLus里测试批量的sql语句:如下 利用Oracle的虚表进行操作 select 1002 id,'王五' name,'wangwu@163.com' email,24 age from dual; 查询结果:类似一张表,你也可以看作是一个虚拟表,这样我么是不是

mmklo的博客 3506

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

batchupdate写法_mybatis执行批量插入insert和批量更新update

Mybatis批量插入和批量更新数据的资料相信大家从网上能查找到很多资料,本文重点总结一下mybatis执行批量插入insert和批量更新update数据。在mysql数据库中批量插入,如:insert into ... values (),(),...语法;而在oracle数据库中批量插入如:insert into selcect ... union all select ...语法。mysql...

weixin_39874795的博客 973

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

oracle数据库 + mybatis 实现 批量插入遇到的坑(带有序列的实现)

oracle 和 mysql 实现批量插入时由一点的差别,一定要注意这一点,否者就会报错,报各种错误。下面我就来展示一下oracle + mybatis 实现批量插入的方法并且会指明一些需要注意的点。 由于oracle没有主键自增的功能,这里使用了序列实现主键的自增。在批量插入时,如果没有正确使用序列,咋会报禁止使用序列这个异常。具体看下面的代码怎么实现批量插入的。 xml中sql的部分。 ...

奋斗的哼哼 2102

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Mybatis 针对Oracle 的批量插入 写法

这是针对Oracle数据库的://封装好的list insert into c_crm_contact_new(INTER_ID,CUSTOMER_ID,CONTACT,CONTACT_TEL,CONTACT_FAX,CONTACT_EMAIL,CREATED_BY,CREATED_DATE,REMARKS) select SEQ_CUSTOMER_ID.nextval,A.* fr

我的树洞 545

mysql的oracle查询区别_mysql和oracle用法的区别

1、分页mysql:select * from table limit m; --查询m行select * from table limit m, n; --查询m+n行,撇去前面的m行,返回最后的n行select * from table limit n offset m;select * from table where id > 100 limit 0, 10; --第101~11...

weixin_36367249的博客 407

mybatis替代mysql_mybatis中mysql和oracle的差异

注意:黑色为oracle配置,红色为mysql配置1,jdbc配置jdbc.driver=oracle.jdbc.OracleDriverjdbc.url=jdbc:oracle:thin:@192.168.100.8:1521:namejdbc.username=orcljdbc.password=orcljdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdb...

weixin_35941591的博客 248

oracle批量插入并且返回自增主键_MyBatis+Oracle用foreach标签实现批量插入数据以及主键自增...

MyBatis+Oracle用foreach标签实现批量插入数据以及主键自增发布时间:2018-09-20 21:18,浏览次数:949, 标签:MyBatisOracleforeach1.前言最近做一个批量导入影像的需求,将多条记录批量插入数据库中。解决思路:在程序中封装一个List集合对象,然后把该集合中的实体插入到数据库中,因为项目使用了MyBatis,所以打算使用MyBatis的forea...

weixin_39622138的博客 921

mybatis语句批量新增语句

mybatis中语句 <insert id="addInvestorFileupload" parameterType="java.util.List"> insert into investor_file_info (id, user...

weixin_30872733的博客 355

MyBatis-Plus的saveBatch批量插入为何效率很低耗时长详解及解决方案

Mybatis-plus的saveBatch耗时详解及解决方案

qq_40093255的博客 1万+

mybatis获取mysql自增_Mybatis获取数据库自增主键

一般我们都为将表中主键列设置为自增,当我们执行插入语句时,比如这样//测试添加Employee employee = new Employee(null, "jerry4",null, "1");mapper.addEmp(employee);System.out.println(employee.getId());那此时主键列我们进行`null值插入,插入后,如何能够获取自增的主键呢?一、myb...

weixin_35753431的博客 225

sequence解决oracle数据库主键不自增

工作这么多年。总算遇到一家数据库用oracle的企业了,由于oracle与mysql的不同,mysql设置了主键(id),那他就会实现自增,插入数据时,无需指定i的值,但是oracle却无法实现主键自增,解决方法:sequence(序列) 使用序列完成自增 (1)创建序列 create sequence **MYBATIS** minvalue 1 --最小值 nomaxvalue --不设置最大值 start with 1 --从1开始计数 increment by 1 --每次加1个

weixin_44543581的博客 1256

MyBatis 主键回填详解:从业务场景到两种实现方式

MyBatis主键回填技术解决了插入数据后自动获取主键值的需求,适用于订单编号生成等场景。文章介绍两种实现方式:1)useGeneratedKeys方式(推荐用于MySQL等自增主键数据库)通过JDBC自动获取主键;2)<selectKey>标签(支持Oracle序列/UUID等),可灵活控制主键生成时机(BEFORE/AFTER)。通过流程图对比了两种方式的执行过程,自增主键用useGeneratedKeys,复杂场景用<selectKey>。最后指出批量插入和反射赋值的注意事项,为开发者提供完整解决方案

无论云泥意贯一 431
上一篇: mybatis执行批量更新batch update 的方法(oracle,mysql)
下一篇: java如何对map进行排序详解(map集合的使用)
god_love_hlq_xff
博客等级 码龄11年 27粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值