Springboot+Mybatis Plus+H2 database项目搭建

本文详细介绍如何使用H2Database和MyBatis-Plus构建一个简易的SpringBoot项目,涵盖环境搭建、依赖配置、数据源设置、表结构及数据初始化、功能代码实现与测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

因为业务需要,项目中需要使用内嵌式数据库,翻了翻之前使用h2的demo,发现竟没有一个完整的,于是重新搭建一下,顺便记录。

开发环境
  • jdk 8.0
  • maven 3.3.9
  • mybatis plus 3.2.0
  • h2database 1.4.200
  • 开发工具:IDEA
相关技术
mybatis plus

看名字就能大概知道,是mybatis 的增强版,主要特点是快速配置,简化开发,具体可以参考mybatis plus官网,内容非常详细。

优点
  • 支持多种数据库
  • 代码生成
  • 单表CRUD
  • 支持page分页
  • 主键生成策略
h2 database

是由java编写的内嵌式数据库,运行于7,8,11版本的jdk中,支持所有主要的操作系统(Windows, Mac OS X, Linux,…),具体可以参考h2databse官网

特点
  • 非常快,开源的JDBC API
  • 嵌入式和服务器模式;内存数据库
  • 基于浏览器控制台应用程序
  • 占用空间小:约2 MB jar文件的大小
连接模式
  • 嵌入式模式(使用JDBC的本地连接)
  • 服务器模式(通过TCP/IP使用JDBC或ODBC的远程连接)
  • 混合模式(本地连接和远程连接同时进行)
项目搭建
1.创建项目
2.添加依赖
  • web
  • mybatis plus
  • lombok
  • h2database
	  <dependency>
         <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>

      <!--mybatis plus 依赖-->
      <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.3.2</version>
      </dependency>

      <!--代码简化-->
      <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
      </dependency>

      <!--h2database-->
      <dependency>
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
          <version>1.4.200</version>
          <scope>runtime</scope>
      </dependency>
3.数据源
  • 此处设置的用户名密码会在程序启动后初始化为数据库的用户名密码
server.port=8088

#数据源
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=sa
spring.datasource.password=9527
spring.datasource.schema=classpath:db/schema-h2.sql
spring.datasource.data=classpath:db/data-h2.sql

#Whether to enable the console是否启用控制台
spring.h2.console.enabled=true
#Path at which the console is available.控制台可用路径
spring.h2.console.path=/h2-database
4.表和数据
  • schema-h2.sql 表结构
DROP TABLE IF EXISTS liquor;

CREATE TABLE liquor
(
  id BIGINT(20) NOT NULL COMMENT '主键ID',
  name VARCHAR(30) NULL DEFAULT NULL COMMENT '名称',
  price INT(11) NULL DEFAULT NULL COMMENT '价格',
  PRIMARY KEY (id)
);

  • data-h2.sql 数据
DELETE FROM liquor;

INSERT INTO liquor (id, name, price) VALUES
  (1, '老白干', 13),
  (2, '泸州老窖', 127),
  (3, '酒鬼', 74),
  (4, '茅台', 1687),
  (5, '五粮液', 222);
5.功能代码
  • entity
/**
 * 酒
 */
@Data
public class Liquor {
    @TableId(type = IdType.ASSIGN_ID)
    public Long id;
    public String name;
    public Integer price;
}
  • mapper
@Mapper
public interface LiquorMapper extends BaseMapper<Liquor> {
}
  • controller
@RestController
public class LiquorController {
    @Autowired
    private LiquorMapper liquorMapper;

    @GetMapping("/find")
    public List<Liquor> findLiquor(){
        return liquorMapper.selectList(null);
    }
}
运行测试

项目搭建到这里就一切就绪了,然后现在只需要运行项目

数据库
  • 访问http://localhost:8088/h2-database
    h2database
  • 通过账号密码登录数据库,则可以看到已经通过sql文件插入的数据
    h2-database2
接口测试
  • 访问http://localhost:8088/find,能够获取到数据
    find
项目结构

最后附上项目结构,一个简单的小demo
在这里插入图片描述


强行总结

这套技术放一起就是一个特点简单,尤其像h2这种嵌入式的内存数据库,基本不需要复杂联表,都是单表操作的,搭配上Mybatis Plus简直不要太easy

源码下载:H2database + MyBatis-Plus SSM.zip

当然,若是嫌麻烦,或者想省事儿的话,可以直接加我微信,备注"H2ssm",我直接发你
在这里插入图片描述

最后,写的若有不足或需要改进之处,欢迎多多批评

<think>嗯,用户现在想用Spring Boot结合H2数据库和MyBatis实现查询功能。我需要先回顾之前的对话,确保回答的一致性。用户之前问过关于Spring Boot和H2的集成,但当时用的是JPA,现在换成MyBatis了。所以这次需要调整配置,尤其是MyBatis相关的部分。 首先,用户引用了几个资料,其中提到了MyBatisMyBatis-Plus的集成,还有分页配置和拦截器。不过用户的具体需求是实现查询功能,所以可能不需要太复杂的内容,但需要涵盖基本的配置和查询步骤。 接下来,我需要整理实现步骤。应该从添加依赖开始,包括Spring Boot、MyBatis、H2的依赖。然后配置数据源,和之前类似,但需要加上MyBatis的配置,比如mapper-locations。然后创建实体类,但MyBatis不需要JPA注解,所以可能需要不同的方式,比如使用@Alias或者XML映射。 然后,创建Mapper接口,这里要用MyBatis的@Mapper或者@MapperScan注解。用户可能需要XML映射文件或者注解方式,比如@Select。还需要初始化数据,可以用data.sql,或者通过MyBatis的脚本。 服务层和控制器层和之前类似,但需要调用MyBatis的Mapper接口。测试部分也要提到如何访问H2控制台和调用API。 可能的问题包括依赖配置错误、MyBatis的mapper路径设置不正确、H2连接问题等。需要提醒用户检查这些点。 另外,用户提到的引用中有提到分页配置和拦截器,虽然用户当前需求可能不需要,但可以作为相关问题推荐,比如如何实现分页查询或者整合MyBatis-Plus。 需要确保所有步骤清晰,代码示例正确,特别是MyBatis的配置部分,比如在application.properties中添加mybatis.mapper-locations,并创建对应的XML文件。同时,示例查询可以使用注解和XML两种方式,方便用户选择。 最后,相关问题部分可以引导用户深入,比如H2持久化、多数据源配置、MyBatis性能优化等,参考之前的引用和常见问题。</think>### Spring Boot + H2 + MyBatis 查询实现完整流程 #### 1. 项目依赖配置 ```xml <!-- pom.xml核心依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> </dependencies> ``` #### 2. 数据库配置 `application.properties`关键配置: ```properties # H2内存数据库配置 spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1 spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa spring.datasource.password= # MyBatis配置 mybatis.mapper-locations=classpath:mapper/*.xml mybatis.type-aliases-package=com.example.model # 启用H2控制台 spring.h2.console.enabled=true spring.h2.console.path=/h2-console ``` #### 3. 实体类定义 ```java // 使用MyBatis无需JPA注解 public class User { private Long id; private String name; private String email; // Getter/Setter省略 } ``` #### 4. Mapper接口开发 ```java @Mapper public interface UserMapper { // 注解方式查询 @Select("SELECT * FROM users WHERE id = #{id}") User findById(Long id); // XML映射查询 List<User> findByName(String name); } ``` #### 5. SQL映射文件 `src/main/resources/mapper/UserMapper.xml`: ```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.example.mapper.UserMapper"> <select id="findByName" resultType="User"> SELECT * FROM users WHERE name LIKE CONCAT('%', #{name}, '%') </select> </mapper> ``` #### 6. 数据初始化 `src/main/resources/schema.sql`: ```sql CREATE TABLE users ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), email VARCHAR(100) ); ``` `src/main/resources/data.sql`: ```sql INSERT INTO users(name, email) VALUES('张三', 'zhangsan@example.com'); INSERT INTO users(name, email) VALUES('李四', 'lisi@example.com'); ``` #### 7. 服务层实现 ```java @Service public class UserService { @Autowired private UserMapper userMapper; public User getById(Long id) { return userMapper.findById(id); } public List<User> searchByName(String name) { return userMapper.findByName(name); } } ``` #### 8. REST控制器 ```java @RestController @RequestMapping("/api/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public ResponseEntity<User> getById(@PathVariable Long id) { return ResponseEntity.ok(userService.getById(id)); } @GetMapping("/search") public ResponseEntity<List<User>> search(@RequestParam String name) { return ResponseEntity.ok(userService.searchByName(name)); } } ``` #### 验证流程 1. 访问`http://localhost:8080/h2-console`验证表结构 2. 测试接口: ```bash # 查询单个用户 curl http://localhost:8080/api/users/1 # 模糊搜索 curl http://localhost:8080/api/users/search?name=张 ``` ### 常见问题解决方案 1. **Mapper未找到**:检查`@MapperScan(basePackages = "com.example.mapper")`是否在启动类添加 2. **SQL语法错误**:在H2控制台直接执行SQL验证语句正确性[^1] 3. **字段映射失败**:确保实体类字段名与数据库列名一致(H2默认大写转小写)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值