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拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...
随机推荐
- socket 实现一个类似简单聊天室的功能(多客户端互相通信)
server端: #coding=utf-8 ''' 一个广播程序,linux运行 ''' import select,socket import traceback def broadcast(co ...
- 从头至尾一点点实现自己的ViewPager效果
对于ViewPager,应该没有人在项目中没使用过它,效果非常的赞,使用也非常简单,但是如果自己来实现这样的效果,我想并非三下五除二的事了,这里涉及到怎么自定义ViewGroup了,它相比自定义Vie ...
- CodeForces 840B - Leha and another game about graph | Codeforces Round #429(Div 1)
思路来自这里,重点大概是想到建树和无解情况,然后就变成树形DP了- - /* CodeForces 840B - Leha and another game about graph [ 增量构造,树上 ...
- github 管理代码、笔记
1.先注册github.com的账号官方网站: https://github.com/ 2.登录 3.创建仓库 二. 1.安装git 2.刚才我们已经在github上面创建了一个仓库,那么我们现在就在 ...
- Shell 06 awk
一.基本操作方法 ######################################### grep 按行进行查找 vim 编辑文档,交互式 ####################### ...
- java+超大文件上传与下载
这里先说下spring mvc 遇到的坑,就是如果文件上传时,后端这样写public String file1(HttpServletRequest request),根据request拿到的东西是 ...
- java大视频上传实现
理清思路: 引入了两个概念:块(block)和片(chunk).每个块由一到多个片组成,而一个资源则由一到多个块组成 块是服务端的永久数据存储单位,片则只在分片上传过程中作为临时存储的单位.服务端会以 ...
- Gym - 102307G Graduation 拓扑排序
Gym - 102307G Graduation 题意:xjl得修够n门课才能毕业,其中有些课是某门课的先行课,并且他精力有限,每学期最多只能修k门课,问xjl最少需要多少学期才能毕业. 首先,正向 ...
- 【luogu1797】faebdc的烦恼-莫队
题目背景 鸟哥(faebdc)自从虐暴NOIP2013以来依然勤奋学习,每天上各种OJ刷题,各种比赛更是不在话下.但这天他遇到了一点小小的麻烦……在一届“Orz鸟哥杯”上,题目是在是太多了!足有n道! ...
- 文件描述符、文件表项、V节点表项的一些总结
转自 http://blog.csdn.net/gzzheyi/article/details/7739556 表格可以参见APUE 第三版 P61. 文件描述符(进程级别): 1).在每个进程表中 ...