• spring boot 应用mybatis


    Mybatis入门:

    Mybatis入门_做测试的喵酱的博客-CSDN博客

     

    目录

    一、spring boot 应用mybatis 核心

    二、举例:

    2.1 背景

    2.2 项目结构:

     2.3 依赖包 pom

    2.4 项目配置文件application.yml

    2.5 实例层entity

    2.6 mybatis的mapper层

    2.7 spring boot service 层

    2.8 controller层

    2.9 应用启动层StudentmybatisspringApplication

    三、数据库字段名称与java实体类字段名称不一致 


    一、spring boot 应用mybatis 核心

    spring boot 应用mybatis 核心,就是把mybatis 的mapper 通过spring注入实例。

    二、举例:

    2.1 背景

    实现一个查询的接口,返回结果为多个实例的集合。

    select * from MyStudent where name = #{name}

    2.2 项目结构:

    相对于单纯的mybatis 使用,spring boot 应用mybatis 缺少了mybatis 的总配置文件。

     2.3 依赖包 pom

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0</modelVersion>
    5. <parent>
    6. <groupId>org.springframework.boot</groupId>
    7. <artifactId>spring-boot-starter-parent</artifactId>
    8. <version>2.4.4</version>
    9. <relativePath/> <!-- lookup parent from repository -->
    10. </parent>
    11. <groupId>com.example</groupId>
    12. <artifactId>studentmybatisspring</artifactId>
    13. <version>0.0.1-SNAPSHOT</version>
    14. <name>studentmybatisspring</name>
    15. <description>Demo project for Spring Boot</description>
    16. <properties>
    17. <java.version>1.8</java.version>
    18. </properties>
    19. <dependencies>
    20. <dependency>
    21. <groupId>org.springframework.boot</groupId>
    22. <artifactId>spring-boot-starter-web</artifactId>
    23. </dependency>
    24. <dependency>
    25. <groupId>org.springframework.boot</groupId>
    26. <artifactId>spring-boot-starter-test</artifactId>
    27. <scope>test</scope>
    28. </dependency>
    29. <dependency>
    30. <groupId>org.projectlombok</groupId>
    31. <artifactId>lombok</artifactId>
    32. </dependency>
    33. <dependency>
    34. <groupId>mysql</groupId>
    35. <artifactId>mysql-connector-java</artifactId>
    36. <version>8.0.20</version>
    37. </dependency>
    38. <dependency>
    39. <groupId>org.mybatis.spring.boot</groupId>
    40. <artifactId>mybatis-spring-boot-starter</artifactId>
    41. <version>2.1.4</version>
    42. </dependency>
    43. </dependencies>
    44. <build>
    45. <plugins>
    46. <plugin>
    47. <groupId>org.springframework.boot</groupId>
    48. <artifactId>spring-boot-maven-plugin</artifactId>
    49. </plugin>
    50. </plugins>
    51. </build>
    52. </project>

    2.4 项目配置文件application.yml

    application.yml

    1. server:
    2. port: 8080
    3. spring:
    4. datasource:
    5. url: jdbc:mysql://124.70.87.136:3306/chen?useUnicode=true&characterEncoding=UTF-8
    6. username: root
    7. password: 123456
    8. driver-class-name: com.mysql.cj.jdbc.Driver
    9. logging:
    10. level:
    11. com.example.studentmybatisspring.mapper: debug

    里面包含项目端口信息

    数据库连接信息

    以及开启查看执行sql的日志。

    这里设置查看日志,我们一般只设置查看对应包的日志。这里是想要查看的包名。

    这个mapper就是我们mabits里面的mapper。

    当我们启动项目,触发相应的sql时,就会显示对应的sql日志。

    2.5 实例层entity

    存放的是我们需要的实例。

    ResultMsg,我们用来封装接口的返回结果。

    1. package com.example.studentmybatisspring.entity;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @NoArgsConstructor
    7. @AllArgsConstructor
    8. public class ResultMsg {
    9. public static final String SUCCESS_NO = "200";
    10. public static final String SUCCESS_SUCCESS = "success";
    11. private String no;
    12. private String msg;
    13. private T data;
    14. public ResultMsg(String no, String msg) {
    15. this.no = no;
    16. this.msg = msg;
    17. }
    18. public static ResultMsg success(T data){
    19. return new ResultMsg(SUCCESS_NO,SUCCESS_SUCCESS,data);
    20. }
    21. public static ResultMsg error(String no,String msg){
    22. return new ResultMsg(no,msg);
    23. }
    24. }

    MyStudent,是数据库里MyStudent表对应的实例。

    数据库的表:

     对应表的实例MyStudent

    1. package com.example.studentmybatisspring.entity;
    2. import lombok.AllArgsConstructor;
    3. import lombok.Data;
    4. import lombok.NoArgsConstructor;
    5. @Data
    6. @NoArgsConstructor
    7. @AllArgsConstructor
    8. public class MyStudent {
    9. private long id;
    10. private String name;
    11. private int age;
    12. public MyStudent(String name, int age) {
    13. this.name = name;
    14. this.age = age;
    15. }
    16. public MyStudent(String name) {
    17. this.name = name;
    18. }
    19. }

    2.6 mybatis的mapper层

    接口:MyStudentMapper

    1. package com.example.studentmybatisspring.mapper;
    2. import com.example.studentmybatisspring.entity.MyStudent;
    3. import org.apache.ibatis.annotations.Select;
    4. import org.springframework.stereotype.Repository;
    5. import java.util.List;
    6. @Repository
    7. public interface MyStudentMapper {
    8. @Select("select * from MyStudent where name = #{name}")
    9. List findByName(String name);
    10. }

    接口:MyStudentMapper中,包含sql语句,以及sql语句对应的方法。

    2.7 spring boot service 层

    service接口

    1. package com.example.studentmybatisspring.service;
    2. import com.example.studentmybatisspring.entity.MyStudent;
    3. import java.util.List;
    4. public interface MyStudentService {
    5. List findByName(String name);
    6. }

    service实现类

    1. package com.example.studentmybatisspring.service.impl;
    2. import com.example.studentmybatisspring.entity.MyStudent;
    3. import com.example.studentmybatisspring.mapper.MyStudentMapper;
    4. import com.example.studentmybatisspring.service.MyStudentService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.stereotype.Service;
    7. import java.util.List;
    8. @Service
    9. public class MyStudentServiceImpl implements MyStudentService {
    10. @Autowired
    11. private MyStudentMapper myStudentMapper;
    12. @Override
    13. public List findByName(String name) {
    14. return myStudentMapper.findByName(name);
    15. }
    16. }

    我们在spring boot service 实现类中,注入了mybatis 的 mapper接口。

    2.8 controller层

    MyStudentController

    1. package com.example.studentmybatisspring.controller;
    2. import com.example.studentmybatisspring.entity.MyStudent;
    3. import com.example.studentmybatisspring.entity.ResultMsg;
    4. import com.example.studentmybatisspring.service.MyStudentService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. import java.util.List;
    9. @RestController
    10. @RequestMapping("/chen")
    11. public class MyStudentController {
    12. @Autowired
    13. private MyStudentService myStudentService;
    14. @RequestMapping("/findByName")
    15. public ResultMsg> findByName(String name){
    16. List byName = myStudentService.findByName(name);
    17. return ResultMsg.success(byName);
    18. }
    19. }

    2.9 应用启动层StudentmybatisspringApplication

    我们需要在项目启动层,增加mapper的扫描。

    相对于单纯的mybatis 使用,spring boot 应用mybatis 缺少了mybatis 的总配置文件。

    这里填写包名。@MapperScan(basePackages = 

    1. package com.example.studentmybatisspring;
    2. import org.mybatis.spring.annotation.MapperScan;
    3. import org.springframework.boot.SpringApplication;
    4. import org.springframework.boot.autoconfigure.SpringBootApplication;
    5. @SpringBootApplication
    6. @MapperScan(basePackages = "com.example.studentmybatisspring.mapper")
    7. public class StudentmybatisspringApplication {
    8. public static void main(String[] args) {
    9. SpringApplication.run(StudentmybatisspringApplication.class, args);
    10. }
    11. }

    在浏览器里访问:

    在控制台显示sql日志

     

    三、数据库字段名称与java实体类字段名称不一致 

    同一个表,数据库的字段名称,与java实体类字段名称不一致。

    如数据库中,字段名称为user_id

    但是在java项目中,实体类的名称为驼峰格式,userId。

    我们需要在application.yml,开启驼峰命名的映射。

     

     

     

  • 相关阅读:
    DataFrame的操作-使用DSL
    SQL Server关于AlwaysOn的理解-读写分离的误区(一)
    ARM_day9 按钮控制LED灯、蜂鸣器、风扇实验
    面向未来的自动化:拥抱机器人即服务(RaaS)
    大数据-玩转数据-Flink状态编程(上)
    STM32、ESP8266与MQTT连接阿里云物联网的串口通信异常解析
    OKR设定实例,看这些名企是怎么做的?
    树莓派4B_OpenCv学习笔记21:OpenCV_haar人脸识别
    hive解决了什么问题
    ai相关新闻查询易语言代码
  • 原文地址:https://blog.csdn.net/qq_39208536/article/details/128167464