说明:使用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中我们用的是转义符号(&amp;),但是在这里不用
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)的更多相关文章

  1. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

    前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...

  2. SpringBoot非官方教程 | 第六篇:springboot整合mybatis

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-mybatis/ 本文出自方志朋的博客 本文主要 ...

  3. springboot整合mybatis,redis,代码(二)

    一 说明: springboot整合mybatis,redis,代码(一) 这个开发代码的复制粘贴,可以让一些初学者直接拿过去使用,且没有什么bug 二 对上篇的说明 可以查看上图中文件: 整个工程包 ...

  4. SpringBoot整合Mybatis完整详细版二:注册、登录、拦截器配置

    接着上个章节来,上章节搭建好框架,并且测试也在页面取到数据.接下来实现web端,实现前后端交互,在前台进行注册登录以及后端拦截器配置.实现简单的未登录拦截跳转到登录页面 上一节传送门:SpringBo ...

  5. SpringBoot整合Mybatis之进门篇

    已经有好些日子没有总结了,不是变懒了,而是我一直在奋力学习springboot的路上,现在也算是完成了第一阶段的学习,今天给各位总结总结. 之前在网上找过不少关于springboot的教程,都是一些比 ...

  6. SpringBoot整合Mybatis完整详细版

    记得刚接触SpringBoot时,大吃一惊,世界上居然还有这么省事的框架,立马感叹:SpringBoot是世界上最好的框架.哈哈! 当初跟着教程练习搭建了一个框架,传送门:spring boot + ...

  7. springboot整合mybatis+pageHelper

    springboot整合mybatis+pageHelper 〇.搭建sporingboot环境,已经整合mybatis环境,本篇主要是添加pageHelper工具 一.添加依赖 <!-- 分页 ...

  8. SpringBoot整合MyBatis与MySql8.0

    一.前言 之前已经有一篇文章讨论过SpringBoot整合MyBatis,因而此篇不在重复累赘,本文主要是最新版的SpringBoot2.0与MyBatis.最新MySQL8.0整合过程中遇到的问题进 ...

  9. springBoot 整合 mybatis 项目实战

    二.springBoot 整合 mybatis 项目实战   前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...

  10. SpringBoot整合Mybatis【非注解版】

    接上文:SpringBoot整合Mybatis[注解版] 一.项目创建 新建一个工程 ​ 选择Spring Initializr,配置JDK版本 ​ 输入项目名 ​ 选择构建web项目所需的state ...

随机推荐

  1. linux 下安装 python ngix 项目发布流程

    1.安装python #1.安装python3.7所需要的依赖包yum -y groupinstall "Development tools"yum -y install zlib ...

  2. nextjs作为koa中间件的使用

    react客户端渲染的缺点:首屏速度慢,对SEO不友好 浏览器请求步骤                                                        客户端跳转 1. ...

  3. JAVA基础系列:Arrays.sort()

    JDK 1.8  java.util.Arrays.class(rt.jar) 1. Collections.sort方法底层就是调用的Arrays.sort方法. 2. Java Arrays中提供 ...

  4. Python连载17-排序函数&返回函数的函数

    一.高阶函数-排序 1.定义:把一个序列按照给定算法进行排序 2.key:在排序前对每一个元素进行key函数运算,可以理解成按照key函数定义的逻辑进行排序 3.python2和python3相差巨大 ...

  5. Taxi Cab Scheme POJ - 2060 二分图最小路径覆盖

    Running a taxi station is not all that simple. Apart from the obvious demand for a centralised coord ...

  6. 一些优秀的 Entity Framework 开源项目

    增加全局过滤的项目(比如:IsDeleted 字段):https://github.com/zzzprojects/EntityFramework.DynamicFilters 谢谢浏览!

  7. 基于Spark的电影推荐系统(推荐系统~7)

    基于Spark的电影推荐系统(推荐系统~7) 22/100 发布文章 liuge36 第四部分-推荐系统-实时推荐 本模块基于第4节得到的模型,开始为用户做实时推荐,推荐用户最有可能喜爱的5部电影. ...

  8. 使用SolrJ客户端管理SolrCloud(Solr集群)

    1.使用SolrJ客户端管理SolrCloud(Solr集群). package com.taotao.search.service; import java.io.IOException; impo ...

  9. 【随笔】CLR:.net的类型,内部到底长啥样?

    前言 一提到.net的类型,首当其冲的就是“引用类型”.“值类型”:我们在面试中,也会经常被问“来说说值类型和引用类型....”,这时候第一反应就是:“哎呀,这还不简单,值类型是传递的值的copy,值 ...

  10. 【UWP】实现 FindAncestor 绑定

    在 WPF 里,我们是可以在 RelativeSource 上面实现的,举个例子: <Grid Tag="2"> <Button> <Grid Tag ...