powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Web-приложение, структура... что изменить, сделать проще, понятнее?
25 сообщений из 80, страница 2 из 4
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39594285
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выкинуть нахер жаву :)

И тогда будет вот это (это лишь один из вариантов, код руби, но есть и другие альтернативе если руби не нравится).

Код: ruby
1.
2.
3.
4.
5.
6.
class User
  include MongoMapper::Document

  key :id,   Integer
  key :name, String
end



Вместо этой портянки

Код: 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.
48.
49.
@Entity
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof User)) {
            return false;
        }
        User other = (User) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "src.User[ id=" + id + " ]";
    }
}
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39594294
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,
Теперь на хибер API дай и удивись)
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39594562
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
private,

А можно писать так
Код: java
1.
2.
3.
4.
5.
6.
7.
@Entity
data class(
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    var id: Int? = null,
    var name: String? = null
)



При этом можно использовать все библиотеки и фреймворки Java

<:o)
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39594881
private
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно - на многих языках можно создавать компактно и просто. Например жаваскрипт современный практически не уступает руби по компактности и мощности, а с ТайпСкриптом даже еще и надежней становится с типами. И котлин тоже неплох.

Но почему-то весь реальный код на жава (и котлин там-же) - это портянки как в примере выше. Вот реально не найти на гитхабе проекта на жаве где бы

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

Вот даже в твоем примере, смотри, можно его улучшить
Код: java
1.
2.
3.
4.
5.
6.
@Entity
data class(
  @Id @GeneratedValue(strategy = GenerationType.AUTO)
  var id:   Int?    = null,
  var name: String? = null
)



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

В этом проблема, жава проекты и жава код - это какая-то мазня на которую неприятно смотреть. Как боливудские фильмы - вроде сюжет тот-же, но не то.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39594893
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateВ этом проблема, жава проекты и жава код - это какая-то мазня на которую неприятно смотреть.Нехватка синтаксического сахара порождает boilerplate ©
privateКак боливудские фильмы - вроде сюжет тот-же, но не то.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39594908
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
privateНо нет, ты даже не потрудился поставитьты сам трудился?
Нафига ты вывалил код первый попавшийся?
Я согласен что java многословен, но сравнивать с js глупо.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602126
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спустя две недели удалось вернуться к проекту, не то, чтобы работы куча, а просто как-то отвлёкся ))
Два дня назад решил-таки подключить Spring Data JPA и... провозился 1.5 дня с чтением документации и стековерфлоу, потому как я не понимал, почему везде в книгах и в доках интерфейс @Autowired без реализации, а у меня всё то же самое и выдает ошибку.
В итоге на одном из форумов увидел, что JPA 2+ требует Spring 5-й версии, а я юзал 4-й.

теперь такие версии подключил и всё взлетело
Код: 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.
         <properties>
               <spring.version>5.0.3.RELEASE</spring.version>
        </properties>

       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.0.3.RELEASE</version>
        </dependency>


Код: java
1.
2.
3.
4.
5.
import org.springframework.data.repository.CrudRepository;
import java.util.List;
public interface UserRepository extends CrudRepository<User, Integer> {
    List<User> findByName(String name);
}


Над этим текстом код репозитория, а теперь вот такой вопрос, если я, захочу использовать, добавить свои сигнатуры методов с именованием не аля findPhoneNumber(String phoneNumber), который по имени метода, вроде как должен построить автоматом запрос, хотя я не уверен из-за кемелКейса в имени метода... А что-то типа getUserByHisName() имя так себе, но не смог ничего прямо сейчас придумать :)
Получается, что если спринг не сможет сгенерить запрос, то надо где-то его реализацию сделать, правильно?

Сейчас у меня в контроллере указано так:
Код: java
1.
2.
    @Autowired
    private UserRepository userRepository;


ну и метод, какой-никакой)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    @RequestMapping(value = "/usersSData", method = RequestMethod.GET)
    @ResponseBody
    public List<User> getUserWithSpringData(@RequestParam(value = "userName", required = false) String name) {
        userList.clear();
        userList = userRepository.findByName(name);
        for (User u : userList) {
            Integer id = (Integer) u.getId();
            String userName = (String) u.getName();
            log.info("id:" + id + ", name:" + userName);
        }
        return userList;
    }


имя такое, потому что тут же в методе используются варианты для REST запросов. Через Criteria и просто через
Код: java
1.
Query q = em.createQuery("select u from User as u");



Должен ли я теперь создать отдельный класс аля UserDao, затем добавить его реализацию UserDaoImpl и использовать именно её...
Или же, есть какой-то вариант, использовать всё тот же интерфейс без явной реализации UserRepository, но как, кажется это нереально?
Как бы это всё покрасивше сделать?
Спасибо :)

п.с. HATEOAS посмотрел, попозже, возможно, добавлю, пока разберусь с Spring Data :)
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602131
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123NixicА что, получается, что либо маппинг сущностей в БД, либо Spting Data? Одно исключает другое?да.
Выбирай.
Золотой пули нету.
Кстати, я тут это... у меня и то и то используется :) То есть я могу смапить всё что есть и одновременно юзать Spring Data.
Правда тут получается что у меня в двух местах сейчас прописана EntityManagerFactory:

в файле с настройками и бинами
и
в так называемом классе HibernateUtil где EntityManagerFactory создается на основании persistence.xml

ладно хоть и там и там датасорс подтягивается через jndi из томката.
Не знаю, насколько это кашерно, но работает...
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602138
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicНе знаю, насколько это кашерно, но работает...какой смысл на двух стульях сидеть?
Выбери где меньше кода и закрывай тему.
Тема то про выбор, а не написание проекта.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602185
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123NixicНе знаю, насколько это кашерно, но работает...какой смысл на двух стульях сидеть?
Выбери где меньше кода и закрывай тему.
Тема то про выбор, а не написание проекта.
Просто я люблю сначала всех посмотреть)
И как понять, где меньше кода при определенных потребностях, если не пробовать писать проект.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602187
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Сейчас приведи код сюда со всеми конфигами спринг и без спринга хибер api.
Результат не виден.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602262
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
persistence.xml
Код: 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.
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
             http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
             version="2.1">

    <persistence-unit name="PU" transaction-type="RESOURCE_LOCAL">
        <!--/////// это юзаем когда создаем entityManagerFactory.createEntityManager(); из HibernateUtil -->
        <!--<non-jta-data-source>java:comp/env/jdbc/postgres</non-jta-data-source>-->
        <!-- а если нужны логи...-->
        <non-jta-data-source>java:comp/env/jdbc/postgresLogged</non-jta-data-source>
        <!--///////-->
        <properties>

            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/> <!-- DB Dialect -->
            <property name="hibernate.hbm2ddl.auto" value="update" /> <!-- create / create-drop / update -->
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.physical_naming_strategy" value="com.opalev.config.PhysicalNamingStrategyImpl"/>

            <property name="hibernate.jdbc.lob.non_contextual_creation" value="true"/>
        </properties>
    </persistence-unit>

</persistence>


pom.xml
Код: xml
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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.opalev</groupId>
    <artifactId>ph</artifactId>
    <packaging>war</packaging>
    <version>3.0-SNAPSHOT</version>

    <properties>
        <hibernate.version>5.2.12.Final</hibernate.version>
        <spring.version>5.0.3.RELEASE</spring.version>
        <log4j.version>1.2.17</log4j.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java-version>1.8</java-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.0.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.3</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>

        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1</version>
        </dependency>

        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1202-jdbc42</version>
            <!--версия 9.4-1202-jdbc42 подходит для postgres 10.1 jdk 1.8 -->
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.2.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-digester/commons-digester -->
        <dependency>
            <groupId>commons-digester</groupId>
            <artifactId>commons-digester</artifactId>
            <version>2.1</version>
        </dependency>

        <!-- Log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <!--<dependency>-->
        <!--<groupId>org.slf4j</groupId>-->
        <!--<artifactId>slf4j-api</artifactId>-->
        <!--<version>1.7.25</version>-->
        <!--</dependency>-->
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
            <scope>compile</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.googlecode.log4jdbc/log4jdbc -->
        <dependency>
            <groupId>com.googlecode.log4jdbc</groupId>
            <artifactId>log4jdbc</artifactId>
            <version>1.2</version>
        </dependency>


        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.20</version>
            <scope>provided</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>23.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.4</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>${java-version}</source>
                    <target>${java-version}</target>
                    <!--<compilerArgument>-Xlint:all</compilerArgument>-->
                    <compilerArgument>-Xlint:-processing</compilerArgument>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>


WebConfig.java
Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

@Configuration
@EnableWebMvc
@ComponentScan("com.opalev")
@EnableJpaRepositories(basePackages = "com.opalev", entityManagerFactoryRef = "emf")
@Log4j
public class WebConfig extends WebMvcConfigurerAdapter {


    @Autowired
    private Environment environment;
    @Autowired
    private ApplicationContext applicationContext;
    private static DataSource dataSource;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/WEB-INF/**").addResourceLocations("");
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
//        registry.addResourceHandler("/bootstrap/**").addResourceLocations("/resources/");
    }

    @Bean
    public InternalResourceViewResolver setupViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Bean
    public HibernateUtil setupPostProcessor() {
        return new HibernateUtil();
    }

    @Bean
    public DataSource dataSource() throws NamingException {
        if (dataSource == null) {
            try {
                Context ctx = new InitialContext();
//                dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/postgres");
                dataSource = (DataSource) ctx.lookup("java:comp/env/jdbc/postgresLogged"); // если хотим логирование log4jdbc, т.е. для дева.
            } catch (NamingException e) {
                log.error("Хм.. ошибка какая-то: " + e);
            }
        }
        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean emf() throws NamingException {
        LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
        emf.setDataSource(dataSource());
        emf.setPersistenceUnitName("PU");
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(true);
        hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.PostgreSQL95Dialect");
        emf.setJpaVendorAdapter(hibernateJpaVendorAdapter);
        emf.setPackagesToScan("com.opalev");
        return emf;
    }

}



HibernateUtil.java
Код: 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.
import org.springframework.context.annotation.Bean;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.criteria.CriteriaBuilder;
import java.io.Serializable;

public class HibernateUtil implements Serializable {

    private static final long serialVersionUID = 1L;
    private static EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("PU");

    @Bean
    public static EntityManager getEntityManager() {
        return entityManagerFactory.createEntityManager();
    }

    @Bean
    public static CriteriaBuilder getCriteriaBuilder() {
//        emf = Persistence.createEntityManagerFactory("PU");
        CriteriaBuilder builder = entityManagerFactory.getCriteriaBuilder();
        return builder;
    }
}


User.java
Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
import lombok.EqualsAndHashCode;

import javax.persistence.*;
import java.io.Serializable;

@Entity
@EqualsAndHashCode
@Table(name = "users")
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String name;
    private String email;
    private String homeAddress;

    public User() {
    }

    public User(String name) {
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getHomeAddress() {
        return homeAddress;
    }

    public void setHomeAddress(String homeAddress) {
        this.homeAddress = homeAddress;
    }

    @Override
    public String toString() {
        return "src.User[ id=" + id + " ]";
    }
}


UserRepository.java
Код: java
1.
2.
3.
4.
5.
6.
import org.springframework.data.repository.CrudRepository;

import java.util.List;
public interface UserRepository extends CrudRepository<User, Integer> {
    List<User> findByName(String name);
}



UserController.java
Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
import com.opalev.config.HibernateUtil;
import lombok.extern.log4j.Log4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.ArrayList;
import java.util.List;

@Controller
@Log4j
public class UserController {

    private List<User> userList = new ArrayList<>();

    @Autowired
    private UserRepository userRepository;

    @RequestMapping(value = "/usersCR", method = RequestMethod.GET)
    @ResponseBody
    public List<User> getUsersWithCriteria() {

        log.info("подтянем юзеров используя Criteria ");
        EntityManager em = HibernateUtil.getEntityManager();
        CriteriaBuilder builder = HibernateUtil.getCriteriaBuilder();
        CriteriaQuery<User> criteriaQuery = builder.createQuery(User.class);
        Root<User> usersRoot = criteriaQuery.from(User.class);
        criteriaQuery.select(usersRoot);
        criteriaQuery.where(builder.like(usersRoot.get("name"), "%admin%"));
        criteriaQuery.orderBy(builder.desc(usersRoot.get("id")));

        userList.clear();
        userList = em.createQuery(criteriaQuery).getResultList();
        log.info("userList: " + userList);
        for (User u : userList) {
            Integer id = (Integer) u.getId();
            String name = (String) u.getName();
            log.info("id:" + id + ", name:" + name);
        }
        return userList;
    }

    @RequestMapping(value = "/usersCQ", method = RequestMethod.GET)
    @ResponseBody
    public List<User> getUsersWithEntityManager() {
        System.out.println("подтянем юзеров используя createQuery ");
        EntityManager em = HibernateUtil.getEntityManager();
        try {
            Query q = em.createQuery("select u from User as u order by u.id desc");
            userList.clear();
            userList = q.getResultList();
            log.info("userList: " + userList.size());
            return userList;
        } catch (NoResultException ex) {
            log.info("exception: " + ex);
            return null;
        } finally {
            em.close();
        }
    }

    @RequestMapping(value = "/usersSData", method = RequestMethod.GET)
    @ResponseBody
    public List<User> getUserWithSpringData(@RequestParam(value = "userName", required = false) String name) {
        userList.clear();
        userList = userRepository.findByName(name);
        for (User u : userList) {
            Integer id = (Integer) u.getId();
            String userName = (String) u.getName();
            log.info("id:" + id + ", name:" + userName);
        }
        return userList;
    }

}



context.xml в Tomcat'е 9-м в папке conf
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
	 <Resource name="jdbc/postgresLogged" auth="Container"
         type="javax.sql.DataSource" driverClassName="net.sf.log4jdbc.DriverSpy"
         url="jdbc:log4jdbc:postgresql://127.0.0.1:5432/ph"
         username="user" password="12345678" maxIdle="10"/>
		 
	<Resource name="jdbc/postgres" auth="Container"
         type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
         url="jdbc:postgresql://127.0.0.1:5432/ph"
         username="user" password="12345678" maxIdle="10"/>



Вроде всё
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602268
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Большая работа).
Без спринга, на хибере вроде в 2 раза меньше кода?
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602275
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Если для вывода фио юзверя надо 1500 строк руками, фигово ты выбирал.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602285
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне просто в свободное время нужно было попробовать некоторые варианты, которые вдруг когда-нибудь понадобятся.
Ну и плюс, можно сказать потом, что да, работал с этим.
Ну и второй раз разбираться, даже спустя время или даже ВРЕМЯ)) все равно легче, тем более если будет лежать пример использования в своих заначках.

Про большую работу я понял, что сарказм) Но с чего-то надо начинать.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602319
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
Ну, для себя это понятно.
А для других показал ужасы java.
На jdbc 3 !!!!! строки кода.
У тебя 1500 строк, причем ручного кода.
Удачи!
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602338
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nixic,
огромное спасибо!!
теперь у меня есть ссылка для демонстрации разницы моего подхода и "стандартного"
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602344
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
Он пока троечник))). А ты?
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602357
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123вадя,
Он пока троечник))). А ты?у меня хватает мозгов чтоб не делать такое, а заранее представить это. и оценить время и затраты.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602365
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяменя хватает мозгов-1
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602378
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не используйте интерфейсы для бинов. Они не нужны. Интерфейсы нужны были в старых EJBях ибо прокси создавались через java.lang.reflect.Proxy. В спринге этого не требуется, можно инжектить сразу реализации.

Уберите гетеры и сетеры из ентитей. Они там не нужны - вы всё равно не будете переопределять логику внутри.
Вообще используйте гетеры и сетеры по минимуму - антипаттерн. Инжекте сразу в приватные поля.

Названия пакетов можно сократить если вы не собираете библиотеки.

Спринг дружит с хибернейтом, есть хелперы.

Не юзайте criteria api - код превращается в месиво и сложно отлаживать запросы в БД. Лучше создавайте naming queries.

Не переопределяйте equals и hashCode без надобности.

Функциональная декомпозиция лучше послойной.

Тесты пишутся в директории src/main/test а код в src/main/java.

Если юзаете автосканинг, то будет долго стартовать.
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602388
Nixic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, учту, кое что уже поправил, в частности
unregesteredТесты пишутся в директории src/main/test а код в src/main/java.
сейчас так, а тесты не пишу, пока
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602390
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В идее можно настроить чтобы *.iml были внутри .idea директории
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602408
unregestered
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NixicPetro123Nixic,
Чет я не понял.
Если хиберAPI то будет маппинг и session.saveORUpdare
Или ,springData?
По идее, я хотел бы создавать свои сущности, не заботиться при этом о БД, и вообще поменьше в нее заходить по ходу разработки.
Но в дальнейшем, возможно, эта необходимость отпадет и поля с таблицами будут добавляться в БД руками.
Вообще, я так понимаю, нужно смотреть в сторону Spring Data, уже открыл пару ссылок :)

А что, получается, что либо маппинг сущностей в БД, либо Spting Data? Одно исключает другое?

Никогда не создавайте ничего руками. Все sql-скрипты должны быть упорядочены и храниться в репозитории
...
Рейтинг: 0 / 0
Web-приложение, структура... что изменить, сделать проще, понятнее?
    #39602411
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unregesteredВсе sql-скриптыпока нет необходимости писать select вообще.
Так?
...
Рейтинг: 0 / 0
25 сообщений из 80, страница 2 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Web-приложение, структура... что изменить, сделать проще, понятнее?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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