运用idea工具实现的maven项目
pom.xml
<?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</groupId>
<artifactId>springmvc-demo</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
</dependencies>
<build>
<!-- 配置资源拷贝 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<!-- 配置tomcat插件 -->
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<port>8081</port>
</configuration>
</plugin>
</plugins>
</build>
</project>
资源文件src/main/resources下的
beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<context:property-placeholder location="classpath*:db.properties"/>
<!--配置数据源连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- 配置JdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置Dao -->
<bean id="userDao" class="com.dao.impl.UserDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<!-- 配置Service -->
<bean id="userService" class="com.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<!-- 配置Controller -->
<!--<bean id="controller" class="com.web.controller.UserController">
<property name="userService" ref="userService"/>
</bean>-->
<!-- 配置事务管理器 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置声明式事务 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 配置aop -->
<aop:config>
<aop:pointcut id="pt" expression="execution(* com.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
</aop:config>
</beans>
mvc.xml,springmvc的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 如果在mvc.xml文件中导入了beans.xml文件,就无需在web.xml文件中添加监听器 -->
<!--<import resource="beans.xml"/>-->
<context:component-scan base-package="com.web" />
<mvc:annotation-driven />
<!-- 处理静态资源 -->
<mvc:default-servlet-handler/>
<!--<mvc:resources mapping="/**" location="/" />-->
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
db.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.72.103:3306/test
jdbc.username=root
jdbc.password=123456
java代码bean:
User.java
package com.bean;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String name;
private int age;
private Date birthday;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
}
dao
UserDao.java
package com.dao;
import com.bean.User;
import java.util.List;
public interface UserDao {
void saveUser(User user);
void updateUser(User user);
void deleteUser(Integer id);
User getUserById(Integer id);
List<User> getAll();
}
dao.impl
UserDaoImpl.java
package com.dao.impl;
import com.bean.User;
import com.dao.UserDao;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class UserDaoImpl implements UserDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Override
public void saveUser(User user) {
jdbcTemplate.update("insert into tb_user(name,age,birthday) values(?,?,?)",
user.getName(),user.getAge(),user.getBirthday());
}
@Override
public void updateUser(User user) {
jdbcTemplate.update("update tb_user set name=?,age=?,birthday=? where id=?",
user.getName(),user.getAge(),user.getBirthday(),user.getId());
}
@Override
public void deleteUser(Integer id) {
jdbcTemplate.update("delete from tb_user where id=?", id);
}
@Override
public User getUserById(Integer id) {
List<User> users = jdbcTemplate.query("select * from tb_user where id=?", new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setBirthday(rs.getDate("birthday"));
user.setAge(rs.getInt("age"));
user.setId(rs.getInt("id"));
return user;
}
}, id);
return (users!=null&&users.size()>0)?users.get(0):null;
}
@Override
public List<User> getAll() {
List<User> users = jdbcTemplate.query("select * from tb_user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int i) throws SQLException {
User user = new User();
user.setName(rs.getString("name"));
user.setBirthday(rs.getDate("birthday"));
user.setAge(rs.getInt("age"));
user.setId(rs.getInt("id"));
return user;
}
});
return users;
}
}
service
UserService.java
package com.service;
import com.bean.User;
import java.util.List;
public interface UserService {
void add(User user);
void update(User user);
void remove(Integer id);
User get(Integer id);
List<User> getAll();
}
service.impl
UserServiceImpl.java
package com.service.impl;
import comu.bean.User;
import com.dao.UserDao;
import com.service.UserService;
import java.util.List;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void add(User user) {
userDao.saveUser(user);
}
@Override
public void update(User user) {
userDao.updateUser(user);
}
@Override
public void remove(Integer id) {
userDao.deleteUser(id);
}
@Override
public User get(Integer id) {
return userDao.getUserById(id);
}
@Override
public List<User> getAll() {
return userDao.getAll();
}
}
web.controller
UserController.jaa
package com.web.controller;
import com.bean.User;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/list")
public String list(Model model) {
List<User> users = userService.getAll();
model.addAttribute("users", users);
return "list";
}
// 转到输入页面
@GetMapping("/input")
public String input(Model model, @RequestParam(value="id", required = false) Integer _id) {
if (null != _id) {
// 修改
User user = userService.get(_id);
model.addAttribute("user", user);
}
return "input";
}
// 保存操作
@PostMapping("/saveOrUpdate")
public String saveOrUpdate(User user, String birth) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
user.setBirthday(sdf.parse(birth));
} catch (ParseException e) {
user.setBirthday(new Date());
}
if (user.getId() == null) {
userService.add(user);
} else {
userService.update(user);
}
return "redirect:/user/list";
}
// 删除
@GetMapping("/del/{id}")
public String del(@PathVariable("id") Integer id) {
userService.remove(id);
return "redirect:/user/list";
}
}
前端页面:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:beans.xml</param-value>
</context-param>
<!-- 配置监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置编码过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
web-inf下的views下的:
input.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>编写</title>
</head>
<body>
<h3>编辑信息</h3>
<form action="/user/saveOrUpdate" method="post">
<input type="hidden" name="id" value="${user.id}" />
姓名:<input type="text" name="name" value="${user.name}" /><br/>
年龄:<input type="text" name="age" value="${user.age}" /><br/>
生日:<input type="text" name="birth" value="${user.birthday}" /><br/>
<input type="submit" value="提交" />
</form>
</body>
</html>
list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>列表</title>
<script type="text/javascript">
function del(id) {
if (confirm("你确定要删除吗?")) {
window.location = "/user/del/" + id;
}
}
</script>
</head>
<body>
<table border="1" width="400">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
<th>操作</th>
</tr>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birthday}</td>
<td><a href="javascript:void()" onclick="del(${user.id})">删除</a> | <a href="/user/input?id=${user.id}">修改</a></td>
</tr>
</c:forEach>
</table>
</body>
</html>
这样整个项目就完成了。