该系列为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”
- useGeneratedKeys设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。(该表中id为自增列,且为主键)
- useGeneratedKeys参数只针对 insert 语句生效,默认为 false;
- 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,进行数据操作
- 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());
}
}
四、新建添加用户的页面
- webapp>新建addusers.jsp
- 复制detail.jsp代码至addusers.jsp
- 修改并完善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>
- 在首页中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>
五、启动项目进行试验是否成功
-
在页面中填写数据
成功跳转detail.jsp
-
打开数据库查看,已成功插入数据
六、使用sql片段完善mapper映射文件
什么是sql片段?
把我们在操作过程中,一部分sql语句当成一个单独的片段,方便在其他地方重复使用
使用
- 定义sql片段
<sql id="user_fields">sql语句的片段,如字段</sql>
- 使用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 版权协议,转载请附上原文出处链接和本声明。