sql >> データベース >  >> RDS >> Oracle

Oracleでカスタムレコードタイプのリストを取得するためのMyBatisマッピング

    マッパーを次のように変更します

    <resultMap type="detail" id="myResultMap"  >
            <result property="objectNamee" column="P_OBJECT_NAME" />
            <result property="objectStatus" column="p_object_status" />
    </resultMap>
    
    <select id="getLearnerMap" parameterType="spInOut" statementType="CALLABLE">
    
     {call p1.data_collection_append(#{objList, jdbcType=CURSOR, mode=OUT, resultMap=myResultMap, javaType=java.sql.ResultSet})}
    
    </select>
    

    ドメインディレクトリのSpInOutにタイプを作成します

    public class SpInOut {
    
        private Object objList;
       //getter setting follows
    }
    

    これが完全な簡単な例です

    DB側

    カスタムタイプを作成する

    PACKAGE KP_EMP_PCK AS
    
      type empType is ref cursor;
    
    END KP_EMP_PCK;
    

    ストアドプロシージャを作成する

    create or replace PROCEDURE KPLISTEMP
    ( empList OUT kp_emp_pck.empType
    ) AS
    BEGIN
      open empList for select empid, fname, lname,address from kpemployee order by fname;
    END KPLISTEMP;
    

    Java側

    ドメインクラスを作成する

    public class User {
    
        private String fName;
        private String company;
        private int age;
        private int salary;
        //getter Setter
    

    }

    SpInOutのドメインを作成する

    public class SpInOut {
    
            private Object empList;
           //getter setting follows
        }
    

    マッパーインターフェイス

    public interface EmployeeMapper {
    
        void getEmployees(SpInOut param);
    
    }
    

    Mapperxmlファイル

    <mapper namespace="com.kp.swasthik.db.oracle.persistence.EmployeeMapper">
    
        <resultMap type="employee" id="empResultMap"  >
            <id property="empId" column="EMPID" />
            <result property="fName" column="FNAME" />
            <result property="lName" column="LNAME" />
            <result property="address" column="ADDRESS"  />
        </resultMap>
    
        <select id="getEmployees"  statementType="CALLABLE" parameterType="spInOut" >
            {call kplistemp(#{empList, jdbcType=CURSOR, mode=OUT, resultMap=empResultMap, javaType=java.sql.ResultSet})}
        </select>
    </mapper>
    

    そして最後にサービスクラス

    public class EmployeeServiceImpl implements EmployeeService {
    
        @Autowired
        EmployeeMapper mapper;
    
        @Override
        public List<Employee> getEmps() {
            try{
                SpInOut data= new SpInOut();
                mapper.getEmployees(data);
                return (List<Employee>) data.getEmpList();
            }catch(Exception e){
                e.printStackTrace();
            }
            return null;
        }
    
    }
    



    1. Oracleの一時テーブルとグローバル一時テーブルの違いは何ですか?

    2. Node.jsでSequelizeを使用して結合クエリを作成する方法

    3. mySQL-非正規化する必要がありますか?

    4. Oracle SQL:Selectステートメントを使用した挿入でシーケンスを使用