LINUX.ORG.RU

java ... и sql лапша в коде


0

0

Столкнулся с банальной проблемой есть код в нем есть куча SQL запросов длинных... при портировании кода на другую базу все это нужно переделывать, пересобирать и тп хотели использовать hibernate но увы может возниктунь необходимость портировать на совершенно иную кучу таблиц и hibernate тут выходит боком (нужно возится с ужасным мапингом), а если хранить запросы например в xml файле то достаточно пеерписать файлик и все. Есть ли готовые решения или иные пути?

★★☆

> Столкнулся с банальной проблемой есть код в нем есть куча SQL запросов длинных... при портировании кода на другую базу все это нужно переделывать

А что конкретно переделывать? на переносимом синтаксисе select'ы не получается написать?

> а если хранить запросы например в xml файле то достаточно пеерписать файлик и все.

как вариант можно, также как шаблоны сообщений об ошибках хранят...

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

>на переносимом синтаксисе select'ы не получается написать?

если приложение разрабатывалось под таблицу employees (objid,name,surname,patronymic,....,login,pass) а перенести его нужно на базу где такой таблицы не и в помине е есть физлица, сотрудники и аккаунты которые через три жопы связаныы, то на каком синатксисетут писать селекты в файлах маппинга?

wfrr ★★☆
() автор топика

iBATIS is a persistence framework which automates the mapping between SQL databases and objects in Java, .NET, and Ruby on Rails. In Java, the objects are POJOs (Plain Old Java Objects). The mappings are decoupled from the application logic by packaging the SQL statements in XML configuration files. The result is a significant reduction in the amount of code that a developer needs to access a relational database using lower level APIs like JDBC and ODBC.

Legioner ★★★★★
()
Ответ на: комментарий от wfrr

> если приложение разрабатывалось под таблицу employees (objid,name,surname,patronymic,....,login,pass) а перенести его нужно на базу где такой таблицы не и в помине е есть физлица, сотрудники и аккаунты которые через три жопы связаныы, то на каком синатксисетут писать селекты в файлах маппинга?

Дошло... я думал ты о переносе с одной СУБД на другую говоришь, а оказывается сами базы разные. В таком случае решение с XML или еще каким файлом с запросами (ну или prepared statement'ами) для каждого действия выглядит наиболее простым решением...

gods-little-toy ★★★
()
Ответ на: комментарий от Legioner

а как у этих фреймворков со сложными запросами? До сих пор весь код с фреймворками который я видел, имел два вида болезней 1) вместо писания запросов на декларативном SQL-e с реляциоными операциями, их приходится писать в императивном стиле на Java (ну или что там) над объектами родного языка. Получается медленно и глюкаво.

2) Приходится писать на фреймворковом "языке", который на порядок хуже самых ужасных диалектов SQL-я.

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

фот файл конфигурации мапинга этого фремворка:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
  PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
  "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="Person">
   <!-- Use primitive wrapper type (e.g. Integer) as parameter and allow results to
       be auto-mapped results to Person object (JavaBean) properties -->
   <select id="getPerson" parameterClass=”int” resultClass="examples.domain.Person">
         SELECT
                  PER_ID                    as id,
                  PER_FIRST_NAME            as firstName,
                  PER_LAST_NAME             as lastName,
                  PER_BIRTH_DATE            as birthDate,
                  PER_WEIGHT_KG             as weightInKilograms,
                  PER_HEIGHT_M              as heightInMeters
         FROM PERSON
         WHERE PER_ID = #value#
   </select>
   <!-- Use Person object (JavaBean) properties as parameters for insert. Each of the
       parameters in the #hash# symbols is a JavaBeans property. -->
   <insert id="insertPerson" parameterClass="examples.domain.Person">
         INSERT INTO
         PERSON (PER_ID, PER_FIRST_NAME, PER_LAST_NAME,
                    PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M)
         VALUES (#id#, #firstName#, #lastName#,
                   #birthDate#, #weightInKilograms#, #heightInMeters#)
   </insert>
   <!-- Use Person object (JavaBean) properties as parameters for update. Each of the
       parameters in the #hash# symbols is a JavaBeans property. -->
   <update id="updatePerson" parameterClass="examples.domain.Person">
         UPDATE PERSON
         SET PER_FIRST_NAME = #firstName#,
              PER_LAST_NAME = #lastName#, PER_BIRTH_DATE = #birthDate#,
              PER_WEIGHT_KG = #weightInKilograms#,
              PER_HEIGHT_M = #heightInMeters#
         WHERE PER_ID = #id#
   </update>
   <!-- Use Person object (JavaBean) “id” properties as parameters for delete. Each of the
       parameters in the #hash# symbols is a JavaBeans property. -->
   <delete id="deletePerson" parameterClass="examples.domain.Person">
         DELETE PERSON
         WHERE PER_ID = #id#
   </delete>
</sqlMap>

то что нужно, есть конечно маленький касяк при апдейте на первый взгляд проапдейтятся все поля даже если это и не нужно, но поглядим может это и не обязятельно.

wfrr ★★☆
() автор топика
Ответ на: комментарий от gods-little-toy

по первому случаю добавить в хмл запрос возвращающий integer, а по второму написать в хмл соотв запрос, или заюзать динамический, собстно у меня задача перенести запросы из кода в хмл, что сей фреймвок разумно решает, погуглив я узрел что можно и апдейт запрос настроить так чтобы он не апдейтил не установленные поля.

wfrr ★★☆
() автор топика

хранимые процедуры/функции?

syscall
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.