springboot3_MyBatis与Lombok

整合MyBatis

引入依赖

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

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <scope>runtime</scope>
</dependency>

编写mapper接口

package com.ali.springboot312mybatis.repository;

import com.ali.springboot312mybatis.bean.Vip;

import java.util.List;

public interface VipMapper {
    int insertVip(Vip vip);

    List<Vip> selectAllVip();
}

创建mapper.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.ali.springboot312mybatis.repository.VipMapper">


    <insert id="insertVip" parameterType="Vip">
        insert into t_vip(id,name,card_number,birth) values (null,#{name} ,#{cardNumber},#{birth})
    </insert>
    <select id="selectAllVip" resultType="Vip">
        select *  from t_vip
    </select>
</mapper>

在idea中安装MyBatisX插件可快速生成此xml文件

编写配置文件

# 数据源配置
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=root
spring.datasource.password=root

#MyBatis配置
# 起别名
mybatis.type-aliases-package=com.ali.springboot312mybatis.bean
# 说明mapper.xml文件位置
mybatis.mapper-locations=classpath:/mapper/*.xml
# 自动映射数据库表字段与Bean属性
mybatis.configuration.map-underscore-to-camel-case=true

其他配置

  1. 在springboot主入口程序类中添加指定mapper接口扫描的注解,这样就不用在mapper接口上加@mapper注解
// 指定mapper接口扫描
@MapperScan(basePackages = {"com.ali.springboot312mybatis.repository"})
@SpringBootApplication
public class Springboot312MybatisApplication {
    ...
}
  1. 创建Bean对象,Service接口、 ServiceImpl实现类 ,此时就完成了MyBatis配置。

Lombok库

Lombok是一个java库,会自动生成构造函数、getter、setter、equals、hashcode、toString方法等。

Lombok是编译阶段库,不影响程序运行。运行阶段不起作用。不影响程序执行效率。

// @Data 等价于 @ToString @Getter @Setter @EqualsAndHashCode @RequiredArgsConstructor
@Data
//  全参数构造方法
@AllArgsConstructor
// 无参数构造方法
@NoArgsConstructor
public class User {
    private String name;
    private int age;
    private Long id;
}

高版本idea自动安装lombok插件,插件知识为了代码不报红有提示,插件不是必须得。

// 表明toString 方法不输出age属性
@ToString(exclude = {"age"})
// 表明equals方法不比较age属性
@EqualsAndHashCode(exclude = {"age"})
public class User {
    private String name;
    private int age;
    private Long id;
}

其他常用注解

@Value

给所有属性加final,给所有属性提供getter、自动生成toString、hashcode、equals

@Value
public class User {
    private String name;
    private int age;
    private Long id;
}

@Builder

建造模式主要解决创建对象时,参数过多的问题。目的是让创建对象过程更加清晰、灵活。

package com.ali.builder;

// 建造模式
public class Person {
    private final String name;
    private final int age;

    private Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // 获取建造器对象
    public static PersonBuilder  Builder() {
        return new PersonBuilder();
    }

    // 静态内部类:建造器
    public static class PersonBuilder {
        private String name;
        private int age;

        public PersonBuilder withName(String name) {
            this.name = name;
            return this;
        }

        public PersonBuilder withAge(int age) {
            this.age = age;
            return this;
        }

        public Person build() {
            return new Person(name, age);
        }
    }
}

测试一下

public class PersonTest {

    public static void main(String[] args) {
        Person person = Person.Builder().withAge(12).withName("jack").build();
        System.out.println(person);
    }
}

使用@Builder注解会自动生成符合建造器模式的代码

// 生成符合建造器模式的代码
@Builder
public class PersonLombok {
    private String name;
    private int age;
}

@Singular

@Singular是辅助@Builder的,当被建造的对象的属性是一个集合,使用@Singular标注这个属性,可以连续调用集合属性对应的方法完成多个元素的添加。

@Data
// 生成符合建造器模式的代码
@Builder
public class PersonLombok {
    private String name;
    private int age;
    @Singular("addFriend")
    private List<String> friends;
}

使用方法

PersonLombok personLombok = PersonLombok.builder().age(20).name("jack").addFriend("tom").addFriend("lucy").build();

@Slf4j

Lombok支持多种日志框架:@Log4j、@Slf4j、@Log4j2

@Slf4j
public class UserService {
    public void saveUser() {
        log.info("saveUser");
    }
}

实际使用中需要引入Slf4j和logback依赖。

MyBatis逆向生成

实现逆向生成需要安装idea插件free MyBatis tool,然后使用idea链接数据库,在对应的表上右键选择mybatis-generator 设置之后即可生成对应的mapper、xml和Bean文件。

无标题

posted @ 2026-01-21 11:41  NE_STOP  阅读(0)  评论(0)    收藏  举报