【使用篇二】SpringBoot整合mybatis(7)
说明:使用SpringBoot+Mybatis+Jsp实现简单的用户增删查改
#用户表 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `) NOT NULL AUTO_INCREMENT, `) DEFAULT NULL, `age` ) DEFAULT NULL, PRIMARY KEY (`user_id`) ) ENGINE DEFAULT CHARSET=utf8;
1. 创建项目Maven Project,修改pom.xml
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- jasper:jsp引擎 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.5</version>
</dependency>
<!-- mysql 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
</dependencies>
2. 在src/main/resources目录下新建application.properties并添加全局配置
#数据库基本信息 spring.datasource.driver-class-name=com.mysql.jdbc.Driver #这里要注意&,可能在spring的xml中我们用的是转义符号(&),但是在这里不用 spring.datasource.url=jdbc:mysql://192.168.178.5:12345/ssm?characterEncoding=utf8&useUnicode=true&useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=123456 #数据源 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #myabtis #扫描mapper的xml映射文件 mybatis.mapper-locations=classpath:mapper/*.xml #别名 mybatis.type-aliases-package=com.linhw.demo.pojo #jsp视图映射配置 spring.mvc.view.prefix=/WEB-INF/jsp/ spring.mvc.view.suffix=.jsp
3. 根据用户表创建实体类
public class User {
private Integer userId;
private String userName;
private Integer age;
public User() {
}
public User(Integer userId, String userName, Integer age) {
this.userId = userId;
this.userName = userName;
this.age = age;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
4. 创建 mapper 接口以及映射配置文件
public interface UserMapper {
void insertUser(User user);
List<User> selectAllUser();
User selectUserById(Integer userId);
void editUser(User user);
void removeUser(Integer userId);
}
在src/main/resources目录下新建mapper文件夹,在mapper下创建UserMapper.xml,内容如下:
<?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.linhw.demo.dao.UserMapper">
<!-- 插入 -->
<insert id="insertUser" parameterType="user">
insert into
user(user_name,age) values(#{userName},#{age})
</insert>
<!-- 查询所有用户 -->
<select id="selectAllUser" resultMap="BaseResultMap">
select user_id,user_name,age from user
</select>
<!-- 查询用户信息 -->
<select id="selectUserById" resultMap="BaseResultMap" parameterType="Integer">
select user_id,user_name,age from user where user_id = #{userId}
</select>
<!-- 修改用户信息 -->
<update id="editUser" parameterType="user">
update user set user_name=#{userName},age=#{age} where user_id=#{userId}
</update>
<!-- 删除用户 -->
<delete id="removeUser" parameterType="Integer">
delete from user where user_id=#{userId}
</delete>
<resultMap id="BaseResultMap" type="user">
<id column="user_id" jdbcType="BIGINT" property="userId" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="age" jdbcType="BIGINT" property="age" />
</resultMap>
</mapper>
5. 编写业务层代码
//接口
public interface UserService {
void addUser(User user);
List<User> findAllUser();
User findUserById(Integer userId);
void updateUser(User user);
void delUserById(Integer userId);
}
//实现类
@Service
@Transactional
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public void addUser(User user) {
userMapper.insertUser(user);
}
@Override
public List<User> findAllUser() {
return userMapper.selectAllUser();
}
@Override
public User findUserById(Integer userId) {
return userMapper.selectUserById(userId);
}
@Override
public void updateUser(User user) {
userMapper.editUser(user);
}
@Override
public void delUserById(Integer userId) {
userMapper.removeUser(userId);
}
}
6. 创建Controller
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/*** 页面跳转 */
@RequestMapping("/{page}")
public Object showPage(@PathVariable String page) {
ModelAndView view = new ModelAndView();
view.setViewName(page);
return view;
}
/*** 添加用户 */
@RequestMapping("/addUser")
public Object addUser(Model model, User user) {
userService.addUser(user);
ModelAndView view = new ModelAndView();
model.addAttribute("status", "成功");
view.addObject(model);
view.setViewName("ok");
return view;
}
/*** 查询所有用户*/
@RequestMapping("/findAllUser")
public Object findAllUser(Model model){
List<User> userList = userService.findAllUser();
model.addAttribute("list", userList);
ModelAndView view = new ModelAndView();
view.addObject(model);
view.setViewName("showUsers");
return view;
}
/*** 查询用户信息 */
@RequestMapping("/findUserById/{id}")
public Object findUserById(Model model, @PathVariable Integer id){
User user = userService.findUserById(id);
model.addAttribute("user", user);
ModelAndView view = new ModelAndView();
view.addObject(model);
view.setViewName("updateUser");
return view;
}
/*** 修改用户 */
@RequestMapping("/editUser")
public Object updateUser(Model model, User user){
userService.updateUser(user);
ModelAndView view = new ModelAndView();
model.addAttribute("status", "成功");
view.addObject(model);
view.setViewName("ok");
return view;
}
/*** 删除用户 */
@RequestMapping("/delUserById/{id}")
public Object delUserById(Model model, @PathVariable Integer id){
userService.delUserById(id);
ModelAndView view = new ModelAndView();
model.addAttribute("status", "成功");
view.addObject(model);
view.setViewName("ok");
return view;
}
}
7. 编写启动类
@SpringBootApplication
@MapperScan("com.linhw.demo.dao") //用于扫描Mapper接口,生成代理对象,也可以在每一个接口加上@Mapper注解
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
8. 视图jsp
(1) 添加用户:input.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>添加用户</title>
</head>
<body>
<h3>添加用户:</h3>
<form action="/user/addUser" method="post">
用户姓名:<input type="text" name="userName" /><br/>
用户年龄:<input type="text" name="age" /><br/>
<input type="submit" value="确定" /><br />
</form>
</body>
</html>

(2) 用户列表:showUsers.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户列表</title>
</head>
<body>
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Age</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.userId }</td>
<td>${user.userName }</td>
<td>${user.age }</td>
<td>
<a href="/user/findUserById/${user.userId}">更改</a>
<a href="/user/delUserById/${user.userId}">删除</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>

(3) 修改用户:updateUser.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>修改用户</title>
</head>
<body>
<h3>修改用户:</h3>
<form action="/user/editUser" method="post">
<input type="hidden" name="userId" value="${user.userId }"/>
用户姓名:<input type="text" name="userName" value="${user.userName }"/><br/>
用户年龄:<input type="text" name="age" value="${user.age }"/><br/>
<input type="submit" value="确定" /><br />
</form>
</body>
</html>

(4) 操作提示页面:ok.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>操作成功</title>
</head>
<body>
<h5>操作 ${status}</h5>
<a href="/user/findAllUser">用户列表</a> |
<a href="/user/input">添加用户</a>
</body>
</html>

9. 总结
开发过程中需要注意:
(1) application.properties必须添加
#指定mapper的xml映射文件,若放到src/main/java对应的包路径下,会因没有编译到类路径下,导致使用的时候找不到对应的sql mybatis.mapper-locations=classpath:mapper/*.xml
(2) SpringBoot的启动类上必须添加注解@MapperScan,确保能够找到接口,从而生成代理类
(3) 控制层Controller类使用了@RestController注解,会将返回值直接以Json字符串的形式输出,如果想要返回页面,需使用ModelAndView。
【使用篇二】SpringBoot整合mybatis(7)的更多相关文章
- SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)
前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...
- SpringBoot非官方教程 | 第六篇:springboot整合mybatis
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-mybatis/ 本文出自方志朋的博客 本文主要 ...
- springboot整合mybatis,redis,代码(二)
一 说明: springboot整合mybatis,redis,代码(一) 这个开发代码的复制粘贴,可以让一些初学者直接拿过去使用,且没有什么bug 二 对上篇的说明 可以查看上图中文件: 整个工程包 ...
- SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置
接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...
- SpringBoot整合Mybatis之进门篇
已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...
- SpringBoot整合Mybatis完整详细版
记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架.哈哈! 当初跟着教程练习搭建了一个框架,传送门:spring boot + ...
- springboot整合mybatis+pageHelper
springboot整合mybatis+pageHelper 〇.搭建sporingboot环境,已经整合mybatis环境,本篇主要是添加pageHelper工具 一.添加依赖 <!-- 分页 ...
- SpringBoot整合MyBatis与MySql8.0
一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...
- springBoot 整合 mybatis 项目实战
二.springBoot 整合 mybatis 项目实战 前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...
- SpringBoot整合Mybatis【非注解版】
接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 选择Spring Initializr,配置JDK版本 输入项目名 选择构建web项目所需的state ...
随机推荐
- 关于npm(一)
npm install X: 把X包安装到node_modules目录中修改package.json运行npm install命令时,不会自动安装X npm install X –save: 把X包安 ...
- RocketMQ支持事务消息机制
事务消费 我们经常支付宝转账余额宝,这是日常生活的一件普通小事,但是我们思考支付宝扣除转账的钱之后,如果系统挂掉怎么办,这时余额宝账户并没有增加相应的金额,数据就会出现不一致状况了. 上述场景在各个类 ...
- C++:Overload
重载 函数签名是指函数的参数个数,参数类型以及参数的顺序.重载的定义是:在同一作用域内函数签名不同但函数名相同的函数互为重载. // 以下几个函数互为重载 void print(); void pri ...
- Vue.js 源码分析(二十四) 高级应用 自定义指令详解
除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令. 官网介绍的比较抽象,显得很高大上,我个人对自定义指令的理解是:当自定义指令作用在一些DOM元素或组件上 ...
- [线段树]区间修改&区间查询问题
区间修改&区间查询问题 [引言]信息学奥赛中常见有区间操作问题,这种类型的题目一般数据规模极大,无法用简单的模拟通过,因此本篇论文将讨论关于可以实现区间修改和区间查询的一部分算法的优越与否. ...
- element-ui的tabs默认选中页签
Element-UI提供了tabs组件(选项卡.多页签),其中在tabs的属性中提供了一个value/v-model属性来绑定默认选中的页签. 我们通过简单的示例来看一下具体是怎么使用的. <t ...
- windows 安装gitea
gitea 地址https://github.com/go-gitea/gitea windows 安装
- OpenGL入门1.2:渲染管线简介,画三角形
每一个小步骤的源码都放在了Github 的内容为插入注释,可以先跳过 图形渲染管线简介 在OpenGL的世界里,任何事物是处于3D空间中的,而屏幕和窗口显示的却是2D,所以OpenGL干的事情基本就是 ...
- Java生鲜电商平台-库存管理设计与架构
Java生鲜电商平台-库存管理设计与架构 WMS的功能: 1.业务批次管理 该功能提供完善的物料批次信息.批次管理设置.批号编码规则设置.日常业务处理.报表查询,以及库存管理等综合批次管理功能,使企业 ...
- JMeter性能测试入门--简单使用
1.JMeter整体简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域. 它可以用于测试 ...