Java之使用spring+springMVC+myBatis实现用户管理系统
一、什么是SSM框架?SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。MyBatis是一个支
一、什么是SSM框架?
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。
- 其中spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
- SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。
二、项目准备
本项目使用的是maven模型
1、首先创建Maven项目选择
2、点击next
3、但是由于国外的数据仓下载jar包速度会偏慢,可以使用阿里云镜像进行下载,可以在.m2文件夹下的setting.xml中加入以下代码
-<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
4、在user setting files选择setting.xml
5、在properties中添加属性
archeTypeCatlog、internal可以加快Maven骨架生成速度。
6、项目创建完成之后进行配置文件
可以根据下面的链接进行配置
Maven配置文件与jsp
密码是6po5
7、创建规范文件结构
用户管理系统项目实现
- 用户登录功能
需要实现的功能是判断用户登录的账号与密码,成功进入页面,错误则登录失败。调用login请求实现
关键代码实现
been.User
public class User {
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public User(String username, String password) {
this.username = username;
this.password = password;
}
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
controller
@Controller
@RequestMapping("/user")
public class UserController {
//new对象
@Autowired
private IUserService userService;
@RequestMapping("/login.do")
public ModelAndView login(User user, HttpSession session){
boolean flag=userService.login(user.getUsername(),user.getPassword());
ModelAndView modelAndView=new ModelAndView();
if(flag){
session.setAttribute("user",user);
modelAndView.setViewName("main");
}else {
modelAndView.setViewName("../failer");
}
return modelAndView;
}
UserDao
User findUserByUserName(String username);
UserService
@Service
public class UserService implements IUserService {
@Autowired
private UserDao userDao;
@Override
public boolean login(String username, String password) {
User user = userDao.findUserByUserName(username);
if (user!=null && user.getPassword().equals(password)){
return true;
}
return false;
}
IUserService
boolean login(String username,String password);
在UserMapper.xml中写sql语句查询数据库数据
<select id="findUserByUserName" parameterType="String" resultType="com.zhongruan.been.User">
select * from tb_usr where username=#{username}
</select>
-
完成对用户增删改查功能的实现
-
删除用户
通过id删除用户信息,调用delete方法,返回findAll.do,显示删除后的信息
-
新增用户
向数据库里新增用户信息,调用add方法,返回findAll.do,显示新增用户后的信息 -
修改用户信息
首先调用selectbyid查询出当前用户信息,再使用update方法改写用户信息,修改完成返回findAll.do方法,显示修改完成的用户信息
-
增删改查关键代码
controller
@RequestMapping("/findAll.do")
public ModelAndView findAll(@RequestParam(defaultValue = "1") int currentPage){
PageInfo<User> pageInfo=userService.findAll(currentPage);
ModelAndView modelAndView=new ModelAndView();
modelAndView.addObject("pageInfo", pageInfo);
modelAndView.setViewName("user-list");
return modelAndView;
}
@RequestMapping("/deleteById.do")
public String detele(int id){
userService.deleteById(id);
return "redirect:findAll.do";
}
@RequestMapping("/add.do")
public String add(User user){
userService.add(user);
return "redirect:findAll.do";
}
@RequestMapping("/toUpdate.do")
public ModelAndView toUpdate(int id){
User user=userService.selectUserById(id);
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("user-update");
modelAndView.addObject("user",user);
return modelAndView;
}
@RequestMapping("/update.do")
public String update(User user){
userService.update(user);
return "redirect:findAll.do";
}
UserDao
List<User> findAll(int start);
void deleteById(int id);
void add(User user);
User selectById(int id);
void update(User user);
UserService
@Override
public void deleteById(int id){
userDao.deleteById(id);
}
@Override
public void add(User user) {
userDao.add(user);
}
@Override
public User selectUserById(int id) {
return userDao.selectById(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public PageInfo<User> findAll(int currentPage) {
PageInfo<User> pageInfo=new PageInfo<>();
pageInfo.setSize(5);
int tc=userDao.getTotalCount();
pageInfo.setTatalCount(tc);
int tp=(int)Math.ceil(tc/5.0);
pageInfo.setTotalPage(tp);
if (currentPage<1){
pageInfo.setCurrentPage(1);
}else if(currentPage>tp){
pageInfo.setCurrentPage(tp);
}else {
pageInfo.setCurrentPage(currentPage);
}
int start=(pageInfo.getCurrentPage()-1)*5;
List<User> userList=userDao.findAll(start);
pageInfo.setList(userList);
return pageInfo;
}
IUserService
void deleteById(int id);
void add(User user);
User selectUserById(int id);
void update(User user);
PageInfo<User> findAll(int currentPage);
- UserMapper.xml的sql语句
<select id="findAll" parameterType="int" resultType="com.zhongruan.been.User">
select * from tb_usr limit #{start},5
</select>
<delete id="deleteById" parameterType="Int">
delete from tb_usr where id = #{id};
</delete>
<insert id="add" parameterType="com.zhongruan.been.User">
insert into tb_usr (username,password) values (#{username},#{password})
</insert>
<select id="selectById" parameterType="int" resultType="com.zhongruan.been.User">
select * from tb_usr where id=#{id}
</select>
<update id="update" parameterType="com.zhongruan.been.User">
update tb_usr set username=#{username},password=#{password} where id=#{id}
</update>
- 用户表的分页功能实现
一次性将所有的数据查询出来会增加服务器的负荷,所以需要用分页有选择性地将数据读取。
一每页五条记录为例
需要定义list、size (每页查询记录的数量)、totalcount (查询所有记录的数量)、totalpage(查询所有记录所需要的页数) 、currentPage(显示当前页数)。
benn.PageInfo类
public class PageInfo<T> {
private List<T> list;
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
public int getTatalCount() {
return tatalCount;
}
public void setTatalCount(int tatalCount) {
this.tatalCount = tatalCount;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
private int totalPage;
private int size;
private int tatalCount;
private int currentPage;
}
Dao
int getTotalCount();
UserMapper.xml的sql语句
<select id="getTotalCount" resultType="int">
select count(*) from tb_usr
</select>
Jsp核心代码
<div class="box-tools pull-right">
<ul class="pagination">
<li><a href="${pageContext.request.contextPath}/user/findAll.do" aria-label="Previous">首页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageInfo.currentPage-1}">上一页</a></li>
<c:forEach begin="1" end="${pageInfo.totalPage}" var="pageNum">
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageNum}">${pageNum}</a></li>
</c:forEach>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageInfo.currentPage+1}">下一页</a></li>
<li><a href="${pageContext.request.contextPath}/user/findAll.do?currentPage=${pageInfo.totalPage}" aria-label="Next">尾页</a></li>
</ul>
</div>
但这样会有一个小Bug
在首页的时候点击向前一页时或者最后一页向后会报错,所以在Service中改写了部分
if (currentPage<1){
pageInfo.setCurrentPage(1);
}else if(currentPage>tp){
pageInfo.setCurrentPage(tp);
}else {
pageInfo.setCurrentPage(currentPage);
}
这样在currentPage为0时可以显示第一页。
10. 过滤器
其功能主要是在filter里面判断session里是否有user,如果没有user并且当前的请求不是login.do 跳转到登入页面否则继续执行。
新建filter文件夹和LoginFilter
public class loginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) servletRequest;
HttpServletResponse response=(HttpServletResponse) servletResponse;
HttpSession session=request.getSession();
User user=(User) session.getAttribute("user");
String uri=request.getRequestURI();
if(user==null&&uri.indexOf("login.do")==-1){
response.sendRedirect(request.getContextPath()+"../login.jsp");
}else {
filterChain.doFilter(request,response);
}
}
@Override
public void destroy() {
}
}
配置web.xml
<filter>
<filter-name>loginFilter</filter-name>
<filter-class>com.zhongruan.filter.loginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>loginFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
这样可以拦截所有.do请求,当session中没有user或不是login返回登录页面。
更多推荐
所有评论(0)