实训日志2 SSM框架了解和实现简单用户管理系统的增删改查

SSM框架

1、Spring技术

    spring是一个容器框架,它可以接管web层,业务层,dao层,持久层的各个组件,并且可以配置各种bean, 并可以维护bean与bean的关系。

  • IOC 控制反转:

        不再需要程序员去显式地new一个对象,而是让Spring框架帮你来完成这一切。IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。把创建对象和维护对象之间的关系的权利从程序转移到spring的容器。

  • AOP 面向切面编程

       核心:在不增加代码的基础上,还增加新功能。

       什么是切面?你可以这样想:一个公司有多个销售部,都需要行政帮忙搞定日常的订文具、机票、办公室、出差酒店什么的,都需要财务搞定报销、收付款什么的事务吧,要仓库帮忙发货什么的。不可能每个销售部都去招几个行政、财务和仓管什么吧,销售部门只要做好业务就行了,订文具什么的事情交个专门的部门去办就行。在Spring AOP 中,把这些公共的事务,也就是这个例子中的行政啊、财务啊、仓管啊,看成一个个切面,让你的开发的时候,专注于核心业务。

2、Spring MVC

C - Controller:控制器。接受用户请求,调用 Model 处理,然后选择合适的View给客户。

M - Model:模型。业务处理模型,接受Controller的调遣,处理业务,处理数据。

V - View:视图。返回给客户看的结果。注意这里的客户未必是人,可能是浏览器,可能是APP

3、MyBatis

    是对jdbc的封装,它让数据库底层操作变的透明。Mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

 

SSM框架简单用户管理系统的增删改查的实现

用户登陆的实现以及用户的增删改查实现

1、首先仍然先创建User实体类:

public class User {
    private int id;
    private String username;
    private String password;

    public User() {
    }

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2、创建IUserDao接口和UserMapper.xml进行关联,

public interface IUserDao {
    User findUserByUserName(String username);
    List<User> findAll();

    void deleteById(int id);

    void add(User user);

    User selectUserById(int id);

    void update(User user);
}

UserMapper.xml中写入相应的数据库操作语句,包括增删改查操作,与IUserDao中方法一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.zr.dao.IUserDao">
    <!--别名user小写-->
    <select id="findUserByUserName" parameterType="String" resultType="user">
        select * from tb_user where username=#{username}
    </select>
    <select id="findAll" resultType="user">
        select * from tb_user
    </select>
    <select id="deleteById" resultType="user">
        delete from tb_user where id=#{id}
    </select>
    <select id="add" resultType="user">
        insert into tb_user(username,password) values (#{username},#{password})
    </select>
    <select id="selectUserById" parameterType="int" resultType="user">
        select * from tb_user where id=#{id}
    </select>
    <update id="update" parameterType="user">
        update tb_user set username=#{username},password=#{password}
        where id=#{id}
    </update>
</mapper>

3、编写Service层,IUserService接口和UserServiceImpl对其的具体实现

IUserService

public interface IUserService {

    boolean login(String username,String password);

    List<User> findAll();

    void deleteById(int id);

    void add(User user);

    User selectUserById(int id);

    void update(User user);
}

UserServiceImpl,这里可以看到我们让容器给我们自动创建了IUserDao类,在其中写了包括登陆,查询所有,删除,添加以及更新修改的逻辑业务。

@Service
public class UserServiceImpl implements IUserService {
    //容器创建new
    @Autowired
    private IUserDao 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;
    }

    @Override
    public List<User> findAll() {
        return userDao.findAll();
    }

    @Override
    public void deleteById(int id) {
        userDao.deleteById(id);
    }

    @Override
    public void add(User user) {
        userDao.add(user);
    }

    @Override
    public User selectUserById(int id) {
        User user=userDao.selectUserById(id);
        return user;
    }

    @Override
    public void update(User user) {
        userDao.update(user);
    }
}

4、编写Controller层,下面为UserConntroller具体代码,这里主要调用service层方法,创建modelandview并返回相应视图。同时这里也有使用redirect重定向,redirect是直接跳转到其他页面:

@Controller
@RequestMapping("user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("login.do")
    public ModelAndView login(User user){

        boolean flag=userService.login(user.getUsername(),user.getPassword());
        ModelAndView modelAndView=new ModelAndView();
        if(flag){
            modelAndView.setViewName("main");
        }
        else{
            modelAndView.setViewName("../failer");
        }

        return modelAndView;
    }

    @RequestMapping("findAll.do")
    public  ModelAndView findAll(){
        List<User> users=userService.findAll();
        ModelAndView mv=new ModelAndView();
        mv.setViewName("user-list");
        mv.addObject("users",users);

        return mv;

    }

    @RequestMapping("deleteById.do")
    public  String  delete(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.addObject("user",user);
        modelAndView.setViewName("user-update");

        return modelAndView;
    }

    @RequestMapping("update.do")
    public String update(User user){
        userService.update(user);

        return "redirect:findAll.do";
    }
}

5、实现前端的相应,跳转到指定界面以及实现相应的操作

首先为登陆表单,action为/user/login.do,所以他会到conntroller中找到与/user/login.do对应的视图,进行操作处理:

<form  method="post" action="/user/login.do">
				<div class="form-group has-feedback">
					<input type="text"  class="form-control"
						placeholder="用户名" name="username"> <span
						class="glyphicon glyphicon-envelope form-control-feedback"></span>
				</div>
				<div class="form-group has-feedback">
					<input type="password"  class="form-control"
						placeholder="密码" name="password"> <span
						class="glyphicon glyphicon-lock form-control-feedback"></span>
				</div>
				<div class="row">
					<div class="col-xs-8">
						<div class="checkbox icheck">
							<label><input type="checkbox"> 记住 下次自动登录</label>
						</div>
					</div>
					<!-- /.col -->
					<div class="col-xs-4">
						<button type="submit" class="btn btn-primary btn-block btn-flat">登录</button>
					</div>
					<!-- /.col -->
				</div>
			</form>

用户管理模块将所有用户展现,具体如下,在conntroller层中,对list-users界面视图通过mv.setViewName("user-list") ; mv.addObject("users",users) ; 将users的值传入了user-list的界面上,于是在前端界面进行引用展现;

同时本界面也有对每条记录的删除,修改更新功能,,以删除为例,不仅传入相应的视图位置,同时将id作为参数传入,在后端对其进行处理,完成后再重定向回到所有用户界面

<tbody>
<c:forEach items="${users}" var="user">
	<tr>
	<td><input id="ids" name="ids" type="checkbox" value="${user.id}"></td>
	<td>${user.id}</td>
	<td>${user.username}</td>
	<td>${user.password}</td>
	<td class="text-center">
	<a href="/user/toUpdate.do?id=${user.id}" class="btn bg-olive btn-xs">更新</a>
	<a href="/user/deleteById.do?id=${user.id}" class="btn bg-olive btn-xs">删除</a>
	<a href="" class="btn bg-olive btn-xs">添加角色</a>
												
	</td>
	</tr>
</c:forEach>
									
</tbody>

添加用户的表单如下,转到user/add.do的视图进行处理返回,同时完成后也重定向回到所有用户界面:

<form action="${pageContext.request.contextPath}/user/add.do"
				method="post">
				<!-- 正文区域 -->
				<section class="content"> <!--产品信息-->

				<div class="panel panel-default">
					<div class="panel-heading">用户信息</div>
					<div class="row data-type">
						<%--<div class="col-md-2 title">id</div>--%>
						<%--<div class="col-md-4 data">
							<input type="text" class="form-control" name="id"
								   placeholder="id" value="">
						</div>--%>

						<div class="col-md-2 title">用户名称</div>
						<div class="col-md-4 data">
							<input type="text" class="form-control" name="username"
								placeholder="用户名称" value="">
						</div>
						<div class="col-md-2 title">密码</div>
						<div class="col-md-4 data">
							<input type="password" class="form-control" name="password"
								placeholder="密码" value="">
						</div>


					</div>
				</div>
				<!--订单信息/--> <!--工具栏-->
				<div class="box-tools text-center">
					<button type="submit" class="btn bg-maroon">保存</button>
					<button type="button" class="btn bg-default"
						onclick="history.back(-1);">返回</button>
				</div>
				<!--工具栏/--> </section>
				<!-- 正文区域 /-->
			</form>

更新用户信息,首先在用户管理界面传入用户id,查询数据库将用户信息传入更新用户信息的界面,进行修改操作:

<form action="${pageContext.request.contextPath}/user/update.do"
				method="post">
				<!-- 正文区域 -->
				<section class="content"> <!--产品信息-->

				<div class="panel panel-default">
					<div class="panel-heading">用户信息</div>
					<div class="row data-type">
						<div class="col-md-2 title">id</div>
						<div class="col-md-4 data">
							<input type="text" class="form-control" name="id"
								   placeholder="id" value="${user.id}">
						</div>

						<div class="col-md-2 title">用户名称</div>
						<div class="col-md-4 data">
							<input type="text" class="form-control" name="username"
								placeholder="用户名称" value="${user.username}">
						</div>
						<div class="col-md-2 title">密码</div>
						<div class="col-md-4 data">
							<input type="password" class="form-control" name="password"
								placeholder="密码" value="${user.password}">
						</div>


					</div>
				</div>
				<!--订单信息/--> <!--工具栏-->
				<div class="box-tools text-center">
					<button type="submit" class="btn bg-maroon">保存</button>
					<button type="button" class="btn bg-default"
						onclick="history.back(-1);">返回</button>
				</div>
				<!--工具栏/--> </section>
				<!-- 正文区域 /-->
			</form>

下面为实现截图:

用户管理界面:

修改用户界面:

添加用户界面:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值