SpringBoot 2.x (9):整合Mybatis注解实战
SSM框架再熟悉不过了,不过以前通常是使用XML写SQL语句
这里用SpringBoot整合Mybatis并且使用注解进行开发
依赖:
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</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.6</version>
</dependency>
配置:不需要指定驱动类,SpringBoot会自动扫描:com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=xuyiqing
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
user表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL,
`phone` varchar(16) DEFAULT NULL,
`create_time` datetime DEFAULT NULL,
`age` int(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
对应实体类:
package org.dreamtech.springboot.domain;
import java.util.Date;
public class User {
private int id;
private String name;
private String phone;
private int age;
private Date createTime;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", phone=" + phone + ", age=" + age + ", createTime=" + createTime
+ "]";
}
}
添加用户的Demo做整合
Mapper:
package org.dreamtech.springboot.mapper; import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.dreamtech.springboot.domain.User; public interface UserMapper {
@Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name},#{phone},#{createTime},#{age})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int insert(User user);
}
Service:
package org.dreamtech.springboot.service;
import org.dreamtech.springboot.domain.User;
public interface UserService {
int add(User user);
}
package org.dreamtech.springboot.service.impl; import org.dreamtech.springboot.domain.User;
import org.dreamtech.springboot.mapper.UserMapper;
import org.dreamtech.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper; @Override
public int add(User user) {
userMapper.insert(user);
int id = user.getId();
return id;
} }
Controller:
package org.dreamtech.springboot.controller; import java.util.Date; import org.dreamtech.springboot.domain.User;
import org.dreamtech.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService; @GetMapping("/add")
private Object add() {
User user = new User();
user.setAge(18);
user.setCreateTime(new Date());
user.setName("admin");
user.setPhone("100000");
userService.add(user);
return user;
}
}
最后别忘了一个细节:在启动类加上Mapper扫描注解
package org.dreamtech.springboot; import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication
@MapperScan("org.dreamtech.springboot.mapper")
public class SpringbootApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
} }
启动后访问localhost:8080/user/add
测试成功!
继续完成增删改查
有时候,开发者希望能够在控制台打印SQL语句,需要加一行配置文件
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
CRUD完整实现:
package org.dreamtech.springboot.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.dreamtech.springboot.domain.User; public interface UserMapper {
/**
* 插入对象
*
* @param user 对象
* @return int
*/
@Insert("INSERT INTO user(name,phone,create_time,age) VALUES(#{name},#{phone},#{createTime},#{age})")
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int insert(User user); /**
* 查找全部
*
* @return
*/
@Select("SELECT * FROM user")
@Results({ @Result(column = "create_time", property = "createTime", javaType = java.util.Date.class) })
List<User> getAll(); /**
* 根据ID找对象
*
* @param id ID
* @return
*/
@Select("SELECT * FROM user WHERE id=#{id}")
@Results({ @Result(column = "create_time", property = "createTime", javaType = java.util.Date.class) })
User findById(Long id); /**
* 更新对象
*
* @param user 对象
* @return
*/
@Update("UPDATE user SET name=#{name} WHERE id=#{id}")
int update(User user); /**
* 根据ID删除对象
*
* @param id ID
* @return
*/
@Delete("DELETE FROM user WHERE id=#{id}")
int delete(Long id);
}
package org.dreamtech.springboot.service;
import java.util.List;
import org.dreamtech.springboot.domain.User;
public interface UserService {
int add(User user);
List<User> getAll();
User findById(Long id);
int update(User user);
int delete(Long id);
}
package org.dreamtech.springboot.service.impl; import java.util.List; import org.dreamtech.springboot.domain.User;
import org.dreamtech.springboot.mapper.UserMapper;
import org.dreamtech.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper; @Override
public int add(User user) {
userMapper.insert(user);
int id = user.getId();
return id;
} @Override
public List<User> getAll() {
return userMapper.getAll();
} @Override
public User findById(Long id) {
return userMapper.findById(id);
} @Override
public int update(User user) {
return userMapper.update(user);
} @Override
public int delete(Long id) {
return userMapper.delete(id);
} }
package org.dreamtech.springboot.controller; import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.dreamtech.springboot.domain.User;
import org.dreamtech.springboot.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService; private Map<String, Object> modelMap = new HashMap<String, Object>(); @GetMapping("/add")
private Object add() {
User user = new User();
user.setAge(18);
user.setCreateTime(new Date());
user.setName("admin");
user.setPhone("100000");
userService.add(user);
return user;
} @GetMapping("/getall")
private Object getAll() {
modelMap.clear();
List<User> list = userService.getAll();
if (list.size() > 0) {
modelMap.put("users", list);
modelMap.put("success", true);
} else {
modelMap.put("success", false);
}
return modelMap;
} @GetMapping("/findbyid")
private Object findById(Long id) {
if (id == null || id < 0) {
modelMap.put("success", false);
}
modelMap.clear();
User user = userService.findById(id);
if (user != null) {
modelMap.put("success", true);
modelMap.put("user", user);
} else {
modelMap.put("success", false);
}
return modelMap;
} @GetMapping("/update")
private Object update() {
modelMap.clear();
User user = new User();
user.setId(1);
user.setName("newAmdin");
int effectedNum = userService.update(user);
if (effectedNum > 0) {
modelMap.put("success", true);
} else {
modelMap.put("success", false);
}
return modelMap;
} @GetMapping("/delete")
private Object delete(Long id) {
if (id == null || id < 0) {
modelMap.put("success", false);
}
modelMap.clear();
int effectedNum = userService.delete(id);
if (effectedNum > 0) {
modelMap.put("success", true);
} else {
modelMap.put("success", false);
}
return modelMap;
}
}
事务:
如果用到事务相关的内容,需要在Service层加入一个注解@Transactional
@Transactional(propagation = Propagation.REQUIRED)
SpringBoot 2.x (9):整合Mybatis注解实战的更多相关文章
- SpringBoot数据访问之整合mybatis注解版
SpringBoot数据访问之整合mybatis注解版 mybatis注解版: 贴心链接:Github 在网页下方,找到快速开始文档 上述链接方便读者查找. 通过快速开始文档,搭建环境: 创建数据库: ...
- springBoot 整合 mybatis 项目实战
二.springBoot 整合 mybatis 项目实战 前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用 ...
- SpringBoot整合Mybatis注解版---update出现org.apache.ibatis.binding.BindingException: Parameter 'XXX' not found. Available parameters are [arg1, arg0, param1, param2]
SpringBoot整合Mybatis注解版---update时出现的问题 问题描述: 1.sql建表语句 DROP TABLE IF EXISTS `department`; CREATE TABL ...
- springboot整合mybatis(注解)
springboot整合mybatis(注解) 1.pom.xml: <?xml version="1.0" encoding="UTF-8"?> ...
- Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...
- 二、springBoot 整合 mybatis 项目实战
前言 上一篇文章开始了我们的springboot序篇,我们配置了mysql数据库,但是我们sql语句直接写在controller中并且使用的是jdbcTemplate.项目中肯定不会这样使用,上篇文章 ...
- Spring Boot整合Mybatis(注解方式和XML方式)
其实对我个人而言还是不够熟悉JPA.hibernate,所以觉得这两种框架使用起来好麻烦啊. 一直用的Mybatis作为持久层框架, JPA(Hibernate)主张所有的SQL都用Java代码生成, ...
- SpringBoot数据访问之整合Mybatis配置文件
环境搭建以及前置知识回顾 SpringBoot中有两种start的形式: 官方:spring-boot-starter-* 第三方:*-spring-boot-starter Mybatis属于第三方 ...
- (入门SpringBoot)SpringBoot项目数据源以及整合mybatis(二)
1.配置tomcat数据源: # 数据源基本配置spring.datasource.url=jdbc:mysql://localhost:3306/shoptest?useUnicode=true ...
随机推荐
- liunx下解压压缩命令详细介绍
Linux下的压缩解压缩命令详解及实例 实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip == ...
- SecureCRT远程连接虚拟机CentOS的三种方式
当在VMware虚拟机中将CentOS安装成功后,会在win7系统中模拟出两个虚拟网卡:VMnet1和VMnet8,我们来查看一下,点击“控制面板—>查看网络状态和任务—>更改适配器设置” ...
- PHP多种序列化/反序列化的方法 json_encode json_decode
序列化是将变量转换为可保存或传输的字符串的过程:反序列化就是在适当的时候把这个字符串再转化成原来的变量使用.这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性. 1. serialize和 ...
- web应用目录结构
news web(应用的名字)||--静态资源和JSP文件都可以直接放在web应用的目录下,浏览器可以直接访问(html/jsp/css)|--WEB-INF 可以没有,但是最好有,一旦有,则结构需要 ...
- Java的栈和堆
JVM的内存区域可以被分为:线程栈,堆,静态方法区(实际上还有更多功能的区域,并且这里说的是JVM的内存区域) 线程栈: 注意这个栈和数据结构中的stack有相似之处,但并不是用户态的.准确 ...
- codevs-1203
1203 判断浮点数是否相等 题目描述 Description 给出两个浮点数,请你判断这两个浮点数是否相等 输入描述 Input Description 输入仅一行,包含两个浮点数 输出描述 ...
- UVa 1001 Say Cheese (Dijkstra)
题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...
- 洛谷 - P3966 - 单词 - AC自动机
https://www.luogu.org/problemnew/show/P3966 因为文本串就是字典本身,所以这个和平时的AC自动机不太一样.平时的query要沿着fail树把子树的出现次数依次 ...
- Linux下更改mysql版本
想要更改linux的mysql版本,并不需要重装系统重新选择mysql版本,只需要删除掉原来的mysql然后在安装新的就可以啦 (谨记:一定要做好数据库备份) 详情请参照:大牛博客 over!over ...
- HDU5950【矩阵快速幂】
主要还是i^4化成一个(i+1)^4没遇到过,还是很基础的一题矩阵快速幂: #include <bits/stdc++.h> using namespace std; typedef lo ...