MyBatis第十章:项目案例——insert增加数据操作及sql片段配置

  • Post author:
  • Post category:其他



该系列为imooc Java数据库开发与实战应用中MyBatis课程笔记,跟随课程加入自己见解,同时也为项目中碰到一些问题做了解答


本章节是mybatis中使用insert增加数据操作

映射配置:sql片段

映射配置:insert配置



一、在mapper中增加insert配置

    <!-- 插入数据:返回记录的id值 -->
    <insert id="addUser" useGeneratedKeys="true" keyProperty="id">
        insert into users(username,userpass,nickname,age,gender,email,phone,createTime,updateTime,lastLogTime,userStatus,remark)
        values (#{name},#{userpass},#{nickname},#{age},#{gender},#{email},#{phone},#{createTime},#{updateTime},#{lastLogTime},#{userStatus},#{remark})
    </insert>

Mybatis 配置文件 Mapper参数


useGeneratedKeys=“true” keyProperty=“id”

  1. useGeneratedKeys设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。(该表中id为自增列,且为主键)
  2. useGeneratedKeys参数只针对 insert 语句生效,默认为 false;
  3. keyproperty指明数据库中返回的主键id给实体类中的哪个属性, keyProperty=“id”即把数据库中返回的主键值赋予实体类中的id属性



二、在UserDAO中增加insert配置的sql语句的使用

    /**
     * 增加一个新用户数据到数据的方法
     * @return
     */
    public Users addUser(Users user) {
        try {
            //返回值:是insert执行过程中影响的行数
            getSqlSession().insert("addUser",user);
            //将一个用户数据添加到数据库,添加后,一定要提交数据
            sqlSession.commit();//进行数据提交,提交后我们才能在数据库查看到对应的数据

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
        return user;
    }

我们在UserDAO中只要执行insert操作,自动生成的主键,就会自动赋值到user的id中



三、通过Servlet调用UserDAO,进行数据操作

  1. com.damu.servlet>新建UsersAddServlet
package com.damu.servlet;

import com.damu.dao.UsersDAO;
import com.damu.entity.Users;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Date;

@WebServlet("/addusers")
public class UsersAddServlet extends HttpServlet {
    private UsersDAO usersDAO=new UsersDAO();
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取要添加的用户数据
        String username=req.getParameter("username");
        String userpass=req.getParameter("userpass");
        String nickname=req.getParameter("nickname");
        String age=req.getParameter("age");
        String gender=req.getParameter("gender");
        String email=req.getParameter("email");
        String phone=req.getParameter("phone");
        //根据用户数据创建一个用户对象
        Users user=new Users(username,userpass,nickname,Integer.parseInt(age),gender,email,phone,new Date(),new Date(),new Date(),0);
        //需先在Users中创建好构造方法
        //将用户对象添加到数据库中
        user=usersDAO.addUser(user);
        //查看刚新增的用户数据
        resp.sendRedirect("/detail?id="+user.getId());
    }
}



四、新建添加用户的页面

  1. webapp>新建addusers.jsp
  2. 复制detail.jsp代码至addusers.jsp
  3. 修改并完善addusers.jsp
<%--
  Created by IntelliJ IDEA.
  User: 35208
  Date: 2021/4/7
  Time: 0:58
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
    <title>慕课网用户管理中心</title>
    <link rel="stylesheet" href="lib/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <script src="lib/2.2.4/jquery-1.12.4.min.js"></script>
    <script src="lib/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="page-header">
            <h1>慕课网管理后台<small>用户数据管理中心</small></h1>
        </div>
    </div>
    <div class="row">
        <div class="jumbotron">
            <h1>MyBstis基础入门课程</h1>
            <p>通过一个项目来完成基础部分学习</p>
            <p><a class="btn btn-primary btn-lg" href="#" role="button">查看更多,请上慕课网</a></p>
        </div>
    </div>

    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form class="form-horizontal"action="${pageContext.request.contextPath}/addusers">
                <div class="form-group">
                    <label for="username" class="col-sm-2 control-label">用户账号</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="username"  name="username" placeholder="请输入用户账号">
                    </div>
                </div>
                <div class="form-group">
                    <label for="userpass" class="col-sm-2 control-label">登录密码</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="userpass"  name="userpass" placeholder="请输入登录密码">
                    </div>
                </div>
                <div class="form-group">
                    <label for="nickname" class="col-sm-2 control-label">昵称</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="nickname"  name="nickname" placeholder="请输入昵称">
                    </div>
                </div>
                <div class="form-group">
                    <label for="age" class="col-sm-2 control-label">年龄</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="age"  name="age" placeholder="请输入年龄">
                    </div>
                </div>
                <div class="form-group">
                    <label for="gender" class="col-sm-2 control-label">性别</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="gender"  name="gender" placeholder="请输入性别">
                    </div>
                </div>
                <div class="form-group">
                    <label for="phone" class="col-sm-2 control-label">联系方式</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="phone"  name="phone" placeholder="请输入联系方式">
                    </div>
                </div>
                <div class="form-group">
                    <label for="email" class="col-sm-2 control-label">邮箱</label>
                    <div class="col-sm-10">
                        <input type="text" class="form-control" id="email"  name="email" placeholder="请输入邮箱">
                    </div>
                </div>
                <div class="form-group">
                   <input type="submit" value="点击新增用户" class="btn btn-primary">
                </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>

  1. 在首页中index.jsp中添加addusers.jsp跳转
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>慕课网用户管理中心</title>
    <link rel="stylesheet" href="lib/bootstrap-3.3.7-dist/css/bootstrap.min.css">
    <script src="lib/2.2.4/jquery-1.12.4.min.js"></script>
    <script src="lib/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="page-header">
            <h1>慕课网管理后台<small>用户数据管理中心</small></h1>
        </div>
    </div>
    <div class="row">
        <div class="jumbotron">
            <h1>MyBstis基础入门课程</h1>
            <p>通过一个项目来完成基础部分学习</p>
            <p><a class="btn btn-primary btn-lg" href="#" role="button">查看更多,请上慕课网</a></p>
            <p><a class="btn btn-primary btn-lg" href="${pageContext.request.contextPath}/addusers.jsp" role="button">新增用户</a></p>
            <%--新增跳转addusers链接--%>
        </div>
    </div>
    <div class="row">
        <table class="table table-hover table-striped">
            <tr>
                <th>用户编号</th>
                <th>登录账号</th>
                <th>用户昵称</th>
                <th>邮箱</th>
                <th>联系方式</th>
                <th>账号创建时间</th>
                <th>用户状态</th>
                <th>操作</th>
            </tr>
            <c:forEach var="user" items="${usersList}">
            <tr>
                <td>${user.id}</td>
<%--                <td>${user.username}</td>--%>
                <td>${user.name}</td>
                <td>${user.nickname}</td>
                <td>${user.email}</td>
                <td>${user.phone}</td>
                <td>${user.createTime}</td>
                <c:if test="${user.userStatus == 0}">
                    <td>正常</td>
                </c:if>
                <c:if test="${user.userStatus == 1}">
                    <td>锁定</td>
                </c:if>
                <c:if test="${user.userStatus == 2}">
                    <td>删除</td>
                </c:if>
                <td>
                    <a href="${pageContext.request.contextPath}/detail?id=${user.id}">查看</a>
                    <a href="">修改</a>
                    <a href="">删除</a>
                </td>
            </tr>
            </c:forEach>
        </table>
    </div>
</div>
</body>
</html>



五、启动项目进行试验是否成功

  1. 在页面中填写数据

    在这里插入图片描述

    成功跳转detail.jsp

    在这里插入图片描述

  2. 打开数据库查看,已成功插入数据

    在这里插入图片描述



六、使用sql片段完善mapper映射文件


什么是sql片段?


把我们在操作过程中,一部分sql语句当成一个单独的片段,方便在其他地方重复使用


使用

  1. 定义sql片段
<sql id="user_fields">sql语句的片段,如字段</sql>
  1. 使用sql片段,如insert标签中引入
<include refid="sql标签的id值"></include> 


完善mapper映射文件

    <sql id="user_fields">
        username,userpass,nickname,age,gender,email,phone,createTime,updateTime,lastLogTime,userStatus,remark
    </sql>
    <!-- 插入数据:返回记录的id值 -->
    <insert id="addUser" useGeneratedKeys="true" keyProperty="id">
        insert into users(<include refid="user_fields"></include>)
        values (#{name},#{userpass},#{nickname},#{age},#{gender},#{email},#{phone},#{createTime},#{updateTime},#{lastLogTime},#{userStatus},#{remark})
    </insert>



版权声明:本文为weixin_40933915原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。