这篇文章主要介绍Spring Boot数据访问之Mybatis的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
JDBC:Java和关系型数据库的桥梁,是一个规范,不是实现。不同类型的数据库需要有自己的JDBC实现
数据源:包含数据库连接池,连接池管理。常见的有C3P0、HikariDataSoiurce、Druid等
连接池:预先创建一些数据库连接,放到连接池里面,用的时候从连接池里面取,用完后放回连接池
连接池管理:创建数据库连接,管理数据库连接
JDBC实现:MySQL JDBC实现、Oracle JDBC实现等其他实现
MyBatis对JDBC进行了封装
我们基于之前创建的项目spring-boot-06-data-druid 来创建spring-boot-07-data-mybatis项目
1)引入MyBatis依赖
<!-- mybatis --><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version></dependency>
2)引入其他依赖
<dependencies> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- swagger --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <!-- Druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.21</version> </dependency>
3)依赖图
DROP TABLE IF EXISTS `department`;CREATE TABLE `department` ( `id` int(11) NOT NULL AUTO_INCREMENT, `department_name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
initialization-mode: alwaysschema: - classpath:department.sql
执行一次后,注释 initialization-mode
# initialization-mode: always
package com.jackson0714.springboot.entity;public class Department { private Long id; private String departmentName; public void setId(Long id) { this.id = id; } public Long getId() { return id; } public void setDepartmentName(String departmentName) { this.departmentName = departmentName; } public String getDepartmentName() { return departmentName; }}
增删改查,你要的都在这里:
@Mapperpublic interface DepartmentMapper { @Select("select * from department") List<Map<String, Object>> getAllDepartment(); @Select("select * from department where id=#{id}") Department getDepartmentById(Long id); @Delete("delete from department where id=#{id}") int deleteDepartment(Long id); @Insert("insert into department(department_name) values(#{departmentName})") int createDepartment(String departmentName); @Update("update department set department_name=#{departmentName} where id=#{id}") int updateDepartmentById(Long id, String departmentName);}
增加自定义配置:如果表的字段名有下划线格式的,转为驼峰命名格式
@org.springframework.context.annotation.Configurationpublic class MyBatisConfig { @Bean public ConfigurationCustomizer configurationCustomizer() { return new ConfigurationCustomizer() { @Override public void customize(Configuration configuration) { // 如果表的字段名有下划线格式的,转为驼峰命名格式 configuration.setMapUnderscoreToCamelCase(true); } }; }}
@Api(value = "DepartmentController", description = "部门controller")@RequestMapping("/v1/client")@RestControllerpublic class DepartmentController { @Autowired DepartmentMapper departmentMapper; @ApiOperation(value = "1.查询所有部门") @GetMapping("/dept/getAllDepartment") public List<Map<String, Object>> getAllDepartment() { return departmentMapper.getAllDepartment(); } @ApiOperation(value = "2.根据id查询某个部门") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "需要查询的部门id") }) @GetMapping("/dept/{id}") public Department getDepartmentById(@PathVariable Long id) { return departmentMapper.getDepartmentById(id); } @ApiOperation(value = "3.新增部门") @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "部门名称") }) @PostMapping("/dept/create") public int createDepartment(@RequestParam String name) { return departmentMapper.createDepartment(name); } @ApiOperation(value = "4.根据id删除部门") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "需要删除的部门id") }) @PostMapping("/dept/delete") public int deleteDepartment(@RequestParam Long id) { return departmentMapper.deleteDepartment(id); } @ApiOperation(value = "5.根据id更新部门名称") @ApiImplicitParams({ @ApiImplicitParam(name = "id", value = "需要更新的部门id"), @ApiImplicitParam(name = "name", value = "需要更新的部门名称") }) @PostMapping("/dept/update") public int updateDepartmentById(@RequestParam Long id, @RequestParam String name) { return departmentMapper.updateDepartmentById(id, name); }}
使用Swagger来测试
SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for user-- ----------------------------DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `user_name` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名', `password` varchar(255) COLLATE utf8mb4_bin NOT NULL, `salt` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '随机盐', `nickName` varchar(255) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名', `phone` varchar(20) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '手机号', `avatar` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '头像', `mini_openId` varchar(32) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '小程序OpenId', `lock_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,9-锁定', `del_flag` char(1) COLLATE utf8mb4_bin DEFAULT '0' COMMENT '0-正常,1-删除', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`user_id`), KEY `user_wx_openid` (`mini_openId`), KEY `user_idx1_username` (`user_name`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户表';
INSERT INTO user(user_name, password, nick_name, phone) values ("jackson0714", "123", "悟空聊架构", "123456")
package com.jackson0714.springboot.entity;import lombok.Data;import java.sql.Timestamp;@Datapublic class User { private Long userId; private String userName; private String password; private String salt; private String nickName; private String phone; private String avatar; private String miniOpenId; private String openId; private Boolean lockFlag; private Boolean delFlag; private Timestamp createTime; private Timestamp updateTime;}
需要安装Lombok插件
需要引入Lombok依赖
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.12</version> <scope>provided</scope></dependency>
// @Mapper 或MapperScan 将接口扫描装配到装配容器中public interface UserMapper { User getUserById(Long userId);}
<?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.jackson0714.springboot.mapper.UserMapper"> <select id="getUserById" resultType="com.jackson0714.springboot.entity.User"> SELECT * FROM user WHERE user_id=#{userId} </select></mapper>
@Api(value = "UserController", description = "用户controller")@RequestMapping("/v1/client")@RestControllerpublic class UserController { @Autowired UserMapper userMapper; @ApiOperation(value = "1.根据id查询某个用户") @ApiImplicitParams({ @ApiImplicitParam(name = "需要查询的用户userId", value = "需要查询的用户userId") }) @GetMapping("/emp/{userId}") public User getUser(@PathVariable("userId") Long userId) { return userMapper.getUserById(userId); }}
@MapperScan(value = "com.jackson0714.springboot.mapper")@SpringBootApplicationpublic class Springboot07DataMybatisApplication { public static void main(String[] args) { SpringApplication.run(Springboot07DataMybatisApplication.class, args); }}
代码下载:
https://github.com/Jackson0714/study-spring-boot.git
以上是“Spring Boot数据访问之Mybatis的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4499317/blog/4648321