Maison  >  Article  >  Java  >  Comment utiliser Mybatis pour implémenter l'insertion par lots Oracle et la requête de pagination basée sur Java

Comment utiliser Mybatis pour implémenter l'insertion par lots Oracle et la requête de pagination basée sur Java

WBOY
WBOYavant
2023-05-03 23:52:051853parcourir

1. Insertion de données uniques

<!--简单SQL-->
insert into userinfo (USERID, USERNAME, AGE) values(1001,&#39;小明&#39;,20);

<!--Mybatis写法1,有序列,主键是自增ID,主键是序列-->
<insert id="insert" parameterType="com.zznode.modules.bean.UserInfo">
    <selectKey resultType="java.lang.Integer" order="BEFORE" keyProperty="userid">
      SELECT userinfo_userid_seq.nextval as userid from dual
    </selectKey>
    insert into EPG_ALARM_INFO (USERID, USERNAME, AGE)
    values (#{userid}, #{username}, #{age})
</insert>

<!--Mybatis写法2,无序列,主键是uuid,字符串-->
<insert id="insert" parameterType="com.zznode.modules.bean.UserInfo">
    insert into EPG_ALARM_INFO (USERID, USERNAME, AGE, TIME)
    values (#{userid}, #{username}, #{age}, sysdate)
</insert>

2. Insertion de lots de données par lots

insérer tout dans La valeur de retour est déterminée par la sélection finale :

<!--简单SQL, 方法1-->
INSERT ALL 
INTO userinfo (USERID, USERNAME, AGE) values(1001,&#39;小明&#39;,20)
INTO userinfo (USERID, USERNAME, AGE) values(1002,&#39;小红&#39;,18)
INTO userinfo (USERID, USERNAME, AGE) values(1003,&#39;张三&#39;,23)
select 3 from dual;
<!--简单SQL, 方法2-->
begin
    insert into userinfo (USERID, USERNAME, AGE) values(1001,&#39;小明&#39;,20);
    insert into userinfo (USERID, USERNAME, AGE) values(1001,&#39;小红&#39;,18);
    insert into userinfo (USERID, USERNAME, AGE) values(1001,&#39;张三&#39;,23);
end;
<!--简单SQL, 方法3-->
insert into userinfo (USERID, USERNAME, AGE) 
select 1001, &#39;小明&#39;, 20 from dual union all
select 1002, &#39;小红&#39;, 18 from dual union all
select 1003, &#39;张三&#39;, 23 from dual
<!--Mybatis写法1,无序列-->
<insert id="insertBatch" parameterType="java.util.List">
    INSERT ALL 
    <foreach collection="list" index="index" item="item">
        INTO userinfo (USERID, USERNAME, AGE)
        VALUES (#{item.userid}, #{item.username}, #{item.age})
    </foreach>
    select list.size from dual
</insert>
<!--Mybatis写法2,无序列-->
<insert id="insertBatch">
    insert into EPG_ALARM_INFO (USERID, USERNAME, AGE)
    <foreach collection="list" item="item" index="index" separator="union all">
        <!-- <foreach collection="list" item="item" index="index" separator="union all" open="(" close=")"> -->
        <!-- (select #{item.userid}, #{item.username}, #{item.age} from dual) -->
        
        <!-- 上面带括号,下面不带括号,都可以,少量数据不带括号效率高 -->
        select #{item.userid}, #{item.username}, #{item.age} from dual
    </foreach>
</insert>    
<!--Mybatis写法3,有序列-->
<insert id="insertBatch">
    insert into EPG_ALARM_INFO (USERID, USERNAME, AGE)
    SELECT userinfo_userid_seq.nextval, m.* FROM (
    <foreach collection="list" item="item" index="index" separator="union all">
        select #{item.username}, #{item.age} from dual
    </foreach>
    ) m
</insert>

3. Créer une séquence

  • valeur nominale : La valeur minimale est n

  • maxvalue n (/nomaxvalue) : La valeur maximale est n

  • commencer par n : commencer à compter à partir de n

  • incrémenter de n : augmenter n à chaque fois

  • cache n ( /nocache) : mettre en cache n valeurs de séquence/ne pas mettre en cache, s'il est mis en cache, il y aura un risque de saut de numéro

  • noorder (/order) : il n'y a aucune garantie que le numéro de séquence générera des requêtes dans l'ordre

  • cycle n (/nocycle ) : Si la valeur maximale n est atteinte, recommencez depuis le début avec n

  • currval : la valeur actuelle de la séquence, la nouvelle séquence doit utiliser nextval une fois pour obtenir la valeur, sinon une erreur sera signalée

  • nextval : représente la valeur suivante de la séquence une valeur. Lorsqu'une nouvelle séquence est utilisée pour la première fois, la valeur initiale de la séquence est obtenue. A partir de la deuxième utilisation, elle augmente en fonction du pas défini

Supprimer la syntaxe de la séquence : déposer la séquence seq_table name

.
<!--
create sequence 序列名     
       increment by 1 	--每次增加几个,我这里是每次增加1
       start with 1   	--从1开始计数
       nomaxvalue      	--不设置最大值
       nocycle         	--一直累加,不循环
       nocache;        	--不建缓冲区
在插入语句中调用:序列名.nextval  生成自增主键。
-->
<!--创建序列-->
create sequence SEQ_USERINFO
minvalue 1
maxvalue 9999999999
start with 1
increment by 1
nocache;

<!--删除序列-->
drop sequence SEQ_USERINFO

4. Requête de pagination Oracle

Interaction front-end et back-end, requête de pagination

implémentation commerciale du service :

public List<TBadUserW> queryPageBadUserInfo(TbadUserQuery queryModel) {
    log.info("分页查询请求参数,{}", JSON.toJSONString(queryModel));
    int pageNum = queryModel.getPageNum(); // 开始页
    int pageSize = queryModel.getPageSize(); // 每页数量
    queryModel.setStart((pageNum - 1) * pageSize); // 开始行数 (+1后)
    queryModel.setEnd(pageNum * pageSize); // 结束行数
    List<TBadUserW> beans = badUserWDao.queryPageBadUserInfo(queryModel);
    log.info("最终查询数量:", beans.size());
    return beans;
}

mapper écriture de fichier mapper.xml

<select id="queryPageInfo" parameterType="com.zznode.test.bean.TbadUserQuery"
        resultMap="BaseResultMap" >
    SELECT tt.*	FROM
    (
    	<!--前端分页需要 total总记录-->
        SELECT t.*, ROWNUM rown, COUNT (*) OVER () total FROM
        (
            select <include refid="Base_Column_List"/> from T_BAD_USER_W
            <where>
                <if test="city != null and city !=&#39;&#39;">
                    and city = #{city}
                </if>
                <if test="county != null and county != &#39;&#39;">
                    and county = #{county}
                </if>
                <if test="startTime != null and startTime !=&#39;&#39;">
                    and loadtime >= to_date(#{startTime} , &#39;yyyy-mm-dd hh34:mi:ss&#39;)
                </if>
                <if test="endTime != null and endTime !=&#39;&#39;">
                    and loadtime <![CDATA[<=]]> to_date(#{endTime} , &#39;yyyy-mm-dd hh34:mi:ss&#39;)
                </if>
            </where>
        )t
    )tt
    where tt.rown > #{start} and tt.rown <![CDATA[<=]]> #{end}
</select>
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer