选中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. kali linux 出现 E: 您在 /var/cache/apt/archives/ 上没有足够的可用空间。

    问题: E: 您在 /var/cache/apt/archives/ 上没有足够的可用空间. 软链接到HOME下的一个目录即可,home下新建debs文件夹: 在某个空间大的分区建立一个目录,然后把/ ...

  2. 零基础小白也能用的商业智能BI工具,自助式就是香!

    ​随着数字化时代的到来,数据已经成为企业无形的资源,企业对员工的数据分析能力也提出了新的要求.掌握一定的数据分析能力无疑会大大增加自己在职场中的竞争力,但并不是所有人都具备专业的数据分析基础,尤其是虽 ...

  3. 一个快速制作表格的方法,和熬夜做表say拜拜

    如今已是大数据时代了,统计工作是非常繁琐的一项工作,通常统计老师为了录单工作到下半夜或者是通宵,现在有了很多制作表单的软件,可以大大减轻基层统计老师的工作量,也增加了会员资料的保密性,给我们统计工作带 ...

  4. 思迈特软件Smartbi:Excel数据分析常用函数汇总!

    多传统行业的数据分析师只要求掌握Excel即可,会SPSS/SAS是加分项.即使在挖掘满街走,Python不如狗的互联网数据分析界,Excel也是不可替代的. Excel是我们工作中经常使用的一种工具 ...

  5. Oracle之表和字段的注释

    给表名加上注释 --给表名加上注释的语法结构 --语法结构:COMMENT ON TABLE 英文表名 IS '中文注释' COMMENT ON TABLE DEPT IS '部门表'; 给字段加上注 ...

  6. (第一章第四部分)TensorFlow框架之张量

    系列博客链接: (一)TensorFlow框架介绍:https://www.cnblogs.com/kongweisi/p/11038395.html (二)TensorFlow框架之图与Tensor ...

  7. HTML的怎么使用,开发工具以及常用标签。

    前端学习:学习地址:黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动,下面这些都是一些学习笔记.临渊羡鱼,不如退而结网!!愿我自己学有所成,也愿每个前端爱好者学有所成 ...

  8. Node.js躬行记(16)——活动配置化

    一直想将一些常规活动抽象化,制作成可配置的.原先的计划是做成拖拽的,那种可视化搭建,运营也能自己搭建页面. 这是一个美好的愿景,但是现实不允许我花太多精力去制作这样一个系统.经过权衡后,先设计成一个可 ...

  9. composer 自动载入的四种方式

    对于第三方包的自动加载,Composer提供了四种方式的支持,分别是 PSR-0和PSR-4的自动加载,生成class-map,和直接包含files的方式. 首先引入autoload.php,在主文件 ...

  10. System x 服务器制作ServerGuide U盘安装Windows Server 2012 R2操作系统

    以下内容来源于:联想官方知识库  http://iknow.lenovo.com.cn/detail/dc_154773.html 本例介绍以U盘方式,通过ServerGuide引导在System x ...