选中mysqldirver,数据库驱动器

选中jdbc ,帮我们配置数据源,连接数据库

选中mybatis,持久层

<!--        这个不是springboot官方出来的,是mybatis为了设备springboot出品的-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>

依赖图:

引入了mybtatis-spring-boot-starter依赖之后,我们可以不引入

我们不是用springboot tomcat内置的数据源,所以加入依赖:

     <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.22</version>
</dependency>

前期准备:

1创建数据库mybatis

2创建两个数据表:

CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lastName` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`gender` int(2) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`departmentName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

配置相关数据源信息:

spring:
datasource:
# 数据源基本配置
username: root
password: 1997
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.101:3306/mybatis
type: com.alibaba.druid.pool.DruidDataSource
# 数据源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

编写实体类:

Department
package com.quan.springbootmybatis.bean;

public class Department {
private Integer id;
private String departmentName; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getDepartmentName() {
return departmentName;
} public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
}
Employee
package com.quan.springbootmybatis.bean;

public class Employee {
private Integer id;
private String lastName;
private Integer gender;
private String email;
private Integer dId; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getLastName() {
return lastName;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public Integer getGender() {
return gender;
} public void setGender(Integer gender) {
this.gender = gender;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public Integer getdId() {
return dId;
} public void setdId(Integer dId) {
this.dId = dId;
}
}

配置一下Druid:

package com.quan.springbootmybatis.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; @Configuration
public class DruidConfig {
@ConfigurationProperties(prefix = "spring.datasource")
@Bean
public DataSource druid(){
return new DruidDataSource();
} //配置Druid监控
//配置管理后台Servlet
@Bean
public ServletRegistrationBean statViewServlet(){
ServletRegistrationBean bean =new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParams = new HashMap<>();
//下面的参数都是 StatViewServlet extends ResourceServlet两个累里面的属性
initParams.put("loginUsername","admin");
initParams.put("loginPassword","admin");
initParams.put("allow","");//默认允许所有
initParams.put("deny","129.204.3.132");
bean.setInitParameters(initParams);
return bean;
} //配置一个Web监控的Filter
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter()); Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
} }

可以启动访问一下druid数据源有没有起来:

访问http://localhost:8080/druid

注解版详解:

编写一个处理sql的接口:

package com.quan.springbootmybatis.mapper;

import com.quan.springbootmybatis.bean.Department;
import org.apache.ibatis.annotations.*; //指定这个操作数据库的mapper
@Mapper
public interface DepartmentMapper {
@Select("select * from department where id = #{id}")
public Department getDepartmentById(Integer id); @Delete("delete from department where id = #{id}")
public int deleteDeptById(Integer id); @Insert("insert into department(departmentName) values(#{departmentName})")
public int insertDept(Department department); @Update("update department set departmentName = #{departmentName} where id = #{id}")
public int updateDept(Department department); }

其中@Mapper指定这个接口mapper接口

我们编写一个Controller进行测试一下:‘

import com.quan.springbootmybatis.mapper.DepartmentMapper;
import com.quan.springbootmybatis.mapper.EmployeeMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController; //不过返回页面数据直接返回json书
@RestController
public class DeptController { @Autowired
DepartmentMapper departmentMapper; @GetMapping("/dept/{id}")
public Department getDepartment(@PathVariable("id") Integer id){
return departmentMapper.getDepartmentById(id);
}
//http://localhost:8080/dept/1 @GetMapping("/dept")
public Department insertDept(Department department){
departmentMapper.insertDept(department);
return department;
}
//http://localhost:8080/dept?departmentName=CCC

结果:

由于我们的id是自增主键,所以如果默认不设置什么东西,是插入的时候是不会取到主键的值的,所以我们要进行下面的设置:

在mapper接口方法中加入多一个注解@Options

    @Options(useGeneratedKeys = true,keyProperty = "id")
@Insert("insert into department(departmentName) values(#{departmentName})")
public int insertDept(Department department);

/*
在接口里面加入options
是否使用自动生成的主键,用keyproperty指定主键是对应department属性
*/

结果就可以得到主键的值了

存在的问题1:如果数据库的列名改为department_name 而department的属性值一样是departmentName不变的时候

是不能匹配到值的,这个时候我们就需要开启自定义的mybatis配置规则

就是需要给容器中加入ConfigurationCustomizer;

所以编写一个配置类取进行配置

@org.springframework.context.annotation.Configuration
public class MybatisConfig {
@Bean
public ConfigurationCustomizer configurationCustomizer(){
// 匿名函数
return new ConfigurationCustomizer() {
@Override
public void customize(Configuration configuration) {
configuration.setMapUnderscoreToCamelCase(true);
}
};
}
}

这个只针对注解 生效的,如果是使用mapper映射文件的就需要使用配置文件取开启

问题2,如果我们@mapper的数量很多的时候,我们需要每个都要加,麻烦!!!!

解决:往配置类,或者主配置类里面注上注解@MapperScan

@MapperScan(value = "com.quan.springbootmybatis.mapper")
@SpringBootApplication
public class SpringbootmybatisApplication { public static void main(String[] args) {
SpringApplication.run(SpringbootmybatisApplication.class, args);
} }

去掉之前mapper文件夹里面的所有@mapper

查询结果还是一样的;

这就是使用MapperScan批量烧苗所有的Mapper接口

###############################################################################

配置文件版

创建两个配置文件:

mybatis-config.xml

EmployeeMapper.xml

创建一个接口:

package com.quan.springbootmybatis.mapper;

import com.quan.springbootmybatis.bean.Employee;

//无论是配置文件还是注解版都需要将接口扫描到我们的容器中
//使用@Mapper或者@MapperScan
public interface EmployeeMapper { public Employee getEmpById(Integer id); public void insertEmp(Employee employee);
}

注:因为上面的注解版的时候加了@MapperScan注解了,所以这里可以不用加

根据接口编写mapper映射文件:

<?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">
<!--namespace必须和mapper接口的全限定类名绑定-->
<mapper namespace="com.quan.springbootmybatis.mapper.EmployeeMapper"> <!-- public Employee getEmpById(Integer id);-->
<select id="getEmpById" resultType="com.quan.springbootmybatis.bean.Employee">
SELECT * FROM employee WHERE id = #{id}
</select> <!-- public void insertEmp(Employee employee);-->
<insert id="insertEmp">
INSERT INTO employee(lastName,email,gender,d_id) VALUES (#{lastName},#{email},#{gender},#{dId})
</insert> </mapper>

注:文件的头部信息可以取官网查看,直接百度进入mybatis

由于实体类和数据库列的名字不一样,一个是dId 一个是d_id

所以需要在mybatis主配置文件里面加入配置规则模式:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 配置 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>

开启驼峰模式规则

修改springboot主配置文件:

需要让程序知道映射文件

核心要点就是要在springboot配置文件当中指定mybatis著配置文件和mapper文件的位置:

#mybatis 全局配置文件的位置
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
# mapper映射文件的位置
mapper-locations: classpath:mybatis/mapper/*.xml

往之前的DeptControler文件加入测试:

    @Autowired
EmployeeMapper employeeMapper; @GetMapping("/emp/{id}")
public Employee getEmp(@PathVariable("id") Integer id){
return employeeMapper.getEmpById(id);
}

springboot-数据库访问之mybatis的更多相关文章

  1. SpringBoot数据库访问(一)--------关系型数据库访问(RDBMS)

    关系型数据库访问(RDBMS) 采用JdbcTemplate.MyBatis.JPA.Hibernate等技术. 一.JdbcTemplate工具 在pom.xml添加boot-starter-jdb ...

  2. springBoot数据库jpa+对接mybatis

    1  spring Data jpa hibernate引领数据访问技术,使用orm对象关系映射来进行数据库访问,通过模型和数据库进行映射,通过操作对象实现对数据库操作,把数据库相关操作从代码中独立出 ...

  3. SpringBoot入门 (六) 数据库访问之Mybatis

    本文记录学习在SpringBoot中使用Mybatis. 一 什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 ...

  4. SpringBoot:4.SpringBoot整合Mybatis实现数据库访问

    在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...

  5. SpringBoot入门 (四) 数据库访问之JdbcTemplate

    本文记录在SpringBoot中使用JdbcTemplate访问数据库. 一 JDBC回顾 最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName( ...

  6. SpringBoot数据访问(一) SpringBoot整合Mybatis

    前言 SpringData是Spring提供的一个用于简化数据库访问.支持云服务的开源框架.它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是为了使我们可以快速且 ...

  7. SpringBoot数据访问之整合mybatis注解版

    SpringBoot数据访问之整合mybatis注解版 mybatis注解版: 贴心链接:Github 在网页下方,找到快速开始文档 上述链接方便读者查找. 通过快速开始文档,搭建环境: 创建数据库: ...

  8. Spring+MyBatis实践—MyBatis数据库访问

    关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出.在此,记录一下几种通过MyBatis访问数据库的方式. 通过sqlSessionTempl ...

  9. Spring Mvc和Mybatis的多数据库访问配置过程

    Spring Mvc 加Mybatis的多数据库访问源配置访问过程如下: 在applicationContext.xml进行配置 <?xml version="1.0" en ...

  10. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架.如果数据量很大,一个MYSQL库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

随机推荐

  1. NSSCTF-[SWPU 2020]找找吧

    下载附件得到一个rar的压缩包,解压是需要密码的,直接丢尽winhex(菜狗经验),在最下面可以看到一个KEY is 得到第一个压缩包的密码,解压第一个压缩包得到一个mp3文件和另一个rar压缩包,将 ...

  2. BI报表系统该如何集成到其他系统呢?

    近期小麦我经常收到很多用户的反馈,想知道Smartbi的报表能不能从微信/钉钉之类的直接跳转到已做好的报表页面?他们都希望通过这种方式尽可能地避免由于各个管理软件账号密码不同而造成的不便,能够在日常工 ...

  3. 【windwos 操作系统】关键的Windows内核数据结构一览(下)

    I/O管理器 nt!_IRP IRP表示一个I/O请求包结构体,它用来封装执行一个特定I/O操作所需要的所有参数以及I/O操作的状态.IRP的表现也类似于一个线程独立调用栈因此它可以从一个线程传递到另 ...

  4. 如何在github上准确的搜索 项目

    1.按名字搜索:in:name 1. 2.in:name wpf stars:>100 2.按 in:readme wpf stars:>100  3.按描述搜索 in:descripti ...

  5. C# 属性(一)

    C# 中的属性是特殊的方法,该方法只负责对私有字段经行的操作,.我们用反编译查看时候看到真实属性是带()的方法,里面还包含get()和set()方法. 属性完成对私有字段的封装.对类的外部用户来说,属 ...

  6. Collection接口和Map接口的 size 方法和 isEmpty方法

    一.Collection接口的 size 方法和 isEmpty方法 int size(); 返回列表中元素的数目,如果这个列表包含超过Integer.MAX_VALUE,则返回Integer.MAX ...

  7. H5点击不同按钮跳转显示不同分页

    预期效果(页面1): 点击后显示对应的内容(页面2): HTML(页面1): 添加 onclick 跟 data-index     <!-- 3我的订单 -->     <div ...

  8. omnet++:官方文档翻译总结(三)

    翻译总结自:Turning it Into a Real Network - OMNeT++ Technical Articles 接官方文档翻译总结(二),本节主要是真实网络的搭建 Part 4 - ...

  9. k8s-静态PV和动态PV

    1.pv 简单介绍 PersistenVolume(PV):对存储资源创建和使用的抽象,使得存储作为集群中的资源管理 PV分为静态和动态,动态能够自动创建PV • PersistentVolumeCl ...

  10. Docker - 安装&测试

    一.什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中 ...