SpringBoot整合Mybatis

本文介绍了MyBatis框架的使用,包括引入依赖、配置数据库连接、使用Lombok注解创建实体类、编写Mapper接口及注解的运用,以及XML映射文件的编写和配置。注解版适用于简单SQL,复杂查询则推荐使用XML。

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

  mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。

 注解使用

1、在 pom.xml 文件中引入Mybatis与mysql相关依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

2、在 application.yml 文件中添加数据库连接配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false

 3、新建数据库表SProvinces.java 实体类

@Data
@Builder
public class SProvinces {
    @Tolerate
    public SProvinces() {
    }

    private Integer id;
    private String cityName;
    private String parentId;
}

这里使用了 lombok 的相关注解:

  • @Data 注解自动生成 getter/setter
  • @Builder生成链式调用
  • 由于 @Data和@Builder配合使用的时候会导致无参构造方法丢失,所以要主动声明无参构造方法,并使用 @Tolerate注解来告诉 lombok 请允许我们的无参构造方法存在,否则会导致 ORM 映射出错

4、新建 SProvincesMapper.java 接口: 

@Mapper
public interface SprovincesMapper {

    @Select("SELECT * FROM s_provinces")
    List<SProvinces> getAll();

    @Select("SELECT * FROM s_provinces WHERE id = #{id}")
    SProvinces getOne(Integer id);

    @Insert("INSERT INTO s_provinces(id,cityName,parentId) VALUES(#{id}, #{cityName}, #{parentId})")
    void insert(SProvinces user);

    @Update("UPDATE s_provinces SET cityName=#{cityName},parentId=#{parentId} WHERE id =#{id}")
    void update(SProvinces user);

    @Delete("DELETE FROM s_provinces WHERE id =#{id}")
    void delete(Integer id);
}
  • @Mapper 注解目的就是为了不再写mapper映射文件,是注解开发时用的。
  • @Select 注解用来查询
  • @Insert 注解用来插入
  • @Update 注解用来修改
  • @Delete 注解用来删除

 5、在启动类 DemoApplication上添加 @MapperScan 注解来扫描 mapper

@SpringBootApplication
@MapperScan
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

如果没有指定 @MapperScan 的具体扫描路径,将会从声明该注解的类的包开始进行扫描。

6、在测试类中对 mapper 进行测试

@SpringBootTest
public class SProvincesController {
    @Autowired
    private SprovincesMapper sprovincesMapper;

    @Test
    void testInsert() {
        SProvinces sProvinces = new SProvinces();
        sProvinces.setId(1111);
        sProvinces.setCityName("测试1");
        sProvinces.setParentId("111");
        sprovincesMapper.insert(sProvinces);
        System.out.println(sprovincesMapper.getAll().stream().toArray());
    }

    @Test
    void testQuery() {
        System.out.println(sprovincesMapper.getOne(1111));
    }

    @Test
    void testUpdate() {
        SProvinces sProvinces = new SProvinces();
        sProvinces.setId(1111);
        sProvinces.setCityName("测试2");
        sProvinces.setParentId("2222");
    }

    @Test
    void testDelete() {
        System.out.println(sprovincesMapper.getOne(1111));
        sprovincesMapper.delete(1111);
        System.out.println(sprovincesMapper.getOne(1111));

    }
}

xml 使用

1、新建 PostMapper

@Mapper
public interface SprovincesMapper {

    List<SProvinces> getAll();

    SProvinces getOne(Integer id);

    void insert(SProvinces user);

    void update(SProvinces user);

    void delete(Integer id);
}

2、在 resources 目录下新建 PostMapper.xml 文件

接口中方法对应的 SQL 直接写在 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.demo2.mybatis.demo.SprovincesMapper">
    <resultMap id="Sprovinces" type="com.example.demo2.mybatis.SProvinces">
        <id column="id" property="id"/>
        <result column="cityName" property="cityName"/>
        <result column="parentId" property="parentId"/>
    </resultMap>

    <sql id="Sprovinces_Column_List">
        id,cityName,parentId
    </sql>

    <select id="getAll" resultMap="Sprovinces">
        select
        <include refid="Sprovinces_Column_List" />
        from s_provinces;
    </select>

    <select id="getOne" parameterType="integer" resultMap="Sprovinces" >
        SELECT
        <include refid="Sprovinces_Column_List" />
        FROM s_provinces
        WHERE id = #{id}
    </select>

    <insert id="insert" parameterType="com.example.demo2.mybatis.SProvinces">
        insert into
        s_provinces
        (id,cityName,parentId)
        values
        (#{id},#{cityName},#{parentId});
    </insert>
    <update id="update" parameterType="com.example.demo2.mybatis.SProvinces">
        update
        s_provinces
        set
        <if test="cityName != null">cityName=#{cityName},</if>
        parentId=#{parentId}
        where id=#{id}
    </update>
    <delete id="delete">
        delete from
        s_provinces
        where
        id=#{id}
    </delete>
</mapper>

也可以将xml文件放在和 PostMapper.java 接口同级的目录下,但是这样会带来一个问题,就是 Maven 打包的时候默认会忽略 xml 文件,所以为了避免这种情况发生,我们需要在 pom.xml 文件中添加配置:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
</build>

如果直接放在 resources 目录下,就不用担心打包时被忽略了,但放在 resources 目录下不会被  MyBatis 自动扫描到,所以需要在 application.yml 配置文件中告诉 MyBatis 具体的扫描路径:

mybatis:
  mapper-locations: classpath:mapper/*.xml

3、在测试类中添加测试方法:

@SpringBootTest
public class SProvincesController {
    @Autowired
    private SprovincesMapper sprovincesMapper;

    @Test
    void testInsert() {
        SProvinces sProvinces = new SProvinces();
        sProvinces.setId(1111);
        sProvinces.setCityName("测试1");
        sProvinces.setParentId("111");
        sprovincesMapper.insert(sProvinces);
        System.out.println(sprovincesMapper.getAll().stream().toArray());
    }

    @Test
    void testQuery() {
        System.out.println(sprovincesMapper.getOne(1111));
    }

    @Test
    void testUpdate() {
        SProvinces sProvinces = new SProvinces();
        sProvinces.setId(1111);
        sProvinces.setCityName("测试2");
        sProvinces.setParentId("2222");
    }

    @Test
    void testDelete() {
        System.out.println(sprovincesMapper.getOne(1111));
        sprovincesMapper.delete(1111);
        System.out.println(sprovincesMapper.getOne(1111));

    }
}

小结

可以看得出,注解版比较适合简单的 SQL 语句,一旦遇到比较复杂的 SQL 查询,比如说多表查询,xml 中写 SQL 语句会容易实现。

<think>好的,我现在需要帮助用户解决如何将JCG Q30 Pro路由器OpenWRT固件的问题。首先,我要回顾用户提供的引用内容,尤其是引用[2]和[3],因为它们直接提到了机过程和相关固件。 用户的需求是详细的步骤,所以需要确保每一步都清晰。根据引用[2],JCG Q30 Pro机过程不需要拆机,直接通过原系统升级过渡固件,然后pb-boot或uboot,最后安装最终固件。引用[3]提到了一些具体的固件文件名和开发环境,可能需要确认用户是否需要特定的版本。 接下来,我需要将步骤分解成准备、过渡固件、引导程序、安装OpenWRT这几个部分。同时要注意不同批次的内存容量(256MB和512MB),确保用户检查自己的设备版本,避免错固件。 另外,需要提醒用户备份原厂固件,以防万一。在步骤中要强调通过SSH连接路由器,可能需要使用PuTTY或者终端。在写引导程序时,必须准确输命令,避免变砖。最后,要确认固件兼容性,可能需要参考引用[3]中的固件名称,比如openwrt-mediatek-mt7981-xxx.bin。 可能还需要警告用户操作风险,比如断电可能导致设备损坏,以及机后可能失去官方保修。此外,生成相关问题时要围绕机步骤、故障排除和固件选择展开,帮助用户进一步了解相关主题。</think>以下是为JCG Q30 Pro路由器OpenWRT固件的详细教程,结合设备特性和公开机方案整理: ### 一、机准备 1. 确认设备版本:查看路由器底部标签,新批次为512MB内存(建议优先选择237176253编译的固件),旧批次为256MB内存[^2] 2. 下载必要文件: - 过渡固件:`openwrt-mediatek-filogic-jcg_q30-pro-initramfs-recovery.itb` - 正式固件:选择MT7981平台适配的OpenWRT固件,例如`openwrt-mediatek-mt7981-jcg_q30-pro-squashfs-sysupgrade.bin`[^3] - SSH工具:PuTTY或Termius 3. 连接准备:用网线连接路由器LAN口与电脑,关闭防火墙/杀毒软件 ### 二、机步骤 1. **过渡固件** - 登录原厂后台:`192.168.10.1`,使用标签密码 - 进「系统升级」界面,上传过渡固件 - 等待自动重启(约3分钟),新IP变更为`192.168.1.1` 2. **引导程序** ```bash ssh root@192.168.1.1 # 默认无密码 mtd write /tmp/xxx/uboot.bin FIP # 替换为实际引导程序路径 ``` 注意:不同开发者提供的引导程序名称可能为`uboot.bin`或`pb-boot.bin`[^3] 3. **正式固件** - 按住RESET键通电,进引导程序恢复模式(LED快闪) - 访问`192.168.1.1`上传sysupgrade格式固件 - 等待自动完成(约5分钟) ### 三、兼容性说明 1. 无线驱动:支持MT7976DN+MT7916AN双频芯片组 2. 硬件加速:默认启用HNAT硬件转发,WAN-LAN吞吐量可达940Mbps+ 3. 存储方案:SPI NAND闪存适配良好,支持overlay扩容 4. USB功能:需自行编译添加相关驱动模块
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值