Spring boot之MyBatis
文章目录
1. 环境依赖
2. 数据源
2.1. 方案一 使用 Spring Boot 默认配置
2.2. 方案二 手动创建
3. 脚本初始化
4. MyBatis整合
4.1. 方案一 通过注解的方式
4.1.1. 实体对象
4.1.2. DAO相关
4.1.3. Service相关
4.1.4. Controller相关
4.2. 方案二 通过配置文件的方式
4.2.1. 实体对象
4.2.2. 配置相关
4.2.3. DAO相关
4.2.4. Service相关
4.2.5. Controller相关
5. 总结
本文讲解Spring Boot基础下,如何整合MyBatis框架,编写数据访问。
环境依赖
修改 POM 文件,添加mybatis-spring-boot-starter依赖。
值得注意的是,可以不添加spring-boot-starter-jdbc。
因为,mybatis-spring-boot-starter依赖中存在spring-boot-starter-jdbc。
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.</version>
</dependency>
添加mysql依赖。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.</version>
</dependency>
数据源
方案一 使用 Spring Boot 默认配置
在 src/main/resources/application.properties 中配置数据源信息。
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3307/springboot_db?useUnicode = true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=root
方案二 手动创建
在 src/main/resources/config/source.properties 中配置数据源信息。
# mysql
source.driverClassName = com.mysql.jdbc.Driver
source.url = jdbc:mysql://localhost:3306/springboot_db?useUnicode = true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
source.username = root
source.password = root
通过 Java Config 创建 dataSource 和jdbcTemplate 。
@Configuration
@EnableTransactionManagement
@PropertySource(value = {"classpath:config/source.properties"})
public class BeanConfig { @Autowired
private Environment env; @Bean(destroyMethod = "close")
public DataSource dataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(env.getProperty("source.driverClassName").trim());
dataSource.setUrl(env.getProperty("source.url").trim());
dataSource.setUsername(env.getProperty("source.username").trim());
dataSource.setPassword(env.getProperty("source.password").trim());
return dataSource;
} @Bean
public JdbcTemplate jdbcTemplate() {
JdbcTemplate jdbcTemplate = new JdbcTemplate();
jdbcTemplate.setDataSource(dataSource());
return jdbcTemplate;
}
}
脚本初始化
先初始化需要用到的SQL脚本。
CREATE DATABASE /*!32312 IF NOT EXISTS*/`springboot_db` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `springboot_db`; DROP TABLE IF EXISTS `t_author`; CREATE TABLE `t_author` (
`id` bigint() unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`real_name` varchar() NOT NULL COMMENT '用户名称',
`nick_name` varchar() NOT NULL COMMENT '用户匿名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT= DEFAULT CHARSET=utf8;
MyBatis整合
方案一 通过注解的方式
实体对象
package com.boot.mybatis.entity;
import com.alibaba.fastjson.annotation.JSONField;
public class Author {
private Long id;
@JSONField(name="real_name")
private String realName;
@JSONField(name="nick_name")
private String nickName;
// SET和GET方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
}
DAO相关
package com.boot.mybatis.dao; import java.util.List; import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import com.boot.mybatis.entity.Author; @Mapper
public interface AuthorMapper { @Insert("insert into t_author(real_name, nick_name) values(#{real_name}, #{nick_name})")
int add(@Param("real_name") String realName, @Param("nick_name") String nickName); @Update("update t_author set real_name = #{real_name}, nick_name = #{nick_name} where id = #{id}")
int update(@Param("real_name") String realName, @Param("nick_name") String nickName, @Param("id") Long id); @Delete("delete from t_author where id = #{id}")
int delete(Long id); @Select("select id, real_name as realName, nick_name as nickName from t_author where id = #{id}")
Author findAuthor(@Param("id") Long id); @Select("select id, real_name as realName, nick_name as nickName from t_author")
List<Author> findAuthorList();
}
Service相关
package com.boot.mybatis.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.boot.mybatis.dao.AuthorMapper;
import com.boot.mybatis.entity.Author; @Service
public class AuthorService { @Autowired
private AuthorMapper authorMapper; public int add(String realName, String nickName) {
return this.authorMapper.add(realName, nickName);
} public int update(String realName, String nickName, Long id) {
return this.authorMapper.update(realName, nickName, id);
} public int delete(Long id) {
return this.authorMapper.delete(id);
} public Author findAuthor(Long id) {
return this.authorMapper.findAuthor(id);
} public List<Author> findAuthorList() {
return this.authorMapper.findAuthorList();
}
}
Controller相关
为了展现效果,我们先定义一组简单的 RESTful API 接口进行测试。
package com.boot.mybatis.controller; import java.util.HashMap;
import java.util.List;
import java.util.Map; import javax.servlet.http.HttpServletRequest; 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.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import com.boot.mybatis.entity.Author;
import com.boot.mybatis.service.AuthorService; @RestController
@RequestMapping("/author")
public class AuthorController { @Autowired
private AuthorService authorService; /**
* 查询用户列表
*/ @GetMapping("/getAuthorList")
public Map<String, Object> getAuthorList(HttpServletRequest request) { List<Author> authorList = this.authorService.findAuthorList();
Map<String, Object> param = new HashMap<String, Object>();
param.put("total", authorList.size());
param.put("rows", authorList);
return param;
} /**
* 查询用户信息
*/
//@RequestMapping(value = "/getAuthor",method = RequestMethod.GET)
@GetMapping("/getAuthor")
public Author getAuthor() {
Author author = this.authorService.findAuthor(1L);
if (author == null) {
throw new RuntimeException("查询错误");
}
return author;
} /**
* 新增方法
*/
@RequestMapping(value ="/add",method = RequestMethod.GET)
public void add() {
String realName = "";
String nickName = "";
try {
this.authorService.add(realName, nickName);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("新增错误");
}
} /**
* 更新方法
*/
@RequestMapping(value ="/update")
public void update() {
try {
this.authorService.update("cyj", "", 1L);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("更新错误");
}
}
/**
* 删除方法
*/
@RequestMapping(value ="/delete")
public void delete() {
try {
this.authorService.delete(1L);
} catch (Exception e) {
throw new RuntimeException("删除错误");
}
}
}
方案二 通过配置文件的方式
实体对象
package com.boot.mybatis.entity;
import com.alibaba.fastjson.annotation.JSONField;
public class Author {
private Long id;
@JSONField(name="real_name")
private String realName;
@JSONField(name="nick_name")
private String nickName;
// SET和GET方法
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
}
配置相关
在 src/main/resources/mybatis/AuthorMapper.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.boot.mybatis.dao.AuthorMapper2"> <!-- type为实体类Student,包名已经配置,可以直接写类名 -->
<resultMap id="authorMap" type="Author">
<id property="id" column="id" />
<result property="realName" column="real_name" />
<result property="nickName" column="nick_name" />
</resultMap> <select id="findAuthor" resultMap="authorMap" resultType="Author">
select id, real_name, nick_name from t_author where id = #{id}
</select>
</mapper>
在 src/main/resources/application.properties 中配置数据源信息。
#mybatis
mybatis.mapper-locations=classpath*:mybatis/*Mapper.xml
mybatis.type-aliases-package=com.boot.mybatis.entity
DAO相关
package com.boot.mybatis.dao;
import org.apache.ibatis.annotations.Param;
import com.boot.mybatis.entity.Author;
public interface AuthorMapper2 {
Author findAuthor(@Param("id") Long id);
}
Service相关
package com.boot.mybatis.service; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.boot.mybatis.dao.AuthorMapper2;
import com.boot.mybatis.entity.Author; @Service
public class AuthorService2 { @Autowired
private AuthorMapper2 authorMapper; public Author findAuthor(Long id) {
return this.authorMapper.findAuthor(id);
} }
Controller相关
package com.boot.mybatis.controller; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import com.boot.mybatis.entity.Author;
import com.boot.mybatis.service.AuthorService2; @RestController
@RequestMapping(value=" Author2") public class AuthorController2 { @Autowired
private AuthorService2 authorService; /**
* 查询用户信息
*/
@RequestMapping(value = "/getuserId", method = RequestMethod.GET)
public Author getAuthor() {
Author author = this.authorService.findAuthor(2l);
if (author == null) {
throw new RuntimeException("查询错误");
}
return author;
} }
总结
上面这个简单的案例,让我们看到了 Spring Boot 整合 MyBatis 框架的大概流程。那么,复杂的场景,大家可以参考使用一些比较成熟的插件,例如com.github.pagehelper、mybatis-generator-maven-plugin等。
Spring boot之MyBatis的更多相关文章
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “清醒时做事,糊涂时跑步,大怒时睡觉,独处时思考” 本文提纲一.多数据源的应用场景二.运行 sp ...
- 使用intelliJ创建 spring boot + gradle + mybatis站点
Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧.Net同事问到,我想我也可以写 ...
- Spring Boot整合Mybatis并完成CRUD操作
MyBatis 是一款优秀的持久层框架,被各大互联网公司使用,本文使用Spring Boot整合Mybatis,并完成CRUD操作. 为什么要使用Mybatis?我们需要掌握Mybatis吗? 说的官 ...
- Spring boot整合Mybatis
时隔两个月的再来写博客的感觉怎么样呢,只能用“棒”来形容了.闲话少说,直接入正题,之前的博客中有说过,将spring与mybatis整个后开发会更爽,基于现在springboot已经成为整个业界开发主 ...
- Spring boot教程mybatis访问MySQL的尝试
Windows 10家庭中文版,Eclipse,Java 1.8,spring boot 2.1.0,mybatis-spring-boot-starter 1.3.2,com.github.page ...
- spring boot 实现mybatis拦截器
spring boot 实现mybatis拦截器 项目是个报表系统,服务端是简单的Java web架构,直接在请求参数里面加了个query id参数,就是mybatis mapper的query id ...
- spring boot 整合 mybatis 以及原理
同上一篇文章一样,spring boot 整合 mybatis过程中没有看见SqlSessionFactory,sqlsession(sqlsessionTemplate),就连在spring框架整合 ...
- Spring Boot集成MyBatis开发Web项目
1.Maven构建Spring Boot 创建Maven Web工程,引入spring-boot-starter-parent依赖 <project xmlns="http://mav ...
- 详解Spring Boot集成MyBatis的开发流程
MyBatis是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集. spring Boot是能支持快速创建Spring应用的Java框 ...
- Spring Boot 整合MyBatis(1)
这篇文章介绍如何在Spring boot中整合Mybatis,其中sql语句采用注解的方式插入.后续文章将会介绍,如何使用xml方式. SSM SSH框架已经满足轻量级这个需求了,但是对于开发人员而言 ...
随机推荐
- Django项目运行端口被占用
error:以一种访问权限不允许的方式做了一个访问套接字的尝试,是8000端口被其他程序占用了,杀掉占用的程序就可以 (1)查找哪个进程占用了8000端口 `E:\sign_system\guest& ...
- CSS3面包屑菜单导航
在线演示 本地下载
- Codeforces 1221D. Make The Fence Great Again
传送门 容易想到 $dp$,但是如果直接设 $f[i][j]$ 表示修正完前 $i$ 个位置,第 $i$ 个位置增加了 $j$ 高度显然是不行的 考虑有性质,发现每个位置只会被左右两个位置影响而改变, ...
- 基于CentOS系统部署EPICS环境
1.虚拟机安装CentOS系统2.打开终端,以root账户登录3.进入/usr/local目录下,新建文件夹epics,并进入该文件夹4.在/usr/local/epics目录下,执行wget htt ...
- EJS学习(一)之特性、安装、工作原理
前言 EJS,"E" 代表 "effective",即[高效],EJS 是一套简单的JavaScript模板,EJS 没有如何组织内容的教条:也没有再造一套迭代 ...
- celery 分布式异步队列框架使用方法
简介: Celery 是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向broker传递消息,然后celery ...
- springboot(二十二)-sharding-jdbc-读写分离
前面我们使用sharding-jdbc配置了分库分表.sharding-jdbc还有个用法,就是实现读写分离. 什么时候需要或者可以使用读写分离? 当我们的项目所使用的数据库查询的访问量,访问频率,及 ...
- Hive编程指南读书笔记(1):
1.Mapreduce是一种计算模型,将计算任务分割成多个可以在服务器集群中并行执行的任务,然后分散到一群家用的或者服务器级别的硬件机器上,从而降低成本并提供水平可伸缩性. 2.mapreduce的两 ...
- vue中,svg图标添加click事件,部分浏览器不生效
vue项目中,使用svg图标,但是发现,为svg图标绑定click事件时,部分浏览器会出现,点击没有反应的情况,代码如下: <icon name="icon_add" @cl ...
- hive各种报错
搭建了 CDH6.1.0环境 新加入一台机器都hive但是报错 javax.jdo.JDODataStoreException: Required table missing : "`VER ...