创建maven工程:
需要的依赖有:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.25.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.25.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.25.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.0</version>
</dependency>
<!-- 下面的这两个是处理跨域请求需要的包,如果项目不是前后端分离就不用导入 -->
<!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.thetransactioncompany/java-property-utils -->
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>java-property-utils</artifactId>
<version>1.9.1</version>
</dependency>
</dependencies>
实体类和dao层就使用了MyBatis的逆向工程,这个百度一大堆,就不做具体描述
标题创建ApplicationContest.xml文件来处理Mybatis的数据库连接
<context:component-scan base-package="com.woniu.service"></context:component-scan>
<bean id="ds" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost/test?characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="这里写你自己的数据库密码"></property>
</bean>
<bean id="sf" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="ds"></property>
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property>
</bean>
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.woniu.dao"></property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="ds"></property>
</bean>
<tx:annotation-driven/>
创建spring-servlet.xml文件管理SpringMVC
<context:component-scan base-package="com.woniu.web"></context:component-scan>
<mvc:default-servlet-handler/>
<mvc:annotation-driven>
</mvc:annotation-driven>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/U/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
创建service层(业务层)
先创建一个service的接口命名为IUserService
public interface IUserService {
void save(User user);
void delete(Integer id);
void update(User user);
User findOne(Integer id);
List<User> findAll();
Boolean isfindName(String name);
Boolean login(String name,Double money);
}
实现接口:
//这个注解是告诉spring这是个业务层
@Service
//这个注解是声明式事务
@Transactional
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper mapper;
@Override
public void save(User user) {
mapper.insert(user);
}
@Override
public void delete(Integer id) {
mapper.deleteByPrimaryKey(id);
}
@Override
public void update(User user) {
mapper.updateByPrimaryKey(user);
}
@Override
public User findOne(Integer id) {
return mapper.selectByPrimaryKey(id);
}
@Override
public List<User> findAll() {
return mapper.selectByExample(null);
}
@Override
public Boolean isfindName(String name) {
System.out.println("service实现类的"+name);
User name2 = mapper.findUserName(name);
System.out.println(name2);
if (name2==null) {
return false;
}
return true;
}
@Override
public Boolean login(String name, Double money) {
System.out.println("service:"+name+","+money);
User login = mapper.login(name, money);
System.out.println(login);
if(login==null) {
return false;
}
return true;
}
}
分页展示:
创建一个page.java
public class Page {
int start = 0;
int count = 5;
int last = 0;
public int getStart() {
return start;
}
public void setStart(int start) {
this.start = start;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getLast() {
return last;
}
public void setLast(int last) {
this.last = last;
}
public void caculateLast(int total) {
// 假设总数是50,是能够被5整除的,那么最后一页的开始就是45
if (0 == total % count)
last = total - count;
// 假设总数是51,不能够被5整除的,那么最后一页的开始就是50
else
last = total - total % count;
}
}
创建控制层(UserController)
@SuppressWarnings("all")
@Controller
@RequestMapping("")
public class UserController {
@Autowired
private IUserService service;
@RequestMapping("save")
public ModelAndView save(User user) {
service.save(user);
System.out.println(user.getName());
return new ModelAndView("redirect:/findAll");
}
@RequestMapping("delete")
public ModelAndView delete(Integer id) {
service.delete(id);
System.out.println(id);
return new ModelAndView("redirect:/findAll");
}
@RequestMapping("update")
public ModelAndView updata(User user) {
service.update(user);
return new ModelAndView("redirect:/findAll");
}
@RequestMapping("findOne")
public ModelAndView findOne(User user) {
User one = service.findOne(user.getId());
ModelAndView mv = new ModelAndView("index");
mv.addObject("one", one);
return mv;
}
@RequestMapping("findAll")
public ModelAndView findAll(Page page) {
ModelAndView mv = new ModelAndView();
PageHelper.offsetPage(page.getStart(), 5);
List<User> list = service.findAll();
int total = (int) new PageInfo<>(list).getTotal();
page.caculateLast(total);
// 放入转发参数
mv.addObject("list", list);
// 放入jsp路径
mv.setViewName("index");
return mv;
}
@ResponseBody
@RequestMapping("findUserName")
public Map findUserName(String name) {
System.out.println("进入方法");
System.out.println("name是" + name);
Boolean name2 = service.isfindName(name);
Map map = new HashMap<>();
if (name2) {
System.out.println(name2);
map.put("code", "success");
} else {
map.put("code", "error");
System.out.println(name2);
}
return map;
}
@ResponseBody
@RequestMapping("login")
public Map login(String name, Double money,HttpSession session) {
System.out.println("进入方法");
System.out.println("name是" + name);
System.out.println("money是" + money);
session.setAttribute("user", name);
Boolean login = service.login(name, money);
System.out.println(login);
Map map = new HashMap<>();
if (login) {
map.put("code", "success");
} else {
map.put("code", "error");
}
return map;
}
}
前台页面
在WebApp下创建jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
</head>
<style>
#id1{
float: left;
width:50%;
}
</style>
<body style="width: 100%">
<div style="text-align:center">
<a href="?start=0">首 页</a>
<a href="?start=${page.start-page.count}">上一页</a>
<a href="?start=${page.start+page.count}">下一页</a>
<a href="?start=${page.last}">末 页</a>
</div>
<div>当前登录用户为:${user}</div>
<div>
<table align='center' border='1' cellspacing='0' class="table">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>birthday</th>
<th>money</th>
<th>修改</th>
<th>删除</th>
</tr>
</thead>
<c:forEach items="${list}" var="s">
<tbody>
<td>${s.id}</td>
<td>${s.name}</td>
<td>${s.birthday}</td>
<td>${s.money}</td>
<td><a href="findOne?id=${s.id}">修改</a></td>
<td><a href="delete?id=${s.id}">删除</a></td>
</tbody>
</c:forEach>
</table>
</div>
<div style="width: 50%">
<table align='center' border='1' cellspacing='0'>
<form action="save" method="post">
<input type="hidden"><br>
name:<input name="name"><br>
birthday:<input name="birthday"><br>
money:<input name="money"><br>
<button >添加</button>
</form>
</table>
</div>
<div style="width: 50%">
<table align='center' border='1' cellspacing='0'>
<form action="update" method="post">
<input type="hidden" value="${one.id }" name="id"><br>
name:<input value="${one.name }" name="name"><br>
birthday:<input value="${one.birthday }" name="birthday"><br>
money:<input value="${one.money }" name="money"><br>
<button >确定</button>
</form>
</table>
</div>
</body>
</html>
最后,最重要的一点
在Web.xml中配置,配置没问题。正常使用就行
<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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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:spring-servlet.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.xml里加上这段就能处理前后端分离的跨域请求的问题
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name> <!--配置授信的白名单的域名! -->
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value> GET, POST, HEAD, PUT, DELETE </param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value> Accept, Origin, X-Requested-With, Content-Type, Last-Modified </param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>