SSMCRUD+MyBatis分页+Ajax登录验证+显示当前登录用户

本文介绍了如何使用SSM(Spring、SpringMVC、MyBatis)实现CRUD操作,结合MyBatis逆向工程生成实体类和DAO层。详细步骤包括设置ApplicationContest.xml文件配置数据库连接,创建SpringMVC的spring-servlet.xml文件,设计service层,以及分页展示。同时,文章讲解了Ajax进行登录验证的方法,并探讨了前后端分离时的跨域请求处理。
摘要由CSDN通过智能技术生成

创建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>

到这就完啦,大家加油啦!有更好的写法也可以评论啊

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值