SpringBoot学习(四)—— springboot快速整合Mybatis组件
admin
2023-02-20 13:40:03
0

MyBatis

@[toc]

简介

优点

最大的优点是SQL语句灵活,适合调优情景,业务复杂情景

劣势

最大的劣势是不同数据库之间的迁移

引入mybatis组件

pom.xml中加入


    mysql
    mysql-connector-java


    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.1

application.properties中加入

#dateSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

# mybatis
# 下划线转驼峰开启
mybatis.configuration.map-underscore-to-camel-case=true
# mapper扫描位置
mybatis.mapper-locations=classpath:mapper/*.xml

需要说明的是,我引入的mysql驱动为 com.mysql.cj.jdbc.Driver,而不是 com.mysql.jdbc.Driver。以下是一些参数的说明;

  • serverTimezone:该驱动需要指定某时区。
  • useUnicode:开启指定编码。
  • characterEncoding:指定读取数据库的编码,因为项目采用UTF-8,存取数据库信息时保持一致。
  • useSSL:是否建立SSL连接,我显示选的否,因为这要为服务器证书验证提供信任库,暂时没条件。

代码实战

本地的 mysql 版本为 5.7.20。

建表语句

CREATE TABLE USER_INFO
(
    user_id DECIMAL(10) PRIMARY KEY NOT NULL,
    user_name VARCHAR(20) DEFAULT "" NOT NULL
);
CREATE UNIQUE INDEX USER_INFO_user_id_uindex ON USER_INFO (user_id);
ALTER TABLE USER_INFO COMMENT = '用户基本信息表';

插入数据

INSERT INTO test.user_info (user_id, user_name) VALUES (1, '特朗普');
INSERT INTO test.user_info (user_id, user_name) VALUES (2, '唐纳德');

现在的项目路径为

SpringBoot学习(四)—— springboot快速整合Mybatis组件

在SpringBoot的入口类中加 @MapperScan 注解,以扫描 DAO 类,不用在每个dao接口加个@Mapper 注解。

package com.example;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

注:如果没有分拆项目成微服务架构,或分布式架构,application主类中的@SpringBootApplication自动会扫描本包中的@Controller,@Service,@Resource等,是不需要浪费另一行@ComponentScan注解,配置路径的。

UserController.java

package com.example.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.example.service.IUserService;

@Controller
@RequestMapping("user")
public class UserController {

    @Autowired
    private IUserService userService;

    @RequestMapping("/queryUser")
    @ResponseBody
    void queryUser() {
        this.userService.queryUser();
    }

}

IUserService.java

package com.example.service;

public interface IUserService {
    void queryUser();
}

UserServiceIml.java

package com.example.service;

import com.example.dao.UserDao;
import com.example.entity.UserEntity;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service("userService")
public class UserServiceIml implements IUserService {

    @Resource
    private UserDao userDao;

    @Override
    public void queryUser() {
        List userList = this.userDao.queryUser();
        System.out.println("================");
        System.out.println(userList);
        System.out.println("================");
    }
}

注:如果是SSM架构过来的,这个@Resource注解可能比较陌生,因为我估计会和我之前一样用@Autowired,但是我是没有在dao层用 @Repository 注解的,之前用了在主类用了@MapperScan自动去扫描所有的dao,所以不能再用之前的@Autowired。

UserDao.java

package com.example.dao;

import com.example.entity.UserEntity;
import java.util.List;

public interface UserDao {
    List queryUser();
}

UserEntity.java

package com.example.entity;

public class UserEntity {
    private long userId;
    private String userName;

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "UserEntity{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}

如果你运行不成功,请对比引入的包的版本,和数据库配置是否是根据你本地的,顺便看看注解是否和文中一样。

效果图如下;

SpringBoot学习(四)—— springboot快速整合Mybatis组件

注:如果是跟着本教程来的,因为一开始就引入了spring security,而新增的路径不在刚才的权限中,所以我给zs用户改成了皆可访问。如果没有跟着之前配置spring security,无需理会如下内容

//http.authorizeRequests().antMatchers("/user/addUser").hasRole("AAA") 
http.authorizeRequests().antMatchers("/**").hasRole("AAA") 

相关内容

热门资讯

洗衣机正常洗,水出不出去什么原... 这种情况原因有很多种,1、电机故障造成洗衣机不能脱水,洗衣机电动机有嗡嗡声响而不转动,多数是电动机匝...
半自动洗衣机排不出水是什么原因 1、排水管扭曲,保持排水管的畅通才能让洗衣机正常排水。2、排水缓慢时,有可能是因排水口过高,排水阀拉...
西门子洗衣机经常故障 西门子是全球著名的家电品牌,其洗衣机在国内市场也拥有广泛的用户群体。然而,近年来,一些西门子洗衣机用...
西门子洗衣机平衡自检故障 西门子洗衣机平衡自检故障是一种非常常见的问题,它通常是由于洗衣机内部出现平衡不良的问题导致的。当洗衣...
石化油服获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示石化油服(600871)新获得一项实用新型专利授权,专利名为“...
服务六大场景 机器人公园上岗 玉渊潭公园投用水面割草机器人。(刘平 摄) 天坛公园的智能巡护机器人上岗。(刘平 摄) 盛夏七月,...
力箭一号遥十五运载火箭圆满完成... 红星新闻网7月24日讯2026年7月24日07时33分,我国在东风商业航天创新试验区使用力箭一号遥十...
特朗普:美方正与伊朗谈判,不排... 当地时间7月24日,美国总统特朗普在白宫谈及对伊朗战争的“退出战略”时表示,美国有两种选择:一是继续...
小伙相亲2天后花33万闪婚,一... 极目新闻记者 邓波2025年4月,安徽安庆小伙何攀到贵州贵阳花果园相亲,并与相识两天的贵阳籍女子陆某...
丘成桐:王虹和邓煜都在MIT待... 当地时间7月23日,在美国费城举行的2026年国际数学家大会开幕式上,中国数学家邓煜、王虹获得菲尔兹...