【使用篇二】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 ...
随机推荐
- luoguP4103 [HEOI2014]大工程
题意 建出虚树DP. 设\(f[i]\)表示i的子树的第一问答案,\(minn[i]\)表示\(i\)的子树中到\(i\)最近的关键点,\(maxx[i]\)表示\(i\)的子树中到i距离最远的关键点 ...
- 选择排序法(C语言)
基本思路 在每一次的排序中选出最小(或最大)的数,将其放在数组最前端,然后在后面的数中重复此步骤,最终达到排序的目的. 算法描述 将存于数组首位数与后面的数依次比较,将其中的较小的数放到数组放到数组首 ...
- Codeforces Round #573 (Div. 1)
Preface 军训终于结束了回来补一补之前的坑发现很多题目题意都忘记了 这场感觉难度适中,F由于智力不够所以弃了,E的话石乐志看了官方英文题解才发现自己已经胡了一大半就差实现了233 水平下降严重. ...
- USACO19JAN Gold题解
噩梦的回忆.. 上周日在机房打的模拟赛,结果十分惨烈,就最后一题yy出了正解结果玄学的只拿了80 考试结果:0+0+80=80 订正时对着T3打了2hours结果还是90 订正结果:100+100+9 ...
- Paper | FFDNet: Toward a Fast and Flexible Solution for CNN based Image Denoising
目录 故事背景 核心思想 FFDNet 网络设置 噪声水平图 对子图像的去噪 保证噪声水平图的有效性 如何盲处理 为啥不用短连接 裁剪像素范围 实验 关于噪声水平图的敏感性 盲处理 发表在2018 T ...
- 容器网络插件那么多,博云为什么基于OVS深度自研?
背景 从2015年开始,博云开始基于Kubernetes和容器帮助客户交付应用管理平台.在开始阶段,博云选择了业界使用度非常广泛且成熟稳定的calico作为默认的网络方案并在calico方面积累了大量 ...
- Vue.js 源码分析(二十一) 指令篇 v-pre指令详解
该指令会跳过所在元素和它的子元素的编译过程,也就是把这个节点及其子节点当作一个静态节点来处理,例如: <!DOCTYPE html> <html lang="en" ...
- cap理论与分布式事务的解决方案
现在很火的微服务架构所设计的系统是分布式系统.分布式系统有一个著名的CAP理论,即一个分布式系统要同时满足一致性(Consistency).可用性(Availablility)和分区容错(Partit ...
- .NET 跨域问题解决
后端处理:var callback=context.Request.QueryString["callback"].ToString(); context.Response.Wri ...
- c#之添加window服务(定时任务)
本文讲述使用window服务创建定时任务 1.如图,新建项目,windows桌面->windows服务 2.如图,右键,添加安装程序 3.在下图安装程序 serviceInstaller1 上右 ...