SpringBoot: 10.整合mybatis(转)
需求:通过使用 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(转)的更多相关文章
- SpringBoot之整合Mybatis(增,改,删)
一,在上一篇文章SpringBoot之整合Mybatis中,我们使用spring boot整合了Mybatis,并演示了查询操作.接下来我们将完善这个示例,增加增,删,改的功能. 二,改动代码 1.修 ...
- SpringBoot系列-整合Mybatis(注解方式)
目录 一.常用注解说明 二.实战 三.测试 四.注意事项 上一篇文章<SpringBoot系列-整合Mybatis(XML配置方式)>介绍了XML配置方式整合的过程,本文介绍下Spring ...
- springboot(二)整合mybatis,多数据源和事务管理
-- 1.整合mybatis -- 2.整合多数据源 -- 3. 整合事务 代码地址:https://github.com/showkawa/springBoot_2017/tree/master/ ...
- SpringBoot系列-整合Mybatis(XML配置方式)
目录 一.什么是 MyBatis? 二.整合方式 三.实战 四.测试 本文介绍下SpringBoot整合Mybatis(XML配置方式)的过程. 一.什么是 MyBatis? MyBatis 是一款优 ...
- 【springboot】整合 MyBatis
转自:https://blog.csdn.net/cp026la/article/details/86493503 1. 简介: 目前,国内大部分公司都使用 MyBatis作为持久层框架.本章整合My ...
- SpringBoot (四) - 整合Mybatis,逆向工程,JPA
1.SpringBoot整合MyBatis 1.1 application.yml # 数据源配置 spring: datasource: driver-class-name: com.mysql.c ...
- SpringBoot之整合Mybatis范例
依赖包: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...
- SpringBoot之整合MyBatis
今天了解一下SpringBoot如何与我们最常用的ORM框架Mybatis整合. 一. 需要在pom.xml文件里加入mybatis的依赖 <dependency> <groupId ...
- 玩转SpringBoot之整合Mybatis拦截器对数据库水平分表
利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...
随机推荐
- mysql全量和增量备份详解(带脚本)
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...
- 剑指Offer的学习笔记(C#篇)-- 翻转单词的序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student ...
- 跨域问题——学习ing
问题 跨域:我写了一个页面,在js中写了请求,这个请求的url跟我这个页面不在一个域名,那么这个请求就是跨域请求. 跨域会怎么样:没见过,可能就不让你请求呗,为了安全考虑之类的.(涉及浏览器的同源策略 ...
- nginx配置跨域之后前后端调用,二次请求
公司项目从前后端不分离转到前后端分离 首先遇到的问题就是前后端分离的时候跨域的问题 但是当跨域成功配置并且能访问成功的时候发现 每次客户端的请求都会发送两次 第一次是OPTIONS的请求,然后才是正常 ...
- 基于SSM框架的通用权限框架设计
1. 整体解决方案概述 1.1 权限整体解决方案概述 权限设计主要有一下几大部分组成: PassPort: 针对现在系统的分析,系统之间有部分信息是共享的,这部分信息将由 ...
- windows系统上 安装 Redis
下载地址:https://github.com/microsoftarchive/redis/releases 下载完成后,把这个给解压出来 然后,使用 cmd 命令 进入 解压的redis目录 输入 ...
- SVN(subversion )服务端和客户端的下载安装使用
SVN(subversion)官方网站: http://subversion.apache.org/packages.html 一.服务端下载 1.百度搜关键字:subversion 进入subve ...
- 「数据结构与算法(Python)」(二)
顺序表 在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等.一组数据中包含的元素个数可能发生变化(可以增加或删除元素). 对 ...
- C语言calloc()函数:分配内存空间并初始化——stm32中的应用
经常在代码中看到使用malloc来分配,然后memset清零,其实calloc更加方便,一句顶两句~ 头文件:#include <stdlib.h> calloc() 函数用来动态地分配内 ...
- 9、组件注册-@Import-使用ImportSelector
9.组件注册-@Import-使用ImportSelector 9.1 @Import 源码: @Target(ElementType.TYPE) @Retention(RetentionPolicy ...