powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Генератор кода
14 сообщений из 14, страница 1 из 1
Генератор кода
    #38585921
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!
Я тут в академических целей хочу написать что то вроде hibernate, но свой. И мне нужен механизм генерации классов(*.java) по метаданным из базы данных. Если ли какие библиотеки или фреймворки для генерации кода? или все пользуются StringBuilder и пишут код напрямую.
...
Рейтинг: 0 / 0
Генератор кода
    #38586005
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть куча генераторов байт-кода. Asm, например популярный. BCEL даже встроен в JDK, но как публичный API, вроде не очень доступен.
...
Рейтинг: 0 / 0
Генератор кода
    #38586048
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Мне не нужен байт код, мне нужны исходники. В jooq есть такой генератор, генерирует классы по таблицам, мне нужно что то типа такого.
Сейчас вижу простой вариант, делать через StringBulder и просто сохранять в файл с расширением *.java. Возможно есть более продвинутый метод?
...
Рейтинг: 0 / 0
Генератор кода
    #38586054
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Генератор кода
    #38586066
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
например, реверс в HibernateTools собирает исходники с помощью StringBuilder.
Я бы, в свою очередь, посоветовал следующее: если база документирована с помощью какого-то case инструмента (например, erwin, power designer), то можно воспользоваться встроенными средствами кодогенерации. В хорошо документированной схеме, как правило, метаданных с избытком.
...
Рейтинг: 0 / 0
Генератор кода
    #38586177
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraнапример, erwin
он хочет Java код.
А эти IDE генерят SQL код
...
Рейтинг: 0 / 0
Генератор кода
    #38586205
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда мне такое понадобилось, я использовал Freemarker.
...
Рейтинг: 0 / 0
Генератор кода
    #38586213
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. SakКогда мне такое понадобилось, я использовал Freemarker.
Freemarker же под HTML за точен.
...
Рейтинг: 0 / 0
Генератор кода
    #38586242
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ivanraнапример, erwin
он хочет Java код.
А эти IDE генерят SQL код
В erwin есть пре- пост- скрипт, в котором можно сгенерировать что угодно, хоть классы, хоть готовые формы. Кроме того, саму схему можно сохранить в xml формате, и обработать этот xml.
По-моему, что-то подобное есть и в PD
...
Рейтинг: 0 / 0
Генератор кода
    #38586268
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexander A. SakКогда мне такое понадобилось, я использовал Freemarker.
Freemarker же под HTML за точен.

Да нет, не обязательно.
http://freemarker.org/ FreeMarker is a "template engine"; a generic tool to generate text output (anything from HTML to autogenerated source code) based on templates.
...
Рейтинг: 0 / 0
Генератор кода
    #38586278
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имею ввиду что синтаксис у него XML/HTML-ный.
http://freemarker.org/docs/dgui_template_overallstructure.html
...
Рейтинг: 0 / 0
Генератор кода
    #38586291
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и ладно. Первый вариант на конкатенациях строк был настолько страшен, что после него шаблоны Freemarker-а выглядят очень даже ничего. Тексты генерятся -- "а мне больше и не надо".
...
Рейтинг: 0 / 0
Генератор кода
    #38586364
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraВ erwin есть пре- пост- скрипт,
IMHO это не генератор, т.к. там нет поддержки Java синтаксиса.
Или я не понял. Там что есть "Выбрать ЯП --> Delphi\Java\C#\VBA\Пайтон.. --> сгенерил класс"?
...
Рейтинг: 0 / 0
Генератор кода
    #38586440
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123ivanraВ erwin есть пре- пост- скрипт,
IMHO это не генератор, т.к. там нет поддержки Java синтаксиса.
Или я не понял. Там что есть "Выбрать ЯП --> Delphi\Java\C#\VBA\Пайтон.. --> сгенерил класс"?
Нет, шаблоны надо писать самому, и это напоминает шаболоны для тех средств, которые приведены выше.
Вот, например, шаблон, выполнение которого приводит к созданию набора классов в заранее созданном каталоге C:\Workspaces\generate\serialize
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
%Decl(P,%:dummy)
%Decl(N,_)

%ForEachTable() {
%=(N,%Substitute(%TableName,_,%:P))
%File("C:\Workspaces\generate\serialize\%:N.java") {

import org.w3c.dom.Element;

import my.schema.db.%:N;

/**
 * %EntityName() <-> %TableName
 * @author ErWin - %TemplateName - %Datetime
 */
public class %Concat(%:N,Serializer) extends CustomSerializer {

	public %Concat(%:N,Serializer)(CustomSerializer parentSerializer,
			Element parentElement) {
		super(parentSerializer, parentElement);
	}

	public static String ELEMENT_NAME = "%Upper(%TableName)";

	@Override
	protected String getElementName(){
		return ELEMENT_NAME;
	}

	public void serialize(%:N object) {
		createElement(ELEMENT_NAME);

		%ForEachColumn() {
		%=(N,%Substitute(%ColName,_,%:P))

		%Switch ("%Substr(%ColumnDatatype,1,7)") {
			%Choose("NUMBER") {addChild("%:N", nFormat(%Concat(object.get,%:N)()));}
			%Choose("NUMBER(") {addChild("%:N", nFormat(%Concat(object.get,%:N)()));}
			%Choose("INTEGER") {addChild("%:N", nFormat(%Concat(object.get,%:N)()));}
			%Choose("SMALLIN") {addChild("%:N", bFormat(%Concat(object.get,%:N)()));}
			%Choose("NUMERIC") {addChild("%:N", nFormat(%Concat(object.get,%:N)()));}
			%Choose("TimeSta") {addChild("%:N", dFormat(%Concat(object.get,%:N)()));}
			%Choose("DATE") {addChild("%:N", dFormat(%Concat(object.get,%:N)()));}
			%Choose("BLOB") {addChild("%:N", blFormat(%Concat(object.get,%:N)()));}
			%Default {addChild("%:N", %Concat(object.get,%:N)());}}}
	}
}}}


пример сгенерированного класса:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
import org.w3c.dom.Element;

import my.schema.db.AuditNote;

/**
 * Проверка <-> Audit_Note
 * @author ErWin - сериализация_новая - Fri Mar 14 14:44:07 2014
 */
public class AuditNoteSerializer extends CustomSerializer {

	public AuditNoteSerializer(CustomSerializer parentSerializer,
			Element parentElement) {
		super(parentSerializer, parentElement);
	}

	public static String ELEMENT_NAME = "AUDIT_NOTE";

	@Override
	protected String getElementName(){
		return ELEMENT_NAME;
	}

	public void serialize(AuditNote object) {
		createElement(ELEMENT_NAME);

		
		addChild("ID", nFormat(object.getID()));
		addChild("NextID", nFormat(object.getNextID()));
		addChild("UserName", object.getUserName());
		addChild("AuditTime", dFormat(object.getAuditTime()));
		addChild("StageID", nFormat(object.getStageID()));
		addChild("ObjectName", object.getObjectName());
		addChild("ObjectLName", object.getObjectLName());
		addChild("ObjectID", nFormat(object.getObjectID()));
		addChild("RemarkCount", nFormat(object.getRemarkCount()));
		addChild("IsOpen", nFormat(object.getIsOpen()));
	}
}


Встроенный скриптовый язык позволяет вытащить практически все метаданные из схемы. Таким образом, достигается сколь угодно полное соответствие проектной документации и кода )).
Идея, в общем, таже самая, что и в первоначальном вопросе, только не нужен словарь в базе данных: рисуем и вводим все метаданные в case, и работа зря не пропадает - на выходе имеем не только ddl, но и заготовку для приложения
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Генератор кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]