springboot2.5.5配置mybatis

【README】

1.本文记录了 springboot2.5.5 配置 mybatis的步骤;

2.配置mybatis 分为注解和配置两种方式

3.引入mybatis,包括了

  1. 创建springbt项目;
  2. druid数据源配置;
  3. 数据库表与javabean;
  4. mybatis配置与sql映射;
  5. 用户请求controller处理;

【1】springboot使用@注解引入mybatis

【1.1】创建springboot项目

步骤1, 新建springboot项目;

步骤2,选择依赖,包括springweb,mysql驱动,mybatis;(当然也可以手动录入 maven 依赖)

因为  mybatis-spring-boot-starter 引入了 jdbc starter,所需这里无需引入;

pom.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cmc</groupId><artifactId>springbt-06-data-mybatis2</artifactId><version>0.0.1-SNAPSHOT</version><name>springbt-06-data-mybatis2</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- 引入druid数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!-- 需要引入log4j,因为druid使用了log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

【1.2】druid数据源配置

步骤1,引入 druid 依赖;

<!-- 引入druid数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency><!-- 需要引入log4j,因为druid使用了log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency>

步骤3, 数据源druid配置; application.yml

# 配置springboot数据源
spring:datasource:username: rootpassword: rooturl: jdbc:mysql://192.168.163.204:3306/mybatisdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource  # 启用druid数据源#   数据源其他配置initialSize: 6minIdle: 6maxActive: 26maxWait: 60000timeBetweenEvictionRunsMillis: 60000minEvictableIdleTimeMillis: 300000testWhileIdle: truetestOnBorrow: falsetestOnReturn: falsepoolPreparedStatements: true#   配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

druid 监控servlet配置;

// 导入druid数据源
@Configuration
public class DruidConfig {@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druid() {return new DruidDataSource();}// 配置druid监控// 1 配置一个管理后台的servlet@Beanpublic ServletRegistrationBean statViewServlet() {ServletRegistrationBean bean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");// 配置相关参数Map<String, String> params = new HashMap<>();params.put("loginUsername", "admin");params.put("loginPassword", "admin");params.put("allow", "localhost"); // 默认允许所有访问params.put("deny", "192.168.163.204"); // 默认允许所有访问bean.setInitParameters(params);return bean;}// 2 配置一个监控的filter@Beanpublic FilterRegistrationBean webStatFilter() {FilterRegistrationBean bean = new FilterRegistrationBean<>();bean.setFilter(new WebStatFilter());// 配置相关参数Map<String, String> params = new HashMap<>();params.put("exclusions", "*.js,*.css,/druid/*");bean.setInitParameters(params);bean.setUrlPatterns(Arrays.asList("/*"));return bean;}
}

【1.3】数据库表与javabean

步骤1,数据库表

CREATE TABLE `employee` (`id` int NOT NULL AUTO_INCREMENT,`last_name` varchar(255) DEFAULT NULL,`email` varchar(255) DEFAULT NULL,`gender` int DEFAULT NULL,`d_id` int DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3
;CREATE TABLE `department` (`id` int NOT NULL AUTO_INCREMENT,`department_name` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb3
;

步骤2,编写db表映射的javabean;


public class Department {private Integer id;private String departmentName;public Department(){}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;MybatisAutoConfiguration conf = null;}public String getDepartmentName() {return departmentName;}public void setDepartmentName(String departmentName) {this.departmentName = departmentName;}@Overridepublic String toString() {return "Department{" +"id=" + id +", departmentName='" + departmentName + '\'' +'}';}
}public class Employee {private Integer id;private String lastName;private Integer gender;private String email ;private Integer dId;public Employee(){}.............
}

【1.4】mybatis全局配置与sql映射

步骤1,mybatic全局配置类(也可以通过 mybatis-config.xml 来实现);

@MapperScan 注解用于扫描 传入包下的所有Mapper类;

@org.springframework.context.annotation.Configuration
@MapperScan("com.cmc.springbt.mapper")
public class MyBatisConfig {@Beanpublic ConfigurationCustomizer configurationCustomizer() {return new ConfigurationCustomizer() {@Overridepublic void customize(Configuration configuration) {configuration.setMapUnderscoreToCamelCase(true); // 开启驼峰}};}
}

步骤2,编写 mybatis maper,sql操作接口;

MybatisConfig 中的注解 MapperScan 已经可以扫描到 DepartmentMapper, 这里无需 添加@Mapper 注解; 两者取1 即可;

// 指定这是一个操作数据库的mapper
//@Mapper
public interface DepartmentMapper {@Select("select * from department where id=#{id} ")public Department getDeptByID(int id);@Delete("delete from department where id=#{id}")public int deleteDeptById(int id) ;@Insert("insert into department(department_name) values(#{departmentName})")@Options(useGeneratedKeys = true,keyProperty = "id")public int insertDept(Department dept);@Update("update department set department_name=#{departmentName} where id=#{id}")public int updateDept(Department dept);
}

【1.5】用户请求controller处理,使用 DepartmentMapper

步骤1,请求controller处理

@@RestController
public class DeptController {@AutowiredDepartmentMapper departmentMapper;@GetMapping("dept/{id}")public Department getDepartment(@PathVariable("id") Integer id) {return departmentMapper.getDeptByID(id);}@GetMapping("dept")public Department insertDept(Department dept) {departmentMapper.insertDept(dept);return dept;}
}

注意,这是 @RestController, 而不是 @Controller;因为我是写数据到servlet,而不是到某个具体视图;

步骤2,修改springboot web项目配置(或有)

application.properties  

# 服务器配置
server.port=8085
server.servlet.context-path=/springbt-mybatis2

小结,整体项目结构


【1.6】访问效果

http://localhost:8085/springbt-mybatis2/dept?departmentName=zhangsan01
http://localhost:8085/springbt-mybatis2/dept/13 http://localhost:8085/springbt-mybatis2/dept/13

 


 【2】springboot使用配置引入mybatis

【2.1】 编写mybatis全局配置与sql文件

mybatis-config.xml 全局配置文件

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

【2.2】sql接口与sql映射文件

EmployeeMapper.java

// @Mapper 或  @MapperScan 把接口扫描装配到容器中
public interface EmployeeMapper {public Employee getEmpById(Integer id);public void insertEmp(Employee empt);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cmc.springbt.mapper.EmployeeMapper"><!--  通过id查询emp --><select id="getEmpById" resultType="com.cmc.springbt.bean.Employee">SELECT id, last_name, email, gender, d_idFROM employeewhere id = #{id}</select><!-- 插入emp --><insert id="insertEmp">INSERT INTO employee(last_name, email, gender, d_id)VALUES(#{lastName}, #{email}, #{gender}, #{dID})</insert></mapper>

【2.3】在 application.yml 中指定 mybatis配置

# 配置mybatis 全局配置文件和mapper路径
mybatis:config-location: classpath:mybatis/mybatis-config.xmlmapper-locations: classpath:mybatis/mapper/*.xml

【2.4】编写 EmpController处理 employee请求

@RestController
public class EmpController {@AutowiredEmployeeMapper employeeMapper;@GetMapping("/emp/{id}")public Employee getEmp(@PathVariable("id") Integer id) {return employeeMapper.getEmpById(id);}
}

小结, mybatis配置后的整体目录结构;


 【2.5】访问效果

http://localhost:8085/springbt-mybatis2/emp/1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java命令学习系列(三)——Jmap

转载自 Java命令学习系列&#xff08;三&#xff09;——Jmapjmap是JDK自带的工具软件&#xff0c;主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成Heap Dump。在Java命令学习系列&#xff08;零&#xff09;——常见命…

skimage直方图如何保存_LightGBM的参数详解以及如何调优

lightGBM可以用来解决大多数表格数据问题的算法。有很多很棒的功能&#xff0c;并且在kaggle这种该数据比赛中会经常使用。但我一直对了解哪些参数对性能的影响最大以及我应该如何调优lightGBM参数以最大限度地利用它很感兴趣。我想我应该做一些研究&#xff0c;了解更多关于li…

基于springboot2.5.5自建启动器starter制品库

【README】 本文po出了自建springboot 启动器步骤&#xff1b; 【1】新建2个starter相关组件 根据 mybatis-spring-boot-starter&#xff0c;我们看到 自建starter需要两个组件&#xff0c;分别是 xxx-spring-boot-starter&#xff0c; xxx-spring-boot-starter-autoconfigu…

Java命令学习系列(二)——Jstack

转载自 Java命令学习系列&#xff08;二&#xff09;——Jstackjstack是java虚拟机自带的一种堆栈跟踪工具。功能 jstack用于生成java虚拟机当前时刻的线程快照。线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合&#xff0c;生成线程快照的主要目的是定位线程出…

python中ls是什么_使用Python代码实现Linux中的ls遍历目录命令的实例代码

一、写在前面 前几天在微信上看到这样一篇文章&#xff0c;链接为&#xff1a;https://www.jb51.net/it/692145.html&#xff0c;在这篇文章中&#xff0c;有这样一段话&#xff0c;吸引了我的注意&#xff1a;在 Linux 中 ls 是一个使用频率非常高的命令了&#xff0c;可选的参…

spring中stereotype注解Component,Repository,Service,Controller

【README】 本文介绍了 spring4.0 下 org.springframework.stereotype 的注解类型&#xff0c;俗称刻板型注解&#xff08;一成不变型&#xff09;&#xff1b; 包括 Component&#xff0c; Repository&#xff0c;Service&#xff0c; Controller &#xff1b; 目录 【REA…

[中级]Java命令学习系列(五)——jhat

转载自 [中级]Java命令学习系列&#xff08;五&#xff09;——jhatjhat(Java Heap Analysis Tool),是一个用来分析java的堆情况的命令。之前的文章讲到过&#xff0c;使用jmap可以生成Java堆的Dump文件。生成dump文件之后就可以用jhat命令&#xff0c;将dump文件转成html的形式…

转:IDEA 创建类注释模板和方法注释模板

转自&#xff1a; IDEA 创建类注释模板和方法注释模板 - 简书  在使用Idea的时候&#xff0c;它的注释模板很简单&#xff0c;不够详细&#xff1b;所有大多数开发者都想设置一个比较详细的注释模板&#xff0c;我现在把我了解的创建类注释模板和方法注释模板的操作记录下来…

mappedbytebuffer_Java NIO Buffer【MappedByteBuffer】概述与FileChannel的联系

“ NIO【Non-blocking IO非阻塞式IO】&#xff0c;可以让你非阻塞的使用IO&#xff0c;例如&#xff1a;当线程从通道读取数据到缓冲区时&#xff0c;线程还是可以进行其他事情。当数据被写入到缓冲区时&#xff0c;线程可以继续处理它。从缓冲区写入通道也类似&#xff0c;主要…

[初级]Java命令学习系列(六)——jinfo

转载自 [初级]Java命令学习系列&#xff08;六&#xff09;——jinfojinfo可以输出java进程、core文件或远程debug服务器的配置信息。这些配置信息包括JAVA系统参数及命令行参数,如果进程运行在64位虚拟机上&#xff0c;需要指明-J-d64参数&#xff0c;如&#xff1a;jinfo -J-…

idea 调整代码格式

1. 格式化代码时&#xff0c; 不想格式化注释&#xff0c; refer2 IDEA格式化代码时&#xff0c;不想格式化注释怎么办&#xff1f;_缘自天方的博客-CSDN博客_idea不格式化注释很简单&#xff0c;只需要把 Enable JavaDoc formatting 去掉选中状态即可。附图如下&#xff1a;h…

python递归算法_python递归算法(上)

什么是递归 在函数内部&#xff0c;是可以调用其他函数的。如果一个函数在内部调用自身&#xff0c;就称这个函数就是递归函数。举个例子&#xff1a; 实现一个可以自定义重复打印你好的函数。 要实现重复打印&#xff0c;可能我们立马就会想到使用循环。如果要求不能使用循环呢…

[初级]Java命令学习系列(七)——javap

转载自 [初级]Java命令学习系列&#xff08;七&#xff09;——javapjavap是jdk自带的一个工具&#xff0c;可以对代码反编译&#xff0c;也可以查看java编译器生成的字节码。一般情况下&#xff0c;很少有人使用javap对class文件进行反编译&#xff0c;因为有很多成熟的反编译…

局域网物理机怎么访问虚拟机

前言 友链: 原文地址 ❓-背景- 现有物理机A&#xff0c;B。A中安装了虚拟机VM上面部署了服务&#xff08;这里以mysql为例&#xff09;。B需要访问A虚拟机中部署的服务。 -环境- 物理机A&#xff08;192.168.135.161&#xff09;物理机B&#xff08;192.168.135.162&#xf…

springmvc新建拦截器

【1】web.xml中配置springmvc的配置文件路径 <!-- 配置 DispatcherServlet --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!…

householder变换qr分解matlab_【基础教程】Matlab实现傅里叶变换

傅立叶变换傅立叶变换是一种常见的分析方法&#xff0c;傅立叶变换将满足一定条件的函数表示为一些函数的加权和(或者积分)。可以分为四个类别&#xff1a; 1. 非周期连续性信号 对应于傅里叶变换&#xff0c;频域连续非周期 2. 周期性连续性信号 对应于傅立叶级数&#xff0c;…

Java开发必会的Linux命令

转载自 Java开发必会的Linux命令 必会Linux命令清单查找文件 find / -name filename.txt 根据名称查找/目录下的filename.txt文件。 find . -name "*.xml" 递归查找所有的xml文件 find . -name "*" |xargs grep "hello" 递归查找所有文件内容中包…

http连接池

转自 &#xff1a; 最近学习了Http连接池 - 五月的仓颉 - 博客园 【1】使用线程池与否的程序性能 我的任务定义&#xff1a;从0 累加到 100w&#xff1b; public class ThreadPoolMain {/*** 线程池测试*/private static final AtomicInteger THREAD_EXECUTED_TOTAL new At…

Quartz定时任务的基本搭建

前言 个人地址&#xff1a;Quartz定时任务的基本搭建 Quartz是一个完全由Java编写的开源作业调度框架&#xff0c;为在java应用程序中进行作业调度提供了简单又强大的机制。 Quartz中分为几个核心概念&#xff1a; Job - 表示一个工作&#xff08;任务&#xff09;&#xff0…

matlab 定义一个有自变量的方程_常微分方程:(第四章) 高阶微分方程

参考《常微分方程》第三版&#xff08;王高雄&#xff09;常微分方程王高雄 第四章 高阶微分方程_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com对于高阶微分方程&#xff0c;线性部分见4、5章&#xff0c;非线性部分见6章。4.1 线性微分方程的一般理论定义&#xff…