{"id":551,"date":"2023-03-23T21:19:42","date_gmt":"2023-03-23T13:19:42","guid":{"rendered":""},"modified":"2023-03-23T21:19:42","modified_gmt":"2023-03-23T13:19:42","slug":"Spring Angular CRUD\u5e94\u7528\u7a0b\u5e8f","status":"publish","type":"post","link":"https:\/\/bianchenghao6.com\/551.html","title":{"rendered":"Spring Angular CRUD\u5e94\u7528\u7a0b\u5e8f"},"content":{"rendered":"
\n
\u4e00\u65e6\u6211\u4eec\u5c06\u5e94\u7528\u7a0b\u5e8f\u90e8\u7f72\u5230\u670d\u52a1\u5668\u4e0a\uff0c\u5c31\u4f1a\u5728Web\u6d4f\u89c8\u5668\u4e2d\u751f\u6210\u5b66\u751f\u8868\u683c\u3002 <\/span> \u4f7f\u7528\u4efb\u4f55IDE\u6765\u5f00\u53d1Spring\u548cHibernate\u9879\u76ee\u3002\u53ef\u80fd\u662fSTS\/Eclipse\/Netbeans\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u6b63\u5728\u4f7f\u7528STS(Spring\u5de5\u5177\u5957\u4ef6)\u3002<\/span> SpringBoot2 <\/span> \u5c06\u4f9d\u8d56\u9879\u6dfb\u52a0\u5230pom.xml\u6587\u4ef6\u3002<\/span> <\/p>\n <\/code>\n <\/div>\n \u521b\u5efa\u914d\u7f6e\u7c7b <\/code>\n <\/div>\n <\/code>\n <\/div>\n \u521b\u5efa\u5b9e\u4f53\u7c7b <\/code>\n <\/div>\n \u521b\u5efaDAO\u754c\u9762 <\/code>\n <\/div>\n \u521b\u5efaDAO\u63a5\u53e3\u5b9e\u73b0\u7c7b<\/span> <\/p>\n <\/code>\n <\/div>\n \u521b\u5efa\u670d\u52a1\u5c42\u63a5\u53e3<\/span> <\/p>\n <\/code>\n <\/div>\n \u521b\u5efa\u670d\u52a1\u5c42\u5b9e\u73b0\u7c7b<\/span> <\/p>\n
\n \u8be5\u8868\u5355\u6709\u52a9\u4e8e\u6dfb\u52a0\u548c\u67e5\u770b\u5b66\u751f\u3002<\/span>
\n \u70b9\u51fb\u6dfb\u52a0\u5b66\u751f\u94fe\u63a5\u540e\uff0c\u9875\u9762\u4f1a\u91cd\u5b9a\u5411\u5230\u521b\u5efa\u5b66\u751f\u8868\u683c\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u586b\u5199\u6240\u9700\u7684\u8be6\u7ec6\u4fe1\u606f\u5e76\u63d0\u4ea4\u6765\u6dfb\u52a0\u5b66\u751f\u3002<\/span>
\n \u4f7f\u7528\u67e5\u770b\u5b66\u751f\u94fe\u63a5\uff0c\u6211\u4eec\u53ef\u4ee5\u83b7\u53d6\u73b0\u6709\u5b66\u751f\u7684\u8be6\u7ec6\u4fe1\u606f\u3002\u5728\u8fd9\u91cc\uff0c\u6bcf\u4e2a\u5b66\u751f\u8fd8\u5305\u542b\u66f4\u65b0\u548c\u5220\u9664\u94fe\u63a5\u3002<\/span>
\n \u56e0\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u66f4\u65b0\u5b66\u751f\u7684\u8be6\u7ec6\u4fe1\u606f\uff0c\u4e5f\u53ef\u4ee5\u4ece\u6570\u636e\u5e93\u4e2d\u5220\u9664\u4ed6\u4eec\u3002 <\/span>
\n \u5b8c\u6210\u540e\uff0c\u5728\u7f51\u7edc\u6d4f\u89c8\u5668\u4e2d\u63d0\u4f9bURL http:\/\/localhost: 4200\/\u3002<\/span> <\/p>\n\u8981\u4f7f\u7528\u7684\u5de5\u5177<\/h2>\n
\n \u7528\u4e8e\u6570\u636e\u5e93\u7684MySQL\u3002<\/span>
\n \u4f7f\u7528\u4efb\u4f55IDE\u6765\u5f00\u53d1Angular\u9879\u76ee\u3002\u5b83\u53ef\u80fd\u662fVisual Studio\u4ee3\u7801\/Sublime\u3002\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u6b63\u5728\u4f7f\u7528Visual Studio Code\u3002<\/span>
\n \u670d\u52a1\u5668: Apache Tomcat\/JBoss\/Glassfish\/Weblogic\/Websphere\u3002<\/span> <\/p>\n\u6211\u4eec\u4f7f\u7528\u7684\u6280\u672f<\/h2>\n
\n Hibernate5 <\/span>
\n Angular6 <\/span>
\n MYSQL <\/span> <\/p>\n\u521b\u5efa\u6570\u636e\u5e93<\/h2>\n
\n indigo <\/strong>\u3002\u65e0\u9700\u521b\u5efa\u8868\uff0c\u56e0\u4e3aHibernate\u4f1a\u81ea\u52a8\u521b\u5efa\u5b83\u3002\n <\/div>\n Spring\u6a21\u5757<\/h2>\n
<\/p>\n
\r\n<?xml version=\"1.0\"<\/span> encoding=\"UTF-8\"<\/span>?>\r\n<project xmlns=\"http:\/\/maven.apache.org\/POM\/4.0.0\"<\/span> xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span>\r\n\txsi:schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/xsd\/maven-4.0.0.xsd\"<\/span>>\r\n\t<modelVersion>4.0.0<\/modelVersion>\r\n\t<parent>\r\n\t\t<groupId>org.springframework.boot<\/groupId>\r\n\t\t<artifactId>spring-boot-starter-parent<\/artifactId>\r\n\t\t<version>2.1.4.RELEASE<\/version>\r\n\t\t<relativePath\/> <!-- lookup parent from repository -->\r\n\t<\/parent>\r\n\t<groupId>com.main<\/groupId>\r\n\t<artifactId>Student<\/artifactId>\r\n\t<version>0.0.1-SNAPSHOT<\/version>\r\n\t<name>Student<\/name>\r\n\t<description>Demo project for <\/span>Spring Boot<\/description>\r\n\t<properties>\r\n\t\t<java.version>1.8<\/java.version>\r\n\t<\/properties>\r\n\t<dependencies>\r\n\t\r\n\t\t<dependency>\r\n\t\t <groupId>org.springframework.boot<\/groupId>\r\n\t\t <artifactId>spring-boot-devtools<\/artifactId>\r\n <optional>true<\/optional>\r\n\t\t<\/dependency>\r\n\t\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework.boot<\/groupId>\r\n\t\t\t<artifactId>spring-boot-starter-data-jpa<\/artifactId>\r\n\t\t<\/dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework.boot<\/groupId>\r\n\t\t\t<artifactId>spring-boot-starter-web<\/artifactId>\r\n\t\t<\/dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>mysql<\/groupId>\r\n\t\t\t<artifactId>mysql-connector-java<\/artifactId>\r\n\t\t\t<scope>runtime<\/scope>\r\n\t\t<\/dependency>\r\n\t\t<dependency>\r\n\t\t\t<groupId>org.springframework.boot<\/groupId>\r\n\t\t\t<artifactId>spring-boot-starter-test<\/artifactId>\r\n\t\t\t<scope>test<\/scope>\r\n\t\t<\/dependency>\r\n\t<\/dependencies>\r\n\t<build>\r\n\t\t<plugins>\r\n\t\t\t<plugin>\r\n\t\t\t\t<groupId>org.springframework.boot<\/groupId>\r\n\t\t\t\t<artifactId>spring-boot-maven-plugin<\/artifactId>\r\n\t\t\t<\/plugin>\r\n\t\t<\/plugins>\r\n\t<\/build>\r\n<\/project>\r\n<\/pre>\n
\u6211\u4eec\u6267\u884c\u57fa\u4e8e\u6ce8\u91ca\u7684\u914d\u7f6e\uff0c\u800c\u4e0d\u662fXML\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u7c7bConfig.java\u5e76\u5728\u5176\u4e2d\u6307\u5b9a\u6240\u9700\u7684\u914d\u7f6e\u3002\u4f46\u662f\uff0c\u8fd8\u6709\u4e00\u4e2a\u914d\u7f6e\u7c7bStudentApplication.java\u3002\u6b64\u7c7b\u7531Spring Boot\u81ea\u52a8\u63d0\u4f9b\u3002q<\/span> <\/p>\n\r\npackage <\/span>config;\r\nimport java.util.Properties;\r\nimport javax.sql.DataSource;\r\nimport org.springframework.beans.factory.annotation.Value;\r\nimport org.springframework.boot.autoconfigure.EnableAutoConfiguration;\r\nimport org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;\r\nimport org.springframework.context.annotation.Bean;\r\nimport org.springframework.context.annotation.ComponentScan;\r\nimport org.springframework.context.annotation.ComponentScans;\r\nimport org.springframework.context.annotation.Configuration;\r\nimport org.springframework.jdbc.datasource.DriverManagerDataSource;\r\nimport org.springframework.orm.hibernate5.HibernateTransactionManager;\r\nimport org.springframework.orm.hibernate5.LocalSessionFactoryBean;\r\nimport org.springframework.transaction.annotation.EnableTransactionManagement;\r\nimport org.springframework.web.servlet.view.InternalResourceViewResolver;\r\n@Configuration\r\n@EnableTransactionManagement\r\n@EnableAutoConfiguration(exclude = { HibernateJpaAutoConfiguration.class})\r\n@ComponentScans(value = { @ComponentScan(\"boot.entry\"<\/span>),\r\n\t @ComponentScan(\"Model\"<\/span>),\r\n\t @ComponentScan(\"Controller\"<\/span>),\r\n\t @ComponentScan(\"DAO\"<\/span>),\r\n\t @ComponentScan(\"Miscallaneous\"<\/span>),\r\n\t @ComponentScan(\"Service\"<\/span>)})\r\npublic <\/span>class <\/span>Config {\r\n\t @Value(\"${db.driver}\"<\/span>)\r\n\t private <\/span>String DB_DRIVER;\r\n\t @Value(\"${db.password}\"<\/span>)\r\n\t private <\/span>String DB_PASSWORD;\r\n\t @Value(\"${db.url}\"<\/span>)\r\n\t private <\/span>String DB_URL;\r\n\t @Value(\"${db.username}\"<\/span>)\r\n\t private <\/span>String DB_USERNAME;\r\n\t @Value(\"${hibernate.dialect}\"<\/span>)\r\n\t private <\/span>String HIBERNATE_DIALECT;\r\n\t @Value(\"${hibernate.show_sql}\"<\/span>)\r\n\t private <\/span>String HIBERNATE_SHOW_SQL;\r\n\t @Value(\"${hibernate.hbm2ddl.auto}\"<\/span>)\r\n\t private <\/span>String HIBERNATE_HBM2DDL_AUTO;\r\n\t @Value(\"${entitymanager.packagesToScan}\"<\/span>)\r\n\t private <\/span>String ENTITYMANAGER_PACKAGES_TO_SCAN;\r\n\t @Bean\r\n\t public <\/span>LocalSessionFactoryBean sessionFactory() {\r\n\t LocalSessionFactoryBean sessionFactory = new <\/span>LocalSessionFactoryBean();\r\n\t sessionFactory.setDataSource<\/span>(dataSource());\r\n\t sessionFactory.setPackagesToScan<\/span>(ENTITYMANAGER_PACKAGES_TO_SCAN);\r\n\t Properties hibernateProperties = new <\/span>Properties();\r\n\t hibernateProperties.put<\/span>(\"hibernate.dialect\"<\/span>, HIBERNATE_DIALECT);\r\n\t hibernateProperties.put<\/span>(\"hibernate.show_sql\"<\/span>, HIBERNATE_SHOW_SQL);\r\n\t hibernateProperties.put<\/span>(\"hibernate.hbm2ddl.auto\"<\/span>, HIBERNATE_HBM2DDL_AUTO);\r\n\t sessionFactory.setHibernateProperties<\/span>(hibernateProperties);\r\n\t return <\/span>sessionFactory;\r\n\t }\r\n\t @Bean\r\n\t public <\/span>DataSource dataSource() {\r\n\t DriverManagerDataSource dataSource = new <\/span>DriverManagerDataSource();\r\n\t dataSource.setDriverClassName<\/span>(DB_DRIVER);\r\n\t dataSource.setUrl<\/span>(DB_URL);\r\n\t dataSource.setUsername<\/span>(DB_USERNAME);\r\n\t dataSource.setPassword<\/span>(DB_PASSWORD);\r\n\t return <\/span>dataSource;\r\n\t }\r\n\t @Bean\r\n\t public <\/span>HibernateTransactionManager transactionManager() {\r\n\t HibernateTransactionManager txManager = new <\/span>HibernateTransactionManager();\r\n\t txManager.setSessionFactory<\/span>(sessionFactory().getObject<\/span>());\r\n\t return <\/span>txManager;\r\n\t }\r\n\t \r\n\t @Bean\r\n\t public <\/span>InternalResourceViewResolver jspViewResolver() {\r\n\t InternalResourceViewResolver resolver= new <\/span>InternalResourceViewResolver();\r\n\t resolver.setPrefix<\/span>(\"\/views\/\"<\/span>);\r\n\t resolver.setSuffix<\/span>(\".jsp\"<\/span>);\r\n\t return <\/span>resolver;\r\n\t } \r\n\t \r\n\t \r\n\t \r\n\t}\r\n<\/pre>\n
\r\npackage <\/span>config;\r\nimport org.springframework.boot.SpringApplication;\r\nimport org.springframework.boot.autoconfigure.SpringBootApplication;\r\n@SpringBootApplication\r\npublic <\/span>class <\/span>StudentApplication {\r\n\tpublic <\/span>static void <\/span>main(String[] args) {\r\n\t\tSpringApplication.run<\/span>(StudentApplication.class, args);\r\n\t}\r\n}\r\n<\/pre>\n
\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2aEntity\/POJO(\u666e\u901a\u7684\u65e7Java\u5bf9\u8c61)\u7c7b\u3002<\/span> <\/p>\n\r\npackage <\/span>Model;\r\nimport javax.persistence.Entity;\r\nimport javax.persistence.GeneratedValue;\r\nimport javax.persistence.GenerationType;\r\nimport javax.persistence.Id;\r\nimport javax.persistence.Table;\r\n@Entity\r\n@Table(name=\"student\"<\/span>)\r\npublic <\/span>class <\/span>Student {\r\n\t@Id\r\n\t@GeneratedValue(strategy=GenerationType.IDENTITY)\r\n\tprivate <\/span>int <\/span>student_id;\r\n\tprivate <\/span>String student_name;\r\n\tprivate <\/span>String student_email;\r\n\tprivate <\/span>String student_branch;\r\n\tpublic <\/span>int <\/span>getStudent_id() {\r\n\t\treturn <\/span>student_id;\r\n\t}\r\n\tpublic void <\/span>setStudent_id(int <\/span>student_id) {\r\n\t\tthis<\/span>.student_id = student_id;\r\n\t}\r\n\tpublic <\/span>String getStudent_name() {\r\n\t\treturn <\/span>student_name;\r\n\t}\r\n\tpublic void <\/span>setStudent_name(String student_name) {\r\n\t\tthis<\/span>.student_name = student_name;\r\n\t}\r\n\tpublic <\/span>String getStudent_email() {\r\n\t\treturn <\/span>student_email;\r\n\t}\r\n\tpublic void <\/span>setStudent_email(String student_email) {\r\n\t\tthis<\/span>.student_email = student_email;\r\n\t}\r\n\tpublic <\/span>String getStudent_branch() {\r\n\t\treturn <\/span>student_branch;\r\n\t}\r\n\tpublic void <\/span>setStudent_branch(String student_branch) {\r\n\t\tthis<\/span>.student_branch = student_branch;\r\n\t}\r\n\t\r\n}\r\n<\/pre>\n
\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u6b63\u5728\u521b\u5efaDAO\u754c\u9762\u4ee5\u6267\u884c\u4e0e\u6570\u636e\u5e93\u76f8\u5173\u7684\u64cd\u4f5c\u3002<\/span> <\/p>\n\r\npackage <\/span>DAO;\r\nimport java.util.List;\r\nimport Model.Student;\r\npublic <\/span>interface Student_DAO {\r\n\tpublic boolean <\/span>saveStudent(Student student);\r\n\tpublic <\/span>List<Student> getStudents();\r\n\tpublic boolean <\/span>deleteStudent(Student student);\r\n\tpublic <\/span>List<Student> getStudentByID(Student student);\r\n\tpublic boolean <\/span>updateStudent(Student student);\r\n}\r\n<\/pre>\n
\r\npackage <\/span>DAO;\r\nimport java.util.List;\r\nimport org.hibernate.Session;\r\nimport org.hibernate.SessionFactory;\r\nimport org.hibernate.query.Query;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.stereotype.Repository;\r\nimport Model.Student;\r\n@Repository\r\npublic <\/span>class <\/span>Student_DAO_Imp implements <\/span>Student_DAO{\r\n\t@Autowired\r\n\tprivate <\/span>SessionFactory sessionFactory;\r\n\t\r\n\t@Override\r\n\tpublic boolean <\/span>saveStudent(Student student) {\r\n\t\tboolean status=false;\r\n\t\ttry <\/span>{\r\n\t\t\tsessionFactory.getCurrentSession<\/span>().save<\/span>(student);\r\n\t\t\tstatus=true;\r\n\t\t} catch <\/span>(Exception e) {\r\n\t\t\te.printStackTrace<\/span>();\r\n\t\t}\r\n\t\treturn <\/span>status;\r\n\t}\r\n\t@Override\r\n\tpublic <\/span>List<Student> getStudents() {\r\n\t\tSession currentSession = sessionFactory.getCurrentSession<\/span>();\r\n\t\tQuery<Student> query=currentSession.createQuery<\/span>(\"from Student\"<\/span>, Student.class);\r\n\t\tList<Student> list=query.getResultList<\/span>();\r\n\t\treturn <\/span>list;\r\n\t}\r\n\t@Override\r\n\tpublic boolean <\/span>deleteStudent(Student student) {\r\n\t\tboolean status=false;\r\n\t\ttry <\/span>{\r\n\t\t\tsessionFactory.getCurrentSession<\/span>().delete<\/span>(student);\r\n\t\t\tstatus=true;\r\n\t\t} catch <\/span>(Exception e) {\r\n\t\t\te.printStackTrace<\/span>();\r\n\t\t}\r\n\t\treturn <\/span>status;\r\n\t}\r\n\t@Override\r\n\tpublic <\/span>List<Student> getStudentByID(Student student) {\r\n\t\tSession currentSession = sessionFactory.getCurrentSession<\/span>();\r\n\t\tQuery<Student> query=currentSession.createQuery<\/span>(\"from Student where student_id=:student_id\"<\/span>, Student.class);\r\n\t\tquery.setParameter<\/span>(\"student_id\"<\/span>, student.getStudent_id<\/span>());\r\n\t\tList<Student> list=query.getResultList<\/span>();\r\n\t\treturn <\/span>list;\r\n\t}\r\n\t@Override\r\n\tpublic boolean <\/span>updateStudent(Student student) {\r\n\t\tboolean status=false;\r\n\t\ttry <\/span>{\r\n\t\t\tsessionFactory.getCurrentSession<\/span>().update<\/span>(student);\r\n\t\t\tstatus=true;\r\n\t\t} catch <\/span>(Exception e) {\r\n\t\t\te.printStackTrace<\/span>();\r\n\t\t}\r\n\t\treturn <\/span>status;\r\n\t}\r\n\t\r\n\t\r\n}\r\n<\/pre>\n
\r\npackage <\/span>Service;\r\nimport java.util.List;\r\nimport Model.Student;\r\npublic <\/span>interface Student_Service {\r\n\t\r\n\tpublic boolean <\/span>saveStudent(Student student);\r\n\tpublic <\/span>List<Student> getStudents();\r\n\tpublic boolean <\/span>deleteStudent(Student student);\r\n\tpublic <\/span>List<Student> getStudentByID(Student student);\r\n\tpublic boolean <\/span>updateStudent(Student student);\r\n}\r\n<\/pre>\n
\r\npackage <\/span>Service;\r\nimport java.util.List;\r\nimport org.springframework.beans.factory.annotation.Autowired;\r\nimport org.springframework.stereotype.Service;\r\nimport org.springframework.transaction.annotation.Transactional;\r\nimport DAO.Student_DAO;\r\nimport Model.Student;\r\n@Service\r\n@Transactional\r\npublic <\/span>class <\/span>Student_Service_Imp implements <\/span>Student_Service {\r\n \r\n\t@Autowired\r\n\tprivate <\/span>Student_DAO studentdao;\r\n\t\r\n\t@Override\r\n\tpublic boolean <\/span>saveStudent(Student student) {\r\n\t\treturn <\/span>studentdao.saveStudent<\/span>(student);\r\n\t}\r\n\t@Override\r\n\tpublic <\/span>List<Student> getStudents() {\r\n\t\treturn <\/span>studentdao.getStudents<\/span>();\r\n\t}\r\n\t@Override\r\n\tpublic boolean <\/span>deleteStudent(Student student) {\r\n\t\treturn <\/span>studentdao.deleteStudent<\/span>(student);\r\n\t}\r\n\t@Override\r\n\tpublic <\/span>List<Student> getStudentByID(Student student) {\r\n\t\t