Advertisement
Guest User

Untitled

a guest
May 11th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.72 KB | None | 0 0
  1. package br.com.agenda.controllers;
  2.  
  3. import org.springframework.stereotype.Controller;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import org.springframework.web.bind.annotation.RequestMethod;
  6. import org.springframework.web.servlet.ModelAndView;
  7.  
  8. import br.com.agenda.services.ContactService;
  9.  
  10. @Controller
  11. @RequestMapping("/contact")
  12. public class ContactController {
  13.  
  14. @RequestMapping(method=RequestMethod.GET)
  15. public ModelAndView listContact() {
  16. ContactService contactService = new ContactService();
  17. ModelAndView modelAndView = new ModelAndView("contacts");
  18. modelAndView.addObject("contacts", contactService.listAll());
  19. return modelAndView;
  20. }
  21. }
  22.  
  23. package br.com.agenda.interfaces;
  24.  
  25. import java.util.List;
  26. import br.com.agenda.models.Contact;
  27.  
  28. public interface IContactService {
  29.  
  30. public void save(Contact contact);
  31.  
  32. public Contact searchId(Integer id);
  33.  
  34. public List<Contact> listAll();
  35.  
  36. public List<Contact> listSpecific(String field, String value);
  37. }
  38.  
  39. package br.com.agenda.services;
  40.  
  41. import java.util.List;
  42.  
  43. import org.springframework.beans.factory.annotation.Autowired;
  44.  
  45. import br.com.agenda.daos.ContactDAO;
  46. import br.com.agenda.interfaces.IContactService;
  47. import br.com.agenda.models.Contact;
  48.  
  49. public class ContactService implements IContactService {
  50.  
  51. @Autowired
  52. private ContactDAO contactDAO = new ContactDAO();
  53.  
  54. public void save(Contact contact) {
  55. contactDAO.save(contact);
  56. }
  57.  
  58. public Contact searchId(Integer id) {
  59. return contactDAO.search(id);
  60. }
  61.  
  62. public List<Contact> listAll() {
  63. return contactDAO.listAll();
  64. }
  65.  
  66. public List<Contact> listSpecific(String field, String value) {
  67. return null;
  68. }
  69. }
  70.  
  71. package br.com.agenda.daos;
  72.  
  73. import java.util.List;
  74. import javax.persistence.EntityManager;
  75. import javax.persistence.PersistenceContext;
  76. import javax.persistence.PersistenceException;
  77.  
  78. import org.springframework.stereotype.Repository;
  79.  
  80. import br.com.agenda.models.Contact;
  81.  
  82. @Repository
  83. public class ContactDAO {
  84.  
  85. @PersistenceContext
  86. private EntityManager manager;
  87.  
  88. public void save(Contact contact) {
  89. try {
  90. if (contact.getId() != null) {
  91. manager.persist(contact);
  92. } else {
  93. manager.merge(contact);
  94. }
  95. } catch(RuntimeException e) {
  96. System.out.println(e.getMessage());
  97. } catch(Exception e) {
  98. System.out.println(e.getMessage());
  99. }
  100. }
  101.  
  102. public Contact search(Integer id) {
  103. try {
  104. return manager.find(Contact.class, id);
  105. } catch(RuntimeException e) {
  106. System.out.print(e.getMessage());
  107. return null;
  108. } catch(Exception e) {
  109. System.out.println(e.getMessage());
  110. return null;
  111. }
  112. }
  113.  
  114. public List<Contact> listAll() {
  115. try {
  116. return manager
  117. .createQuery("select distinct(c) from tblContacts c join fetch c.phones", Contact.class)
  118. .getResultList();
  119. } catch(PersistenceException e) {
  120. System.out.println(e.getMessage());
  121. return null;
  122. }
  123. }
  124. }
  125.  
  126. package br.com.agenda.models;
  127.  
  128. import java.util.List;
  129.  
  130. import javax.persistence.Column;
  131. import javax.persistence.ElementCollection;
  132. import javax.persistence.Entity;
  133. import javax.persistence.GeneratedValue;
  134. import javax.persistence.GenerationType;
  135. import javax.persistence.Id;
  136. import javax.persistence.Table;
  137.  
  138. import org.hibernate.validator.constraints.NotBlank;
  139.  
  140. import br.com.agenda.models.Phone;
  141.  
  142. @Entity
  143. @Table(name="tblContacts")
  144. public class Contact {
  145.  
  146. @Id
  147. @GeneratedValue(strategy = GenerationType.IDENTITY)
  148. @Column(name="idContacts")
  149. private Integer id;
  150.  
  151. @NotBlank
  152. @Column(name="nameContacts")
  153. private String name;
  154.  
  155. @NotBlank
  156. @Column(name="emailContacts")
  157. private String email;
  158.  
  159. @ElementCollection
  160. private List<Phone> phones;
  161.  
  162. public void addPhone(Phone phone) {
  163. phones.add(phone);
  164. }
  165.  
  166. public List<Phone> getPhones() {
  167. return phones;
  168. }
  169.  
  170. public void setPhones(List<Phone> phones) {
  171. this.phones = phones;
  172. }
  173.  
  174. public Integer getId() {
  175. return id;
  176. }
  177.  
  178. public void setId(Integer id) {
  179. this.id = id;
  180. }
  181.  
  182. public String getName() {
  183. return name;
  184. }
  185.  
  186. public void setName(String name) {
  187. this.name = name;
  188. }
  189.  
  190. public String getEmail() {
  191. return email;
  192. }
  193.  
  194. public void setEmail(String email) {
  195. this.email = email;
  196. }
  197. }
  198.  
  199. package br.com.agenda.models;
  200.  
  201. import javax.persistence.Column;
  202. import javax.persistence.Embeddable;
  203. import javax.persistence.Entity;
  204. import javax.persistence.GeneratedValue;
  205. import javax.persistence.GenerationType;
  206. import javax.persistence.Id;
  207. import javax.persistence.Table;
  208.  
  209. import org.hibernate.validator.constraints.NotBlank;
  210.  
  211. @Entity
  212. @Table(name = "tblPhones")
  213. @Embeddable
  214. public class Phone {
  215.  
  216. @Id
  217. @GeneratedValue(strategy = GenerationType.IDENTITY)
  218. @Column(name="idPhones")
  219. private Integer id;
  220.  
  221. @NotBlank
  222. @Column(name="dddPhones")
  223. private Integer ddd;
  224.  
  225. @NotBlank
  226. @Column(name="numberPhones")
  227. private Integer number;
  228.  
  229. public Integer getDdd() {
  230. return ddd;
  231. }
  232.  
  233. public void setDdd(Integer ddd) {
  234. this.ddd = ddd;
  235. }
  236.  
  237. public Integer getNumber() {
  238. return number;
  239. }
  240.  
  241. public void setNumber(Integer number) {
  242. this.number = number;
  243. }
  244. }
  245.  
  246. type Exception report
  247.  
  248. message Request processing failed; nested exception is java.lang.NullPointerException
  249.  
  250. description The server encountered an internal error that prevented it from fulfilling this request.
  251.  
  252. exception
  253.  
  254. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
  255. org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
  256. org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
  257. javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
  258. org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
  259. javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
  260. org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  261. root cause
  262.  
  263. java.lang.NullPointerException
  264. br.com.agenda.daos.ContactDAO.listAll(ContactDAO.java:52)
  265. br.com.agenda.services.ContactService.listAll(ContactService.java:23)
  266. br.com.agenda.controllers.ContactController.listContact(ContactController.java:19)
  267. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  268. sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  269. sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  270. java.lang.reflect.Method.invoke(Method.java:498)
  271. org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:220)
  272. org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
  273. org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
  274. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
  275. org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
  276. org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
  277. org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
  278. org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
  279. org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
  280. org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
  281. javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
  282. org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
  283. javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
  284. org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  285. note The full stack trace of the root cause is available in the Apache Tomcat/8.5.11 logs.
  286.  
  287. package br.com.agenda.conf;
  288.  
  289. import org.springframework.context.annotation.Bean;
  290. import org.springframework.context.annotation.ComponentScan;
  291. import org.springframework.context.annotation.Configuration;
  292. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
  293. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  294. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  295. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  296. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  297. import br.com.agenda.controllers.IndexController;
  298. import br.com.agenda.daos.ContactDAO;
  299.  
  300. @EnableWebMvc
  301. @Configuration
  302. @ComponentScan(basePackageClasses={IndexController.class, ContactDAO.class})
  303. public class AppWebConfiguration extends WebMvcConfigurerAdapter {
  304. //Configurado pasta raiz das viewers e o suffix .jsp para as mesmas que serão carregadas
  305. @Bean
  306. public InternalResourceViewResolver internalResourceViewResolver() {
  307. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  308. resolver.setPrefix("/WEB-INF/views/");
  309. resolver.setSuffix(".jsp");
  310. return resolver;
  311. }
  312.  
  313. @Override
  314. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  315. registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
  316. }
  317.  
  318. @Override
  319. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  320. configurer.enable();
  321. }
  322. }
  323.  
  324. package br.com.agenda.conf;
  325.  
  326. import java.util.Properties;
  327.  
  328. import javax.persistence.EntityManagerFactory;
  329. import javax.sql.DataSource;
  330. import org.springframework.context.annotation.Bean;
  331. import org.springframework.jdbc.datasource.DriverManagerDataSource;
  332. import org.springframework.orm.jpa.JpaTransactionManager;
  333. import org.springframework.orm.jpa.JpaVendorAdapter;
  334. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  335. import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  336. import org.springframework.transaction.PlatformTransactionManager;
  337. import org.springframework.transaction.annotation.EnableTransactionManagement;
  338.  
  339. @EnableTransactionManagement
  340. public class JPAConfiguration {
  341.  
  342. @Bean
  343. public LocalContainerEntityManagerFactoryBean entityManagerFactory()
  344. {
  345. LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
  346. em.setDataSource(dataSource());
  347.  
  348. em.setPackagesToScan(new String[] {"br.com.agenda.models"});
  349. JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
  350. em.setJpaVendorAdapter(vendorAdapter);
  351. em.setJpaProperties(additionalProperties());
  352.  
  353. return em;
  354.  
  355. }
  356.  
  357. @Bean
  358. public DataSource dataSource()
  359. {
  360. DriverManagerDataSource dataSource = new DriverManagerDataSource();
  361. dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  362. dataSource.setUrl("jdbc:mysql://localhost:3306/agenda");
  363. dataSource.setUsername("root");
  364. dataSource.setPassword("");
  365.  
  366. return dataSource;
  367. }
  368.  
  369. private Properties additionalProperties()
  370. {
  371. Properties properties = new Properties();
  372. properties.setProperty("hibernate.hbm2ddl.auto", "update");
  373. properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
  374. properties.setProperty("hibernate.show_sql", "true");
  375.  
  376. return properties;
  377. }
  378.  
  379. @Bean
  380. public PlatformTransactionManager transactionManager (EntityManagerFactory emf)
  381. {
  382. JpaTransactionManager transactionManager = new JpaTransactionManager();
  383. transactionManager.setEntityManagerFactory(emf);
  384. return transactionManager;
  385. }
  386. }
  387.  
  388. package br.com.agenda.conf;
  389.  
  390. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  391.  
  392. public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {
  393.  
  394. @Override
  395. protected Class<?>[] getRootConfigClasses()
  396. {
  397. return null;
  398. }
  399.  
  400. //definido de onde vira as cofiguracoes para rodar as classes
  401. @Override
  402. protected Class<?>[] getServletConfigClasses() {
  403. return new Class[]{AppWebConfiguration.class, JPAConfiguration.class};
  404. }
  405.  
  406. //indica a pasta raiz mappeando o servlet
  407. @Override
  408. protected String[] getServletMappings()
  409. {
  410. return new String[] {"/"};
  411. }
  412. }
  413.  
  414. @Service
  415. public class ContactService implements IContactService {
  416.  
  417. @Autowired
  418. private ContactDAO contactDAO;
  419.  
  420. //os seus métodos
  421. }
  422.  
  423. @Controller
  424. @RequestMapping("/contact")
  425. public class ContactController {
  426.  
  427. @Autowired
  428. private IContactService contactService;
  429.  
  430. @RequestMapping(method=RequestMethod.GET)
  431. public ModelAndView listContact() {
  432. ModelAndView modelAndView = new ModelAndView("contacts");
  433. modelAndView.addObject("contacts", contactService.listAll());
  434. return modelAndView;
  435. }
  436. }
  437.  
  438. <project xmlns="http://maven.apache.org/POM/4.0.0"
  439. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  440. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  441. http://maven.apache.org/maven-v4_0_0.xsd">
  442.  
  443. <modelVersion>4.0.0</modelVersion>
  444. <groupId>br.com.agenda</groupId>
  445. <artifactId>agenda</artifactId>
  446. <packaging>war</packaging>
  447. <version>0.0.1-SNAPSHOT</version>
  448. <name>agenda</name>
  449. <url>http://maven.apache.org</url>
  450.  
  451. <properties>
  452. <log4j2.version>2.7</log4j2.version>
  453. <org.springframework.version>4.3.4.RELEASE</org.springframework.version>
  454. </properties>
  455.  
  456. <dependencies>
  457. <dependency>
  458. <groupId>junit</groupId>
  459. <artifactId>junit</artifactId>
  460. <version>4.12</version>
  461. <scope>test</scope>
  462. </dependency>
  463.  
  464. <dependency>
  465. <groupId>org.springframework</groupId>
  466. <artifactId>spring-webmvc</artifactId>
  467. <version>${org.springframework.version}</version>
  468. </dependency>
  469.  
  470. <dependency>
  471. <groupId>org.springframework</groupId>
  472. <artifactId>spring-tx</artifactId>
  473. <version>${org.springframework.version}</version>
  474. </dependency>
  475.  
  476. <dependency>
  477. <groupId>org.springframework</groupId>
  478. <artifactId>spring-orm</artifactId>
  479. <version>${org.springframework.version}</version>
  480. </dependency>
  481.  
  482. <dependency>
  483. <groupId>org.hibernate</groupId>
  484. <artifactId>hibernate-entitymanager</artifactId>
  485. <version>5.2.5.Final</version>
  486. </dependency>
  487.  
  488. <dependency>
  489. <groupId>mysql</groupId>
  490. <artifactId>mysql-connector-java</artifactId>
  491. <version>5.1.39</version>
  492. </dependency>
  493.  
  494. <dependency>
  495. <groupId>org.apache.logging.log4j</groupId>
  496. <artifactId>log4j-api</artifactId>
  497. <version>${log4j2.version}</version>
  498. </dependency>
  499.  
  500. <dependency>
  501. <groupId>org.apache.logging.log4j</groupId>
  502. <artifactId>log4j-core</artifactId>
  503. <version>${log4j2.version}</version>
  504. </dependency>
  505.  
  506. <dependency>
  507. <groupId>org.apache.logging.log4j</groupId>
  508. <artifactId>log4j-jcl</artifactId>
  509. <version>${log4j2.version}</version>
  510. </dependency>
  511.  
  512. <dependency>
  513. <groupId>org.hibernate</groupId>
  514. <artifactId>hibernate-validator</artifactId>
  515. <version>5.4.0.Final</version>
  516. </dependency>
  517.  
  518. <dependency>
  519. <groupId>jstl</groupId>
  520. <artifactId>jstl</artifactId>
  521. <version>1.2</version>
  522. </dependency>
  523. </dependencies>
  524.  
  525. <build>
  526. <finalName>agenda</finalName>
  527. <pluginManagement>
  528. <plugins>
  529. <plugin>
  530. <groupId>org.apache.maven.plugins</groupId>
  531. <artifactId>maven-compiler-plugin</artifactId>
  532. <configuration>
  533. <source>1.8</source>
  534. <target>1.8</target>
  535. </configuration>
  536. </plugin>
  537.  
  538. <plugin>
  539. <groupId>org.apache.maven.plugins</groupId>
  540. <artifactId>maven-war-plugin</artifactId>
  541. <version>3.0.0</version>
  542. <configuration>
  543. <failOnMissingWebXml>false</failOnMissingWebXml>
  544. </configuration>
  545. </plugin>
  546. </plugins>
  547. </pluginManagement>
  548. </build>
  549. </project>
  550.  
  551. package br.com.agenda.conf;
  552.  
  553. import org.springframework.context.annotation.Bean;
  554. import org.springframework.context.annotation.ComponentScan;
  555. import org.springframework.context.annotation.Configuration;
  556. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
  557. import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  558. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  559. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  560. import org.springframework.web.servlet.view.InternalResourceViewResolver;
  561.  
  562. @EnableWebMvc
  563. @Configuration
  564. @ComponentScan(basePackages={"br.com.agenda"})
  565. public class AppWebConfiguration extends WebMvcConfigurerAdapter {
  566.  
  567. @Bean
  568. public InternalResourceViewResolver internalResourceViewResolver() {
  569. InternalResourceViewResolver resolver = new InternalResourceViewResolver();
  570. resolver.setPrefix("/WEB-INF/views/");
  571. resolver.setSuffix(".jsp");
  572. return resolver;
  573. }
  574.  
  575. @Override
  576. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  577. registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
  578. }
  579.  
  580. @Override
  581. public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
  582. configurer.enable();
  583. }
  584. }
  585.  
  586. package br.com.agenda.conf;
  587.  
  588. import java.util.Properties;
  589.  
  590. import javax.persistence.EntityManagerFactory;
  591. import javax.sql.DataSource;
  592.  
  593. import org.springframework.context.annotation.Bean;
  594. import org.springframework.jdbc.datasource.DriverManagerDataSource;
  595. import org.springframework.orm.jpa.JpaTransactionManager;
  596. import org.springframework.orm.jpa.JpaVendorAdapter;
  597. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  598. import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
  599. import org.springframework.transaction.PlatformTransactionManager;
  600. import org.springframework.transaction.annotation.EnableTransactionManagement;
  601.  
  602. @EnableTransactionManagement
  603. public class JPAConfiguration {
  604.  
  605. @Bean
  606. public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
  607. LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
  608. em.setDataSource(dataSource());
  609.  
  610. em.setPackagesToScan(new String[] {"br.com.agenda.models"});
  611. JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
  612. em.setJpaVendorAdapter(vendorAdapter);
  613. em.setJpaProperties(additionalProperties());
  614.  
  615. return em;
  616.  
  617. }
  618.  
  619. @Bean
  620. public DataSource dataSource() {
  621. DriverManagerDataSource dataSource = new DriverManagerDataSource();
  622. dataSource.setDriverClassName("com.mysql.jdbc.Driver");
  623. dataSource.setUrl("jdbc:mysql://localhost:3306/agenda?useSSL=false");
  624. dataSource.setUsername("");
  625. dataSource.setPassword("");
  626.  
  627. return dataSource;
  628. }
  629.  
  630. private Properties additionalProperties() {
  631. Properties properties = new Properties();
  632. properties.setProperty("hibernate.hbm2ddl.auto", "update");
  633. properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL57InnoDBDialect");
  634. properties.setProperty("hibernate.show_sql", "true");
  635.  
  636. return properties;
  637. }
  638.  
  639. @Bean
  640. public PlatformTransactionManager transactionManager (EntityManagerFactory emf) {
  641. JpaTransactionManager transactionManager = new JpaTransactionManager();
  642. transactionManager.setEntityManagerFactory(emf);
  643. return transactionManager;
  644. }
  645. }
  646.  
  647. package br.com.agenda.conf;
  648.  
  649. import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
  650.  
  651. public class ServletSpringMVC extends AbstractAnnotationConfigDispatcherServletInitializer {
  652.  
  653. @Override
  654. protected Class<?>[] getRootConfigClasses() {
  655. return null;
  656. }
  657.  
  658. @Override
  659. protected Class<?>[] getServletConfigClasses() {
  660. return new Class[]{AppWebConfiguration.class, JPAConfiguration.class};
  661. }
  662.  
  663. @Override
  664. protected String[] getServletMappings() {
  665. return new String[] {"/"};
  666. }
  667. }
  668.  
  669. package br.com.agenda.daos;
  670.  
  671. import java.util.List;
  672. import java.util.Optional;
  673.  
  674. import br.com.agenda.models.Contact;
  675.  
  676. public interface ContactDAO {
  677.  
  678. public void save(Contact contact);
  679.  
  680. public Contact update(Contact contact);
  681.  
  682. public void remove(Contact contact);
  683.  
  684. public Optional<Contact> find(int identifier);
  685.  
  686. public List<Contact> listAll();
  687. }
  688.  
  689. package br.com.agenda.daos;
  690.  
  691. import static java.util.Objects.requireNonNull;
  692.  
  693. import java.util.List;
  694. import java.util.Optional;
  695.  
  696. import javax.persistence.EntityManager;
  697. import javax.persistence.PersistenceContext;
  698.  
  699. import org.springframework.stereotype.Repository;
  700.  
  701. import br.com.agenda.models.Contact;
  702.  
  703. @Repository
  704. public final class JPAContactDAO implements ContactDAO {
  705.  
  706. @PersistenceContext
  707. private EntityManager manager;
  708.  
  709. @Override
  710. public void save(Contact contact) {
  711. requireNonNull(contact, "contact cannot be null");
  712. manager.persist(contact);
  713. }
  714.  
  715. @Override
  716. public Contact update(Contact contact) {
  717. requireNonNull(contact, "contact cannot be null");
  718. return manager.merge(contact);
  719. }
  720.  
  721. @Override
  722. public void remove(Contact contact) {
  723. requireNonNull(contact, "contact cannot be null");
  724. manager.remove(contact);
  725. }
  726.  
  727. @Override
  728. public Optional<Contact> find(int identifier) {
  729. return Optional.ofNullable(manager.find(Contact.class, identifier));
  730. }
  731.  
  732. @Override
  733. public List<Contact> listAll() {
  734. return manager.createQuery("SELECT DISTINCT(c) FROM Contact c JOIN FETCH c.phones", Contact.class)
  735. .getResultList();
  736. }
  737. }
  738.  
  739. package br.com.agenda.services;
  740.  
  741. import java.util.List;
  742. import java.util.Optional;
  743.  
  744. import br.com.agenda.models.Contact;
  745.  
  746. public interface ContactService {
  747.  
  748. public void save(Contact contact);
  749.  
  750. public Contact update(Contact contact);
  751.  
  752. public void remove(Contact contact);
  753.  
  754. public Optional<Contact> find(int identifier);
  755.  
  756. public List<Contact> listAll();
  757. }
  758.  
  759. package br.com.agenda.services;
  760.  
  761. import static java.util.Objects.requireNonNull;
  762.  
  763. import java.util.List;
  764. import java.util.Optional;
  765.  
  766. import org.springframework.beans.factory.annotation.Autowired;
  767. import org.springframework.stereotype.Service;
  768. import org.springframework.transaction.annotation.Transactional;
  769.  
  770. import br.com.agenda.daos.ContactDAO;
  771. import br.com.agenda.models.Contact;
  772.  
  773. @Service
  774. public final class DefaultContactService implements ContactService {
  775.  
  776. @Autowired
  777. private ContactDAO contactDAO;
  778.  
  779. @Override
  780. @Transactional
  781. public void save(Contact contact) {
  782. requireNonNull(contact, "contact cannot be null");
  783. contactDAO.save(contact);
  784. }
  785.  
  786. @Override
  787. @Transactional
  788. public Contact update(Contact contact) {
  789. requireNonNull(contact, "contact cannot be null");
  790. return contactDAO.update(contact);
  791. }
  792.  
  793. @Override
  794. @Transactional
  795. public void remove(Contact contact) {
  796. requireNonNull(contact, "contact cannot be null");
  797. contactDAO.remove(contact);
  798. }
  799.  
  800. @Override
  801. public Optional<Contact> find(int identifier) {
  802. return contactDAO.find(identifier);
  803. }
  804.  
  805. @Override
  806. public List<Contact> listAll() {
  807. return contactDAO.listAll();
  808. }
  809. }
  810.  
  811. package br.com.agenda.models;
  812.  
  813. import java.util.ArrayList;
  814. import java.util.List;
  815.  
  816. import javax.persistence.CascadeType;
  817. import javax.persistence.Column;
  818. import javax.persistence.Entity;
  819. import javax.persistence.GeneratedValue;
  820. import javax.persistence.GenerationType;
  821. import javax.persistence.Id;
  822. import javax.persistence.OneToMany;
  823. import javax.persistence.Table;
  824. import javax.validation.Valid;
  825.  
  826. import org.hibernate.validator.constraints.NotBlank;
  827.  
  828. @Entity
  829. @Table(name="tblContacts")
  830. public class Contact {
  831.  
  832. @Id
  833. @GeneratedValue(strategy = GenerationType.IDENTITY)
  834. @Column(name="idContacts")
  835. private int id;
  836.  
  837. @NotBlank
  838. @Column(name="nameContacts")
  839. private String name;
  840.  
  841. @NotBlank
  842. @Column(name="emailContacts")
  843. private String email;
  844.  
  845. @OneToMany(cascade=CascadeType.ALL)
  846. @Valid
  847. private List<Phone> phones = new ArrayList<>();
  848.  
  849. public void addPhone(Phone phone) {
  850. phones.add(phone);
  851. }
  852.  
  853. public List<Phone> getPhones() {
  854. return phones;
  855. }
  856.  
  857. public void setPhones(List<Phone> phones) {
  858. this.phones = phones;
  859. }
  860.  
  861. public int getId() {
  862. return id;
  863. }
  864.  
  865. public void setId(int id) {
  866. this.id = id;
  867. }
  868.  
  869. public String getName() {
  870. return name;
  871. }
  872.  
  873. public void setName(String name) {
  874. this.name = name;
  875. }
  876.  
  877. public String getEmail() {
  878. return email;
  879. }
  880.  
  881. public void setEmail(String email) {
  882. this.email = email;
  883. }
  884. }
  885.  
  886. package br.com.agenda.models;
  887.  
  888. import javax.persistence.Column;
  889. import javax.persistence.Entity;
  890. import javax.persistence.GeneratedValue;
  891. import javax.persistence.GenerationType;
  892. import javax.persistence.Id;
  893. import javax.persistence.Table;
  894.  
  895. @Entity
  896. @Table(name = "tblPhones")
  897. public class Phone {
  898.  
  899. @Id
  900. @GeneratedValue(strategy = GenerationType.IDENTITY)
  901. @Column(name="idPhones")
  902. private Integer id;
  903.  
  904. @Column(name="dddPhones")
  905. private int ddd;
  906.  
  907. @Column(name="numberPhones")
  908. private int number;
  909.  
  910. public int getDdd() {
  911. return ddd;
  912. }
  913.  
  914. public void setDdd(int ddd) {
  915. this.ddd = ddd;
  916. }
  917.  
  918. public int getNumber() {
  919. return number;
  920. }
  921.  
  922. public void setNumber(int number) {
  923. this.number = number;
  924. }
  925. }
  926.  
  927. package br.com.agenda.controllers;
  928.  
  929. import javax.validation.Valid;
  930.  
  931. import org.springframework.beans.factory.annotation.Autowired;
  932. import org.springframework.stereotype.Controller;
  933. import org.springframework.web.bind.annotation.RequestMapping;
  934. import org.springframework.web.bind.annotation.RequestMethod;
  935. import org.springframework.web.servlet.ModelAndView;
  936.  
  937. import br.com.agenda.models.Contact;
  938. import br.com.agenda.services.ContactService;
  939.  
  940. @Controller
  941. @RequestMapping("/contact")
  942. public class ContactController {
  943.  
  944. @Autowired
  945. private ContactService contactService;
  946.  
  947. @RequestMapping(value="/all", method=RequestMethod.GET)
  948. public ModelAndView listContact() {
  949. ModelAndView modelAndView = new ModelAndView("contact-list");
  950. modelAndView.addObject("contacts", contactService.listAll());
  951. return modelAndView;
  952. }
  953. }
  954.  
  955. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  956.  
  957. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  958. pageEncoding="ISO-8859-1"%>
  959. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  960. <html>
  961. <head>
  962. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  963. <title>Contact List</title>
  964. </head>
  965. <body>
  966. <c:forEach var="contact" items="${contacts}">
  967. <label>${contact.name}</label><br />
  968. </c:forEach>
  969. </body>
  970. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement