spring-boot
स्प्रिंग बूट + हाइबरनेट + वेब UI (थाइमेल्फ)
खोज…
परिचय
यह धागा हाइबरनेट और थाइमाइलफ टेम्पलेट इंजन के साथ स्प्रिंग बूट एप्लिकेशन बनाने के तरीके पर केंद्रित है।
टिप्पणियों
इसके अलावा Thymeleaf प्रलेखन की जाँच करें
मावेन निर्भरता
यह उदाहरण 1.5.1 बूट पर आधारित है। निम्नलिखित निर्भरताओं के साथ:
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- H2 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
इस उदाहरण में हम स्प्रिंग बूट जेपीए, थाइमेल्फ और वेब शुरुआत का उपयोग करने जा रहे हैं। मैं लोम्बर्स उत्पन्न करने के लिए लोम्बोक का उपयोग कर रहा हूं और आसानी से निपटता हूं लेकिन यह अनिवार्य नहीं है। H2 डेटाबेस को कॉन्फ़िगर करने में आसान इन-मेमोरी के रूप में उपयोग किया जाएगा।
हाइबरनेट कॉन्फ़िगरेशन
पहले, हाइबरनेट को सही ढंग से सेटअप करने के लिए हमें जो आवश्यक है उसका अवलोकन करने देता है।
-
@EnableTransactionManagement
और@EnableJpaRepositories
- हम लेन-देन प्रबंधन चाहते हैं और स्प्रिंग डेटा रिपॉजिटरी का उपयोग करते हैं। -
DataSource
- अनुप्रयोग के लिए मुख्य डेटा स्रोत। इस उदाहरण के लिए स्मृति h2 का उपयोग करना। -
LocalContainerEntityManagerFactoryBean
-HibernateJpaVendorAdapter
का उपयोग करके वसंत इकाई प्रबंधक कारखाना। -
PlatformTransactionManager
-@Transactional
ट्रांसेक्शनल एनोटेट घटकों के लिए मुख्य लेनदेन प्रबंधक।
विन्यास फाइल:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.example.repositories")
public class PersistanceJpaConfig {
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("org.h2.Driver");
dataSource.setUrl("jdbc:h2:mem:testdb;mode=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
dataSource.setUsername("sa");
dataSource.setPassword("");
return dataSource;
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan(new String[] { "com.example.models" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
return em;
}
@Bean
public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory, DataSource dataSource) {
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(entityManagerFactory.getObject());
tm.setDataSource(dataSource);
return tm;
}
Properties additionalProperties() {
Properties properties = new Properties();
properties.setProperty("hibernate.hbm2ddl.auto", "update");
properties.setProperty("hibernate.dialect", "org.hibernate.dialect.H2Dialect");
return properties;
}
}
संस्थाओं और प्रस्तावों
एक साधारण इकाई: हमारे लिए @Getter
और @Setter
लिए @Setter
@Getter
और @Setter
एनोटेशन का उपयोग करना
@Entity
@Getter @Setter
public class Message {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
private String message;
}
मैं गेटर्स और सेटर जनरेट करने के लिए UUID आधारित आईडी और लोमबॉक का उपयोग कर रहा हूं।
उपरोक्त इकाई के लिए एक सरल भंडार:
@Transactional
public interface MessageRepository extends CrudRepository<Message, String> {
}
रेस्पिरेटरी पर अधिक: स्प्रिंग डेटा डॉक्स
सुनिश्चित करें कि निकाय एक पैकेज में रहते हैं, जो em.setPackagesToScan
( LocalContainerEntityManagerFactoryBean
सेम में परिभाषित) और basePackages
में मैप किए गए पैकेज में basePackages
( @EnableJpaRepositories
एनोटेशन में परिभाषित) में मैप किया गया है।
Thymeleaf Resources और स्प्रिंग नियंत्रक
Thymeleaf टेम्पलेट्स को उजागर करने के लिए हमें नियंत्रकों को परिभाषित करने की आवश्यकता है।
उदाहरण:
@Controller
@RequestMapping("/")
public class MessageController {
@Autowired
private MessageRepository messageRepository;
@GetMapping
public ModelAndView index() {
Iterable<Message> messages = messageRepository.findAll();
return new ModelAndView("index", "index", messages);
}
}
यह सरल नियंत्रक MessageRepository
इंजेक्ट MessageRepository
और सभी संदेशों को index.html
नाम की एक टेम्प्लेट फ़ाइल में देता है, जो src/main/resources/templates
MessageRepository
src/main/resources/templates
में रहता है और अंत में इसे /index
पर एक्सपोज़ करता है।
उसी तरह, हम अन्य टेम्पलेट्स को टेम्पलेट फ़ोल्डर में रख सकते हैं (डिफ़ॉल्ट रूप से वसंत द्वारा src/main/resources/templates
), उनके लिए एक मॉडल पास करें और उन्हें क्लाइंट को सेवा दें।
अन्य स्थैतिक संसाधनों को निम्नलिखित फ़ोल्डरों में से एक में रखा जाना चाहिए, जो स्प्रिंग बूट में डिफ़ॉल्ट रूप से सामने आते हैं:
/META-INF/resources/
/resources/
/static/
/public/
Thymeleaf index.html
उदाहरण:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head th:fragment="head (title)">
<title th:text="${title}">Index</title>
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}" href="../../css/bootstrap.min.css" />
</head>
<body>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Thymeleaf</a>
</div>
</div>
</nav>
<div class="container">
<ul class="nav">
<li><a th:href="@{/}" href="messages.html"> Messages </a></li>
</ul>
</div>
</body>
</html>
-
bootstrap.min.css
src/main/resources/static/css
फ़ोल्डर में है। आप सापेक्ष पथ का उपयोग करके अन्य स्थिर संसाधनों को प्राप्त करने के लिए सिंटैक्स@{}
का उपयोग कर सकते हैं।