实现启动项目时数据库表初始化,基于注解实现mybatis查询

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 实现启动项目时数据库表初始化,基于注解实现mybatis查询

目录

一、背景

二、实现启动项目时数据库表初始化

三、基于注解实现mybatis查询

四、总结

一、背景

     之前写了一篇spring boot 2版本以上基于xml实现mybatis查询的文章,这次实现一下基于注解的mybatis查询,同时实现一下启动项目时初始化数据库表,实现这两个功能以后,该demo就即可以支持xml查询,也可以基于注解实现查询。项目地址如下,需要切换到zhujie-mybatis分支。

https://github.com/xujiankang6/spring-boot-research.git

二、实现启动项目时数据库表初始化

1、添加mysql依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.35</version>
        </dependency>

2、yml配置mysql


(1)schema配置的是生成表结构的schema.sql的路径。


(2)data配置的是插入测试数据的data.sql的路径。


(3)initialization-mode配置参数always,意思是每次重启项目都执行sql语言,初始化数据库表和数据。

  datasource:
    name: test
    url: jdbc:mysql://127.0.0.1:3306/test
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456
    schema: classpath:schema.sql
    data: classpath:data.sql
    initialization-mode: always
#    separator: $$$

3、schema.sql文件如下,保存在resources路径下,如下。

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `uname` varchar(255) NOT NULL,
  `upwd` varchar(255) NOT NULL,
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

4、data.sql插入测试数据,内容如下。

(1)多插入一批,后面会做基于mybatis做分页功能,会用到。

insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')
insert into `user`(uname,upwd) VALUES('test','password')

5、以上就配置完成了,启动项目后就会生成表和表数据。

6、问题

(1)出现这个bug错误,可以打开上面的 separator:

image.png

三、基于注解实现mybatis查询

1、引入mybatis依赖

<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
</dependency>

2、在spring boot启动类上配置mapper扫描路径。

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
@ComponentScan({ "com.example.demo.*" })
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

3、在mapper扫描路径下新建mapper类

(1)使用@Select注解写sql查询。

(2)使用@Results注解写要查询的字段以及数据库表字段和User实体类的映射。

(3)mapper类上加@Mapper注解

@Mapper
public interface TestMapper {
    @Results({
            @Result(column = "uid",property = "uid"),
            @Result(column = "uname",property = "uname"),
            @Result(column = "upwd",property = "upwd")
    })
    @Select("select * from user ")
    List<User> selectUser();
}

(4)@Results注解配置的字段其他方法也需要的复用的话可以这样写。

@Results(id="getusers",value = {
            @Result(column = "uid",property = "uid"),
            @Result(column = "uname",property = "uname"),
            @Result(column = "upwd",property = "upwd")
    })

(5)其他方法引用的话使用@ResultMap注解,里面传id值。

@ResultMap("getusers")

4、User实体类如下。

public class User {
    private Integer uid;
    private String uname;
    private String upwd;
    public Integer getUid() {
        return uid;
    }
    public void setUid(Integer uid) {
        this.uid = uid;
    }
    public String getUname() {
        return uname;
    }
    public void setUname(String uname) {
        this.uname = uname == null ? null : uname.trim();
    }
    public String getUpwd() {
        return upwd;
    }
    public void setUpwd(String upwd) {
        this.upwd = upwd == null ? null : upwd.trim();
    }
}

5、在service写该基于注解的接口方法。

    /**
     * 基于注解返回结果
     *
     * @return
     */
    List<User> selectUser();

6、serviceImpl实现如下。

/**
 * UserServiceImpl
 *
 * @author jiankang.xu
 * @date 2021/8/29
 */
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private TestMapper testMapper;
    @Override
    public List<User> selectUser() {
        return testMapper.selectUser();
    }
}

7、controller层写请求方法。

@Controller
@RequestMapping("/mapper")
public class UserMapperController {
    @Autowired
    private UserService userService;
    @RequestMapping("all")
    @ResponseBody
    public List<User> getAllUser(){
        return userService.selectUser();
    }
}

8、请求该接口结果如下。

1.jpg

四、总结

       以上就是实现启动项目时数据库表初始化,基于注解实现mybatis查询的所有内容,希望能够帮到大家,可以git下载下来,参考一下,觉得不错的话,欢迎微信搜索关注java基础笔记,后面会不断更新相关知识,大家一起进步。

https://github.com/xujiankang6/spring-boot-research.git

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
27天前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
3月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
1月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
76 1
|
2月前
|
存储 Java 数据库连接
Mybatisplus中的主要使用注解
3.有些注解需要配合其他配置使用。例如,@Version需要配合乐观锁插件使用,@EnumValue需要配合对应的TypeHandler使用。
116 11
|
3月前
|
SQL 存储 Java
Mybatis源码解析:详述初始化过程
以上就是MyBatis的初始化过程,这个过程主要包括SqlSessionFactory的创建、配置文件的解析和加载、映射文件的加载、SqlSession的创建、SQL的执行和SqlSession的关闭。这个过程涉及到了MyBatis的核心类和接口,包括SqlSessionFactory、SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、Configuration、SqlSession和Executor等。通过这个过程,我们可以看出MyBatis的灵活性和强大性,它可以很好地支持定制化SQL、存储过程以及高级映射,同时也避免了几
79 20
|
3月前
|
SQL XML Java
MyBatis——选择混合模式还是全注解模式?
在MyBatis开发中,Mapper接口的实现方式有两种:全注解模式和混合模式。全注解模式直接将SQL嵌入代码,适合小规模、简单逻辑项目,优点是直观简洁,但复杂查询时代码臃肿、扩展性差。混合模式采用接口+XML配置分离的方式,适合大规模、复杂查询场景,具备更高灵活性与可维护性,但学习成本较高且调试不便。根据项目需求与团队协作情况选择合适模式至关重要。
64 4
|
4月前
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
4月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
4月前
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
4月前
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
125 1