替代Hibernate中的NamedParameterJDBC模板行映射器

时间:2013-10-18 09:42:27

标签: java spring hibernate jdbctemplate spring-jdbc

我必须在Hibernate中转换以下NamedSqlParameterSource: -

    final List<MenuActionMapping>  menusList;


    MapSqlParameterSource sqlParams = new MapSqlParameterSource();


    menusList = namedParameterJdbcTemplate.query("call sp_proc()",sqlParams ,new RowMapper<MenuActionMapping>() {
                @Override
                public MenuActionMapping mapRow(ResultSet resultset, int i)
                        throws SQLException {

    MenuActionMapping menuActionMapping=new MenuActionMapping();


                    menuActionMapping.setMenuKey(resultset.getString("KMM_MENU_KEY"));

                    menuActionMapping.setDisplayName(resultset.getString("KMM_DISPLAY_NAME"));
                    menuActionMapping.setMenuActionFlag(resultset.getInt("KMM_ACTION_FLAG"));
                    menuActionMapping.setMenuActive(resultset.getInt("KMM_ACTIVE"));
                    menuActionMapping.setMenuLevel(resultset.getInt("str_len"));

String str=resultset.getString("menu_actions");

String [] actions=str.split(",");
if(resultset.getInt("KRMM_ACTIVE")==1)
{
menuActionMapping.setActive(true);
}
else
{
    menuActionMapping.setActive(false);
}

for(String strAct:actions)
{
     if(strAct.equals("ADD"))
    {
    menuActionMapping.setAddCheckBox(true);
    menuActionMapping.setAddCheckBoxDisabled("true");
    }
                            if(strAct.equals("VIEW"))
                            {
                                menuActionMapping.setViewCheckBox(true);
                                menuActionMapping.setViewCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DELETE"))
                            {
                                menuActionMapping.setDeleteCheckBox(true);
                                menuActionMapping.setDeleteCheckBoxDisabled("true");
                            }

                            if(strAct.equals("EDIT"))
                            {
                                menuActionMapping.setEditCheckBox(true);
                                menuActionMapping.setEditCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DOWNLOAD"))
                            {
                                menuActionMapping.setDownloadCheckBox(true);
                                menuActionMapping.setDownloadCheckBoxDisabled("true");
                            }

                        }               

                        return menuActionMapping;
                    }
            });
        System.out.println(menusList);

    return menusList;

我不知道namedJdbcTemplate和Map Row如何工作,所以我遇到了一个问题.. 我还在hibernate中编写了替代代码,但它不起作用: -

                    final List<MenuActionMapping> menusList; 

        Query query= getSession().createSQLQuery("call kyc.sp_proc()");

        menusList=query.list();
        System.out.println(menusList);
        return menusList;

我认为我没有设置MenuAction Mapping Object以便如何实现目的?

此外,我想在将其设置为对象之前操纵列 我如何在休眠中执行此操作....

困扰我的主要代码是: -

String str=resultset.getString("menu_actions");
String [] actions=str.split(",");
if(resultset.getInt("KRMM_ACTIVE")==1)
{
    menuActionMapping.setActive(true);
}
else
{
    menuActionMapping.setActive(false);
}

for(String strAct:actions)
{
    if(strAct.equals("ADD"))
   {
        menuActionMapping.setAddCheckBox(true);
        menuActionMapping.setAddCheckBoxDisabled("true");
}
    if(strAct.equals("VIEW"))
    {
            menuActionMapping.setViewCheckBox(true);
        menuActionMapping.setViewCheckBoxDisabled("true");
}
    if(strAct.equals("DELETE"))
    {
        menuActionMapping.setDeleteCheckBox(true);
            menuActionMapping.setDeleteCheckBoxDisabled("true");
    }

    if(strAct.equals("EDIT"))
    {
        menuActionMapping.setEditCheckBox(true);
        menuActionMapping.setEditCheckBoxDisabled("true");
    }
    if(strAct.equals("DOWNLOAD"))
    {
        menuActionMapping.setDownloadCheckBox(true);
        menuActionMapping.setDownloadCheckBoxDisabled("true");
    }

如何在hibernate中设置基于1列的多属性...

2 个答案:

答案 0 :(得分:1)

namedJdbcTemplate可帮助您减少样板代码,例如获取,关闭连接等,而行映射器可帮助您迭代返回的结果集并将其映射到所需的Java类。
请检查此http://www.mkyong.com/hibernate/how-to-call-store-procedure-in-hibernate/

答案 1 :(得分:0)

感谢How to map columns in hibernate with class attributes?上的@Pratik 我得到了我的问题的答案我可以使用hibernate中的BasicTransformerAdapter在hibernate中实现与jdbc模板的行mappper相同。我的代码如下: -

 final List<MenuActionMapping>  menusList;
                menusList = getSession().createSQLQuery("CALL kyc.sp_proc()").setResultTransformer(new BasicTransformerAdapter() {


                    private static final long serialVersionUID = 1L;
                    @Override
                      public Object transformTuple(Object[] tuple, String[] aliases)
                    {
                        MenuActionMapping menuActionMapping=new MenuActionMapping();
                        menuActionMapping.setMenuId((Integer)tuple[0]);
                        menuActionMapping.setMenuKey((String)tuple[1]);
                        menuActionMapping.setDisplayName((String)tuple[3]);
                        menuActionMapping.setMenuActionFlag((Integer)tuple[5]);
                        final Boolean b=(Boolean)tuple[6];
                        menuActionMapping.setMenuActive(b? 1 : 0);
                        final BigInteger big=(BigInteger) tuple[9];
                        menuActionMapping.setMenuLevel(big.intValue());
                        String str=(String)tuple[10];
                        String [] actions=str.split(",");
                        if(b==true)
                        {
                            menuActionMapping.setActive(true);
                        }
                        else
                        {
                            menuActionMapping.setActive(false);
                        }

                        for(String strAct:actions)
                        {
                            if(strAct.equals("ADD"))
                            {
                                menuActionMapping.setAddCheckBox(true);
                                menuActionMapping.setAddCheckBoxDisabled("true");
                            }
                            if(strAct.equals("VIEW"))
                            {
                                menuActionMapping.setViewCheckBox(true);
                                menuActionMapping.setViewCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DELETE"))
                            {
                                menuActionMapping.setDeleteCheckBox(true);
                                menuActionMapping.setDeleteCheckBoxDisabled("true");
                            }

                            if(strAct.equals("EDIT"))
                            {
                                menuActionMapping.setEditCheckBox(true);
                                menuActionMapping.setEditCheckBoxDisabled("true");
                            }
                            if(strAct.equals("DOWNLOAD"))
                            {
                                menuActionMapping.setDownloadCheckBox(true);
                                menuActionMapping.setDownloadCheckBoxDisabled("true");
                            }

                        }               

                        return menuActionMapping;

                    }


                }).list();