{"id":543,"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 MVC CRUD\u793a\u4f8b","status":"publish","type":"post","link":"https:\/\/bianchenghao6.com\/543.html","title":{"rendered":"Spring MVC CRUD\u793a\u4f8b"},"content":{"rendered":"
\n
<\/p>\n
\r\n <!-- https:\/\/mvnrepository.com\/artifact\/org.springframework\/spring-webmvc -->\r\n<dependency>\r\n <groupId>org.springframework<\/groupId>\r\n <artifactId>spring-webmvc<\/artifactId>\r\n <version>5.1.1.RELEASE<\/version>\r\n<\/dependency>\r\n<!-- https:\/\/mvnrepository.com\/artifact\/org.apache.tomcat\/tomcat-jasper -->\r\n<dependency>\r\n <groupId>org.apache.tomcat<\/groupId>\r\n <artifactId>tomcat-jasper<\/artifactId>\r\n <version>9.0.12<\/version>\r\n<\/dependency>\r\n <!-- https:\/\/mvnrepository.com\/artifact\/javax.servlet\/javax.servlet-api -->\r\n<dependency> \r\n <groupId>javax.servlet<\/groupId> \r\n <artifactId>servlet-api<\/artifactId> \r\n <version>3.0-alpha-1<\/version> \r\n<\/dependency>\r\n<!-- https:\/\/mvnrepository.com\/artifact\/javax.servlet\/jstl -->\r\n<dependency>\r\n <groupId>javax.servlet<\/groupId>\r\n <artifactId>jstl<\/artifactId>\r\n <version>1.2<\/version>\r\n<\/dependency>\r\n <!-- https:\/\/mvnrepository.com\/artifact\/mysql\/mysql-connector-java -->\r\n<dependency>\r\n <groupId>mysql<\/groupId>\r\n <artifactId>mysql-connector-java<\/artifactId>\r\n <version>8.0.11<\/version>\r\n<\/dependency>\r\n <!-- https:\/\/mvnrepository.com\/artifact\/org.springframework\/spring-jdbc -->\r\n<dependency>\r\n <groupId>org.springframework<\/groupId>\r\n <artifactId>spring-jdbc<\/artifactId>\r\n <version>5.1.1.RELEASE<\/version>\r\n<\/dependency>\r\n<\/pre>\n<\/code>\n <\/div>\n
2\u3001\u521b\u5efabean\u7c7b<\/h3>\n\n \u5728\u8fd9\u91cc\uff0cbean\u7c7b\u5305\u542b\u5bf9\u5e94\u4e8e\u6570\u636e\u5e93\u4e2d\u5b58\u5728\u7684\u5b57\u6bb5\u7684\u53d8\u91cf(\u4ee5\u53casetter\u548cgetter\u65b9\u6cd5)\u3002\n <\/div>\n\n Emp.java <\/strong>\n <\/div>\n\n\r\npackage <\/span>com.lidihuo.beans; \r\n \r\npublic <\/span>class <\/span>Emp { \r\nprivate <\/span>int <\/span>id; \r\nprivate <\/span>String name; \r\nprivate <\/span>float<\/span> salary; \r\nprivate <\/span>String designation; \r\n \r\npublic <\/span>int <\/span>getId() { \r\n return <\/span>id; \r\n} \r\npublic void <\/span>setId(int <\/span>id) { \r\n this<\/span>.id = id; \r\n} \r\npublic <\/span>String getName() { \r\n return <\/span>name; \r\n} \r\npublic void <\/span>setName(String name) { \r\n this<\/span>.name = name; \r\n} \r\npublic <\/span>float<\/span> getSalary() { \r\n return <\/span>salary; \r\n} \r\npublic void <\/span>setSalary(float<\/span> salary) { \r\n this<\/span>.salary = salary; \r\n} \r\npublic <\/span>String getDesignation() { \r\n return <\/span>designation; \r\n} \r\npublic void <\/span>setDesignation(String designation) { \r\n this<\/span>.designation = designation; \r\n} \r\n \r\n} \r\n<\/pre>\n<\/code>\n <\/div>\n
3\u3001\u521b\u5efa\u63a7\u5236\u5668\u7c7b<\/h3>\n\n EmpController.java <\/strong>\n <\/div>\n\n\r\npackage <\/span>com.lidihuo.controllers; \r\nimport java.util.List; \r\nimport org.springframework.beans.factory.annotation.Autowired; \r\nimport org.springframework.stereotype.Controller;\r\nimport org.springframework.ui.Model;\r\nimport org.springframework.web.bind.annotation.ModelAttribute; \r\nimport org.springframework.web.bind.annotation.PathVariable; \r\nimport org.springframework.web.bind.annotation.RequestMapping; \r\nimport org.springframework.web.bind.annotation.RequestMethod; \r\nimport com.lidihuo.beans.Emp; \r\nimport com.lidihuo.dao.EmpDao; \r\n@Controller \r\npublic <\/span>class <\/span>EmpController { \r\n @Autowired \r\n EmpDao dao;\/\/will inject dao from XML file \r\n \r\n \/*It displays a form to input data, here \"command\"<\/span><\/span><\/span> is a reserved request attribute \r\n *which is used to display object data into form \r\n *\/ \r\n @RequestMapping(\"\/empform\"<\/span>) \r\n public <\/span>String showform(Model m){ \r\n m.addAttribute<\/span>(\"command\", new <\/span>Emp());\r\n return <\/span>\"empform\"<\/span>; \r\n } \r\n \/*It saves object into database. The @ModelAttribute puts request data \r\n * into model object. You need to mention RequestMethod.POST method \r\n * because default <\/span>request is GET*\/ \r\n @RequestMapping(value=\"\/save\"<\/span>,method = RequestMethod.POST) \r\n public <\/span>String save(@ModelAttribute(\"emp\"<\/span><\/span>) Emp emp){ \r\n dao.save<\/span>(emp); \r\n return <\/span>\"redirect:\/viewemp\"<\/span><\/span><\/span>;\/\/will redirect to viewemp request mapping \r\n } \r\n \/* It provides list of employees in model object *\/ \r\n @RequestMapping(\"\/viewemp\"<\/span>) \r\n public <\/span>String viewemp(Model m){ \r\n List<Emp> list=dao.getEmployees<\/span>(); \r\n m.addAttribute<\/span>(\"list\"<\/span>,list);\r\n return <\/span>\"viewemp\"<\/span>; \r\n } \r\n \/* It displays object data into form for <\/span>the given id. \r\n * The @PathVariable puts URL data into variable.*\/ \r\n @RequestMapping(value=\"\/editemp\/{id}\"<\/span>) \r\n public <\/span>String edit(@PathVariable int <\/span>id, Model m){ \r\n Emp emp=dao.getEmpById<\/span>(id); \r\n m.addAttribute<\/span>(\"command\",emp);\r\n return <\/span>\"empeditform\"<\/span>; \r\n } \r\n \/* It updates model object. *\/ \r\n @RequestMapping(value=\"\/editsave\"<\/span>,method = RequestMethod.POST) \r\n public <\/span>String editsave(@ModelAttribute(\"emp\") Emp emp){ \r\n dao.update<\/span>(emp); \r\n return <\/span>\"redirect:\/viewemp\"; \r\n } \r\n \/* It deletes record for <\/span>the given id in URL and redirects to \/viewemp *\/ \r\n @RequestMapping(value=\"\/deleteemp\/{id}\"<\/span>,method = RequestMethod.GET) \r\n public <\/span>String delete(@PathVariable int <\/span>id){ \r\n dao.delete<\/span>(id); \r\n return <\/span>\"redirect:\/viewemp\"; \r\n } \r\n}\r\n<\/pre>\n<\/code>\n <\/div>\n
4\u3001\u521b\u5efaDAO\u7c7b<\/h3>\n\n \u8ba9\u6211\u4eec\u521b\u5efa\u4e00\u4e2aDAO\u7c7b\u4ee5\u8bbf\u95ee\u6570\u636e\u5e93\u4e2d\u6240\u9700\u7684\u6570\u636e\u3002\n <\/div>\n\n EmpDao.java <\/strong>\n <\/div>\n\n\r\npackage <\/span>com.lidihuo.dao; \r\nimport java.sql.ResultSet; \r\nimport java.sql.SQLException; \r\nimport java.util.List; \r\nimport org.springframework.jdbc.core.BeanPropertyRowMapper; \r\nimport org.springframework.jdbc.core.JdbcTemplate; \r\nimport org.springframework.jdbc.core.RowMapper; \r\nimport com.lidihuo.beans.Emp; \r\n \r\npublic <\/span>class <\/span>EmpDao { \r\nJdbcTemplate template; \r\n \r\npublic void <\/span>setTemplate(JdbcTemplate template) { \r\n this<\/span>.template = template; \r\n} \r\npublic <\/span>int <\/span>save(Emp p){ \r\n String sql=\"insert into Emp99(name,salary,designation) values('<\/span>\"+p.getName<\/span>()+\"<\/span><\/span>',\"<\/span>+p.getSalary<\/span>()+\",'<\/span>\"+p.getDesignation<\/span>()+\"<\/span><\/span>')\"<\/span>; \r\n return <\/span>template.update<\/span>(sql); \r\n} \r\npublic <\/span>int <\/span>update(Emp p){ \r\n String sql=\"update Emp99 set name='<\/span>\"+p.getName<\/span>()+\"', salary=\"<\/span>+p.getSalary<\/span>()+\",designation='<\/span>\"+p.getDesignation<\/span>()+\"' where id=\"<\/span>+p.getId<\/span>()+\"\"<\/span><\/span>; \r\n return <\/span>template.update<\/span>(sql); \r\n} \r\npublic <\/span>int <\/span>delete(int <\/span>id){ \r\n String sql=\"delete from Emp99 where id=\"<\/span>+id+\"\"; \r\n return <\/span>template.update<\/span>(sql); \r\n} \r\npublic <\/span>Emp getEmpById(int <\/span>id){ \r\n String sql=\"select * from Emp99 where id=?\"<\/span>; \r\n return <\/span>template.queryForObject<\/span>(sql, new <\/span>Object[]{id},new BeanPropertyRowMapper<Emp>(Emp.class)); \r\n} \r\npublic <\/span>List<Emp> getEmployees(){ \r\n return <\/span>template.query<\/span>(\"select * from Emp99\"<\/span>,new RowMapper<Emp>(){ \r\n public <\/span>Emp mapRow(ResultSet rs, int <\/span>row) throws <\/span>SQLException { \r\n Emp e=new Emp(); \r\n e.setId<\/span>(rs.getInt<\/span>(1)); \r\n e.setName<\/span>(rs.getString<\/span>(2)); \r\n e.setSalary<\/span>(rs.getfloat<\/span><\/span>(3)); \r\n e.setDesignation<\/span>(rs.getString<\/span>(4)); \r\n return <\/span>e; \r\n } \r\n }); \r\n} \r\n} \r\n<\/pre>\n<\/code>\n <\/div>\n
5\u3001\u5728web.xml\u6587\u4ef6\u4e2d\u63d0\u4f9b\u63a7\u5236\u5668\u7684\u6761\u76ee<\/h3>\n\n web.xml <\/strong>\n <\/div>\n\n\r\n<?xml version=\"1.0\"<\/span> encoding=\"UTF-8\"<\/span>?>\r\n<web-app xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> xmlns=\"http:\/\/java.sun.com\/xml\/ns\/javaee\"<\/span> xsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/javaee http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_3_0.xsd\"<\/span> id=\"WebApp_ID\"<\/span> version=\"3.0\"<\/span>>\r\n <display-name>SpringMVC<\/display-name>\r\n <servlet> \r\n <servlet-name>spring<\/servlet-name> \r\n <servlet-class>org.springframework.web.servlet.DispatcherServlet<\/servlet-class> \r\n <load-on-startup>1<\/load-on-startup> \r\n<\/servlet> \r\n<servlet-mapping> \r\n <servlet-name>spring<\/servlet-name> \r\n <url-pattern>\/<\/url-pattern> \r\n<\/servlet-mapping> \r\n<\/web-app>\r\n<\/pre>\n<\/code>\n <\/div>\n
6\u3001\u5728xml\u6587\u4ef6\u4e2d\u5b9a\u4e49Bean <\/h3>\n\n spring-servlet.xml <\/strong>\n <\/div>\n\n\r\n<?xml version=\"1.0\"<\/span> encoding=\"UTF-8\"<\/span>?>\r\n<beans xmlns=\"http:\/\/www.springframework.org\/schema\/beans\"<\/span>\r\n xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"<\/span> \r\n xmlns:context=\"http:\/\/www.springframework.org\/schema\/context\"<\/span>\r\n xmlns:mvc=\"http:\/\/www.springframework.org\/schema\/mvc\"<\/span>\r\n xsi:schemaLocation=\"\r\n http:\/\/www.springframework.org\/schema\/beans\r\n http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\r\n http:\/\/www.springframework.org\/schema\/context\r\n http:\/\/www.springframework.org\/schema\/context\/spring-context.xsd\r\n http:\/\/www.springframework.org\/schema\/mvc\r\n http:\/\/www.springframework.org\/schema\/mvc\/spring-mvc.xsd\">\r\n<context:component-scan base-package=\"com.lidihuo.controllers\"<\/span>><\/context:component-scan> \r\n \r\n<bean class=\"org.springframework.web.servlet.view.InternalResourceViewResolver\"<\/span>> \r\n<property name=\"prefix\"<\/span> value=\"\/WEB-INF\/jsp\/\"<\/span>><\/property> \r\n<property name=\"suffix\"<\/span> value=\".jsp\"<\/span>><\/property> \r\n<\/bean> \r\n \r\n<bean id=\"ds\"<\/span><\/span> class=\"org.springframework.jdbc.datasource.DriverManagerDataSource\"<\/span>> \r\n<property name=\"driverClassName\"<\/span> value=\"com.mysql.jdbc.Driver\"<\/span>><\/property> \r\n<property name=\"url\"<\/span> value=\"jdbc:mysql:\/\/localhost:3306\/test\"<\/span>><\/property> \r\n<property name=\"username\"<\/span> value=\"\"<\/span><\/span>><\/property> \r\n<property name=\"password\"<\/span> value=\"\"><\/property> \r\n<\/bean> \r\n \r\n<bean id=\"jt\"<\/span><\/span> class=\"org.springframework.jdbc.core.JdbcTemplate\"<\/span>> \r\n<property name=\"dataSource\"<\/span> ref=\"ds\"><\/property> \r\n<\/bean> \r\n \r\n<bean id=\"dao\"<\/span> class=\"com.lidihuo.dao.EmpDao\"<\/span>> \r\n<property name=\"template\"<\/span> ref=\"jt\"><\/property> \r\n<\/bean> \r\n<\/beans>\r\n<\/pre>\n<\/code>\n <\/div>\n
7\u3001\u521b\u5efa\u8bf7\u6c42\u7684\u9875\u9762<\/h3>\n\n index.jsp <\/strong>\n <\/div>\n\n\r\n<a href=\"empform\"<\/span>>Add Employee<\/a>\r\n<a href=\"viewemp\"<\/span>>View Employees<\/a>\r\n<\/pre>\n<\/code>\n <\/div>\n
8\u3001\u521b\u5efa\u5176\u4ed6\u89c6\u56fe\u7ec4\u4ef6<\/h3>\n\n empform.jsp <\/strong>\n <\/div>\n\n\r\n<%@ taglib uri=\"http:\/\/www.springframework.org\/tags\/form\"<\/span> prefix=\"form\"<\/span>%> \r\n<%@ taglib uri=\"http:\/\/java.sun.com\/jsp\/jstl\/core\"<\/span> prefix=\"c\"<\/span>%> \r\n <h1>Add new <\/span>Employee<\/h1>\r\n <form:form method=\"post\"<\/span> action=\"save\"<\/span>> \r\n <table > \r\n <tr> \r\n <td>Name : <\/td> \r\n <td><form:input path=\"name\"<\/span> \/><\/td>\r\n <\/tr> \r\n <tr> \r\n <td>Salary :<\/td> \r\n <td><form:input path=\"salary\"<\/span> \/><\/td>\r\n <\/tr> \r\n <tr> \r\n <td>Designation :<\/td> \r\n <td><form:input path=\"designation\"<\/span> \/><\/td>\r\n <\/tr> \r\n <tr> \r\n <td> <\/td> \r\n <td><input type=\"submit\"<\/span> value=