中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MybatisPlus+Postgresql整合的坑怎么解決

發布時間:2023-03-30 11:54:23 來源:億速云 閱讀:164 作者:iii 欄目:開發技術

本篇內容主要講解“MybatisPlus+Postgresql整合的坑怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MybatisPlus+Postgresql整合的坑怎么解決”吧!

基礎設置

application.yml設置,注意schema的設置

spring:
  datasource:
    platform: postgres
    url: jdbc:postgresql://192.188.1.245:5432/uum?currentSchema=uum
    schemaName: uum
    username: xxxx
    password: xxxx
    driver-class-name: org.postgresql.Driver

自增字段

關于自增字段,postgresql中沒有自增字段,用的是sequence,比如user表中的主鍵id字段:

create sequence uum.userid_seq start with 1 increment by 1 no minvalue no maxvalue cache 1;
alter sequence uum.userid_seq owner to smartsys;
 
alter table uum.user alter column id set default nextval('uum.userid_seq');

插入時的sql,id不傳入。

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.sifang.uum.model.Cuser">
    insert into cuser(uname, realname, password, phone, email, user_type, deleted, birthday) values(#{uname}, #{realname}, #{password}, #{phone}, #{email}, #{userType}, #{deleted}, #{birthday})
</insert>

service層中獲取插入的id:

baseMapper.insertUser(user);
int id= user.getId();

遞歸獲取單位樹列表

獲取一個單位所有子單位,company表中含有cid和pcid,分別是單位的id和父單位的id,最頂層的單位id為null。想查詢出樹列表。

class Company是直接根據數據庫生成的model,class CompanyVo在Company基礎上加了字段

private List<CompanyVo> children;

通過遞歸調用獲取單位的樹列表:

public List<CompanyVo> companyTree() {
    // 調用mybatisplus的默認函數獲取所有單位
    List<Company> list = this.list(); 
 
    // 獲取所有最頂層的單位
    List<CompanyVo> parentList = getParentList(list);
 
    // 遞歸調用填充子單位
    List<CompanyVo> allList = getChildrenList(list, parentList);
 
    return allList;
}
 
private List<CompanyVo> getParentList(List<Company> list) {
    List<CompanyVo> parentList = new ArrayList<>();
 
    list.forEach(comp ->{
        if(comp.getPcid() == null) {
            parentList.add(new CompanyVo((comp)));
        }
    });
 
    return parentList;
}
 
private List<CompanyVo> getChildrenList(List<Company> list, List<CompanyVo> parentList) {
    parentList.forEach(parent -> {
        List<CompanyVo> childrenList = new ArrayList<CompanyVo>();
        list.forEach(comp -> {
            if(parent.getCid() == comp.getPcid()) {
                childrenList.add(new CompanyVo(comp));
            }
        });
 
        parent.setChildren(getChildrenList(list, childrenList));
    });
 
    return parentList;
}

Swagger頁面測試:

MybatisPlus+Postgresql整合的坑怎么解決

獲取一個單位及其子單位下所有用戶列表

每個單位通過一個rel_comp_user關系表和用戶表做了關聯,想獲取一個單位及其所有子單位的人員列表。

service層代碼

public Page<Cuser> listAllUser(Page<Cuser> page, int cid) {
    // 獲取編號為cid的單位的所有子單位的列表
    List<Integer> allChile = baseMapper.listAllChildComp(cid);
 
    if(allChile.size() > 0) {
        String str = "'";
        for(int i=0; i<allChile.size(); i++) {
            str += allChile.get(i).toString();
 
            if(i != allChile.size() - 1) {
                str += ",";
            }
        }
        str += "'";
 
        System.out.println(str);
 
        // 獲取所有這些單位的人員列表
        return baseMapper.listAllChildUser(page, str);
    }
    else {
        return null;
    }
}

Mapper層,不能直接寫in語句,需要用where position,把獲取的所有單位編號轉換成一個字符串傳入:

<select id="listAllChildComp" parameterType="java.lang.Integer" resultType="java.lang.Integer">
    WITH RECURSIVE T ( cid, pcid ) AS (
        SELECT
            A.cid,
            A.pcid
        FROM
            company A
        WHERE
            A.cid = #{cid} UNION ALL
        SELECT
            b.cid,
            b.pcid
        FROM
            company b,
            T
        WHERE
            b.pcid = T.cid
    ) SELECT cid FROM T
</select>
 
<select id="listAllChildUser" resultType="com.sifang.uum.model.Cuser">
    select cuser.id id, cuser.uname uname
    from cuser
        left join rel_comp_user on cuser.id=rel_comp_user.uid
    where position(','||rel_comp_user.cid||',' in ','||${childComp}||',')>0
</select>

swagger頁面測試:

MybatisPlus+Postgresql整合的坑怎么解決

到此,相信大家對“MybatisPlus+Postgresql整合的坑怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德清县| 万年县| 贞丰县| 虎林市| 柘荣县| 芜湖市| 建水县| 新田县| 吐鲁番市| 泗洪县| 邯郸县| 黄石市| 保德县| 新邵县| 油尖旺区| 西畴县| 紫云| 侯马市| 仁怀市| 华坪县| 奎屯市| 游戏| 林甸县| 苏尼特左旗| 岑巩县| 兴宁市| 南乐县| 松阳县| 乌什县| 敦煌市| 高安市| 湾仔区| 嘉祥县| 桐乡市| 沾益县| 突泉县| 潮安县| 葵青区| 双鸭山市| 榕江县| 山西省|