前言
- 我的所有博客操作均有相应截图,所以只要跟着做,一定是能跑通的。
本篇讲到了在后台实现数据库的操作,涉及的数据的增删改查,以及一些框架自带函数的初步使用。如果没有配置好SSM框架,那就赏脸看一下
https://blog.csdn.net/babybabyup/article/details/79687097 配置篇呗!
工具
- 本机mysql数据库(database=helloword,table=user)
- IDEA
具体操作
自动生成数据库函数
- 打开IDEA左栏中的
Maven project
->helloworld Maven WebAPP
->Plugins
->mybatis-generator
双击出现的mybatieos-generator:generator
等待其完成后,控制台输出
并且生成相应的函数以及实体代码,dao层接口
在dao
层接口中,mybatis
生成了六个函数接口,分别是
int deleteByPrimaryKey(Integer id);
int insert(User record);
int insertSelective(User record);
User selectByPrimaryKey(Integer id);
int updateByPrimaryKeySelective(User record);
int updateByPrimaryKey(User record);
解释一下各个函数的意义吧
deleteByPrimaryKey(Integer id)
:通过主键id在数据库中删除一条数据,成功则返回1,失败则返回0;insert(User record)
:插入数据,要注意如果数据库中的属性不能为空,那么对象记录record的所有属性一定要全部不为null,否则会插入失败。insertSelective(User record)
:selectByPrimaryKey(Integer id)
:通过主键id进行查找,查找到了则返回实体User,也就是一个对象,数据库中没有此条记录,则返回null;updateByPrimaryKeySelective(User record)
:更新某条 User 记录,但是如果record某些属性为空,则不会用空值去代替已存在的属性,即只是更新record设置的属性。updateByPrimaryKey(User record)
:不考虑更新的数据如何,将User属性全部更新。
任何函数都可以进行单元测试,挑updateByPrimaryKeySelective(User record)
和updateByPrimaryKey(User record)
比较一下吧。
首先在test
数据库user
数据库中插入一条数据。如图:
然后生成这两个函数的测试,具体方法可以参考https://blog.csdn.net/babybabyup/article/details/79687097
package com.springmvc.dao;
import com.springmvc.entity.User;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserMapperTest {
@Autowired
UserMapper userMapper;
ApplicationContext applicationContext;
@Before
public void setUp() throws Exception {
applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
userMapper = applicationContext.getBean(UserMapper.class);
}
@After
public void tearDown() throws Exception {
}
@Test
public void updateByPrimaryKeySelective() throws Exception {
User user = new User();
user.setId(1);
user.setName("James");
System.out.println(userMapper.updateByPrimaryKeySelective(user));
}
@Test
public void updateByPrimaryKey() throws Exception {
}
}
不去设置sex
属性则不会将sex
更新,运行后的数据库变为
那么再看一下,另一个函数到底是什么结果,在测试类新增为:
@Test
public void updateByPrimaryKey() throws Exception {
User user = new User();
user.setId(1);
user.setSex("female");
System.out.println(userMapper.updateByPrimaryKey(user));
}
不设置name
属性,更新后所有的属性都更新了,包括空属性
从前端进行数据库存储
在index.jsp
中新建一个form
进行数据传输
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Index</title>
<script src="/js/jquery-3.2.1.min.js"></script>
</head>
<body>
这个是index页面<br>
新增代码<br>
<form action="/test2" method="post">
<table>
<tr>
<td>
id:
</td>
<td>
<input type="text" name="id" placeholder="id">
</td>
</tr>
<tr>
<td>
姓名:
</td>
<td>
<input type="text" name="name" placeholder="name">
</td>
</tr>
<tr>
<td>
性别:
</td>
<td>
<input type="text" name="sex" placeholder="sex">
</td>
</tr>
<tr>
<td>
</td>
<td>
<input type="submit" value="提交">
</td>
</tr>
</table>
</form>
</body>
</html>
在IndexController.java
中,新添接收代码
package com.springmvc.controller;
import com.springmvc.entity.User;
import com.springmvc.services.UserServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class IndexController {
@Autowired
private UserServices userServices;
@RequestMapping(value = "/test2", method = RequestMethod.POST)
public String test2(@ModelAttribute User user, Model model) {
userServices.insert(user);
model.addAttribute("end","插入成功");
return "test1";
}
}
运行成功后,再次刷新数据库,则已经新添了一行数据
这样,基本的操作已经完全OK了,继续后台开发的笔记。