需求:通过使用 SpringBoot+SpringMVC+MyBatis 整合实现一个对数据库中的 t_user 表的 CRUD 的操作

1、创建maven项目,添加项目所需依赖

<!--springboot项目依赖的父项目-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent> <dependencies>
<!--注入springboot启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--注入springboot对thymeleaf视图技术的支持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--mybaits启动器,注入springboot对mybatis的支持-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mysql 数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 阿里巴巴druid数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.9</version>
</dependency>
<!-- jpa实体类规范 -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
</dependencies>

2、在resource文件夹下添加application.properties全局配置文件

#数据库连接信息
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot
spring.datasource.username=root
spring.datasource.password=duan
#数据库连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#配置mybatis中实体类xml配置文件中实体类所在文件夹,如果配置了,在xml配置文件中参数、返回值实体类可以不写包名
mybatis.type-aliases-package=com.bjsxt.pojo
#mapper接口xml文件所在位置
mybatis.mapper-locations=classpath:mapping/*.xml

3、数据库设计

创建数据库

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` bigint(10) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`age` smallint(3) DEFAULT NULL,
`hobby` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

添加数据

INSERT INTO `t_user` VALUES ('1', '张三', '22', '羽毛球');
INSERT INTO `t_user` VALUES ('2', '李四', '20', '篮球');
INSERT INTO `t_user` VALUES ('3', '王五', '24', '排球');

4、创建实体类User

package com.bjsxt.pojo;

import javax.persistence.*;

/**
* Created by Administrator on 2019/2/10.
*/
@Entity
@Table(name = "t_user")
public class User { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id; @Column(name = "name")
private String name; @Column(name = "age")
private int age; @Column(name = "hobby")
private String hobby; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getHobby() {
return hobby;
} public void setHobby(String hobby) {
this.hobby = hobby;
}
}

5、创建mapper接口以及接口映射的配置文件

package com.bjsxt.mapper;

import com.bjsxt.pojo.User;
import org.apache.ibatis.annotations.Mapper; import java.util.List; /**
* Created by Administrator on 2019/2/10.
*/
public interface UserMapper { /**
* 查询所有的用户
* @return
*/
List<User> selectAllUser(); /**
* 查询单个用户
*/
User selectUserById(Integer id); /**
* 添加用户
*/
void addUser(User user); /**
* 修改用户
*/
void updateUser(User user); /**
* 删除用户
*/
void deleteUser(Integer id); }
<?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.bjsxt.mapper.UserMapper">
<select id="selectAllUser" resultType="User">
select * from t_user;
</select> <select id="selectUserById" parameterType="java.lang.Integer" resultType="User">
select * from t_user where id=#{id};
</select> <insert id="addUser" parameterType="User">
insert into t_user(name,age,hobby) values(#{name},#{age},#{hobby});
</insert> <update id="updateUser" parameterType="User">
update t_user set name=#{name},age=#{age},hobby=#{hobby} where id=#{id};
</update> <delete id="deleteUser" parameterType="java.lang.Integer">
delete from t_user where id=#{id};
</delete>
</mapper>

6、创建业务层

接口:

package com.bjsxt.service;

import com.bjsxt.pojo.User;

import java.util.List;

/**
* Created by Administrator on 2019/2/10.
*/
public interface UserService { /**
* 查询所有的用户
* @return
*/
List<User> selectAllUser(); /**
* 查询单个用户
*/
User selectUserById(Integer id); /**
* 添加用户
*/
void addUser(User user); /**
* 修改用户
*/
void updateUser(User user); /**
* 删除用户
*/
void deleteUser(Integer id); }

实现类

package com.bjsxt.service.impl;

        import com.bjsxt.mapper.UserMapper;
import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import java.util.List; /**
* Created by Administrator on 2019/2/10.
*/
@Service
@Transactional //service层打开事务
public class UserServiceImpl implements UserService { @Autowired
private UserMapper userMapper; @Override
public List<User> selectAllUser() {
return userMapper.selectAllUser();
} @Override
public User selectUserById(Integer id) {
return userMapper.selectUserById(id);
} @Override
public void addUser(User user) {
userMapper.addUser(user);
} @Override
public void updateUser(User user) {
userMapper.updateUser(user);
} @Override
public void deleteUser(Integer id) {
userMapper.deleteUser(id);
}
}

7、创建controller

package com.bjsxt.controller;

import com.bjsxt.pojo.User;
import com.bjsxt.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import javax.servlet.http.HttpServletRequest; /**
* Created by Administrator on 2019/2/10.
*/
@Controller
@RequestMapping("user")
public class UserController { @Autowired
private UserService userService; /**
* 去用户列表页面
* @param model
* @return
*/
@RequestMapping("toUserList")
public String toUserList(Model model){
model.addAttribute("userList",userService.selectAllUser());
return "user_list";
} /**
* 去用户编辑添加页面
*/
@RequestMapping("toUserEdit")
public String toUserEdit(HttpServletRequest request,Model model){
String id=request.getParameter("id");
if(null!=id&&!"".equals(id)){ //编辑
User user=userService.selectUserById(Integer.parseInt(id));
model.addAttribute("user",user);
}
return "user_edit";
}
/**
* 用户添加或编辑
*/
@RequestMapping(value = "userEdit",method = RequestMethod.POST)
public String userEdit(HttpServletRequest request,User user){
if(null!=user.getId()&&!"".equals(user.getId())){ //编辑
userService.updateUser(user);
}else{ //添加
userService.addUser(user);
}
return "redirect:/user/toUserList";
} /**
* 用户删除
*/
@RequestMapping("deleteUser")
public String deleteUser(Integer id){
userService.deleteUser(id);
return "redirect:/user/toUserList";
} }

8、编写页面,视图层采用thymeleaf技术

用户列表页面user_list.html

<!DOCTYPE html >
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户列表</title>
</head>
<body>
<div>
<div><a href="toUserEdit">添加</a></div>
<table>
<tr>
<th>用户id</th>
<th>用户姓名</th>
<th>用户年龄</th>
<th>用户爱好</th>
<th>操作</th>
</tr>
<tr th:each="user:${userList}">
<td th:text="${user.id}"></td>
<td th:text="${user.name}"></td>
<td th:text="${user.age}"></td>
<td th:text="${user.hobby}"></td>
<td>
<a th:href="@{/user/toUserEdit(id=${user.id})}">编辑</a>
<a th:href="@{/user/deleteUser(id=${user.id})}">删除</a>
</td>
</tr>
</table>
</div>
</body>
</html>

用户添加编辑页面user_edit.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>用户编辑添加</title>
</head>
<body>
<form action="/user/userEdit" method="post">
<input type="hidden" name="id" th:field="${user.id}">
用户姓名:<input type="text" name="name" th:field="${user.name}"><br />
用户年龄:<input type="text" name="age" th:field="${user.age}"><br />
用户爱好:<input type="text" name="hobby" th:field="${user.hobby}"><br />
<input type="submit" value="提交">
</form>
</body>
</html>

9、编写启动类

package com.bjsxt;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; /**
* Created by Administrator on 2019/2/10.
*/
@SpringBootApplication
@MapperScan("com.bjsxt.mapper") //指定mapper接口所在的位置
public class App { public static void main(String[] args){
SpringApplication.run(App.class,args);
}
}

在浏览器中访问即可http://localhost:8080/user/toUserList

10、最后目录结构

SpringBoot: 10.整合mybatis(转)的更多相关文章

  1. SpringBoot之整合Mybatis(增,改,删)

    一,在上一篇文章SpringBoot之整合Mybatis中,我们使用spring boot整合了Mybatis,并演示了查询操作.接下来我们将完善这个示例,增加增,删,改的功能. 二,改动代码 1.修 ...

  2. SpringBoot系列-整合Mybatis(注解方式)

    目录 一.常用注解说明 二.实战 三.测试 四.注意事项 上一篇文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介绍下Spring ...

  3. springboot(二)整合mybatis,多数据源和事务管理

     -- 1.整合mybatis -- 2.整合多数据源 -- 3. 整合事务 代码地址:https://github.com/showkawa/springBoot_2017/tree/master/ ...

  4. SpringBoot系列-整合Mybatis(XML配置方式)

    目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ...

  5. 【springboot】整合 MyBatis

    转自:https://blog.csdn.net/cp026la/article/details/86493503 1. 简介: 目前,国内大部分公司都使用 MyBatis作为持久层框架.本章整合My ...

  6. SpringBoot (四) - 整合Mybatis,逆向工程,JPA

    1.SpringBoot整合MyBatis 1.1 application.yml # 数据源配置 spring: datasource: driver-class-name: com.mysql.c ...

  7. SpringBoot之整合Mybatis范例

    依赖包: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...

  8. SpringBoot之整合MyBatis

    今天了解一下SpringBoot如何与我们最常用的ORM框架Mybatis整合. 一. 需要在pom.xml文件里加入mybatis的依赖 <dependency> <groupId ...

  9. 玩转SpringBoot之整合Mybatis拦截器对数据库水平分表

    利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...

随机推荐

  1. mysql 数据库的相关操作

    #coding=gbk #数据库的连接语句 import pymysql try: conn=pymysql.connect( host='127.0.0.1', port=3306, user='r ...

  2. Netty搭建WebSocket服务端

    Netty服务端 1.引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=& ...

  3. Seafile和Nextcloud相比较哪个好用

    面对大量的照片视频,备份资料成了很多网友的刚需.但现在各大免费网盘,关闭地关闭,收费的收费,自建网盘成了一个不得已的选择.可以自建私有网盘的网盘程序最出名的要数Seafile和Nextcloud,一款 ...

  4. 前端笔记-css

    css(穿着) 1. 第一种<head><style></style></head>中可以写css样式 css选择器 定位到哪个标签的css id选择器 ...

  5. 【JUC系列第二篇】-原子变量

    作者:毕来生 微信:878799579 1.什么是原子变量? ​ 原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题. 2.通过synchronized保证原子操 ...

  6. Jenkins 自动化构建

    def pipeId = 1130561944231279390 def pipeLogId def isTagOrBranch def tagOrBranch def imageId def add ...

  7. this绑定问题

    this是属性和方法“当前”(运行时)所在的对象.this是函数调用时发生的绑定,它的值只取决于调用位置(箭头函数除外). 函数调用的时候会产生一个执行上下文,this是对这个执行上下文的记录. ❌误 ...

  8. pyecharts 开发文档

    pyechart 新 版本 https://pyecharts.org/#/zh-cn/quickstart pyecharts 老版本 https://05x-docs.pyecharts.org/ ...

  9. MySQL Index 索引提示:force or use

    一.使用索引提示(Index Hint)的条件 1.Mysql优化器错误的选择了某个索引.这种情况很少发生,需要做数据库的表.索引的统计分析. 2.某个SQL语句可选择的索引非常多,这个时候优化器执行 ...

  10. classpath详解

    在dos下编译java程序,就要用到classpath这个概念,尤其是在没有设置环境变量的时候.classpath就是存放.class等编译后文件的路径. javac:如果当前你要编译的java文件中 ...