首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Mybatis练习(按值单条件查询)

Mybatis练习(按值单条件查询)

作者头像
GeekLiHua
发布2025-01-21 15:25:29
发布2025-01-21 15:25:29
5800
举报
文章被收录于专栏:JavaJava

Mybatis练习

安装MybatisX

接下来我们就使用Mybatis完成品牌数据的增删改查操作。以下是我们要完成功能列表:

  • 查询
    • 查询所有数据
    • 查询详情
    • 条件查询
  • 添加
  • 修改
    • 修改全部字段
    • 修改动态字段
  • 删除
    • 删除一个
    • 批量删除

创建数据库

数据库表(tb_brand)及数据准备

代码语言:javascript
复制
-- 删除tb_brand表
drop table if exists tb_brand;
-- 创建tb_brand表
create table tb_brand
(
    -- id 主键
    id           int primary key auto_increment,
    -- 品牌名称
    brand_name   varchar(20),
    -- 企业名称
    company_name varchar(20),
    -- 排序字段
    ordered      int,
    -- 描述信息
    description  varchar(100),
    -- 状态:0:禁用  1:启用
    status       int
);
-- 添加数据
insert into tb_brand (brand_name, company_name, ordered, description, status)
values ('三只松鼠', '三只松鼠股份有限公司', 5, '好吃不上火', 0),
       ('华为', '华为技术有限公司', 100, '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界', 1),
       ('小米', '小米科技有限公司', 50, 'are you ok', 1);

创建Brand实体类

com.study.pojo 包下创建 Brand 实体类。

代码语言:javascript
复制
package com.study.pojo;

public class Brand {
    // id 主键
    private Integer id;
    // 品牌名称
    private String brandName;
    // 企业名称
    private String companyName;
    // 排序字段
    private Integer ordered;
    // 描述信息
    private String description;
    // 状态:0:禁用  1:启用
    private Integer status;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public Integer getOrdered() {
        return ordered;
    }

    public void setOrdered(Integer ordered) {
        this.ordered = ordered;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Brand{" +
                "id=" + id +
                ", brandName='" + brandName + '\'' +
                ", companyName='" + companyName + '\'' +
                ", ordered=" + ordered +
                ", description='" + description + '\'' +
                ", status=" + status +
                '}';
    }
}

编写接口方法

com.study.mapper 包写创建名为 BrandMapper 的接口。并在该接口中定义 List<Brand> selectAll() 方法。

代码语言:javascript
复制
package com.study.mapper;

import com.study.pojo.Brand;

import java.util.List;

public interface BrandMapper {

    /**
     * 查询所有
     */
    List<Brand> selectAll();
}

编写BrandMapper.xml

reources 下创建 com/study/mapper 目录结构,并在该目录下创建名为 BrandMapper.xml 的映射配置文件

代码语言:javascript
复制
<?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.study.mapper.BrandMapper">
    <resultMap id="brandResultMap" type="brand">
        <!--
               id:完成主键字段的映射
                   column:表的列名
                   property:实体类的属性名
               result:完成一般字段的映射
                   column:表的列名
                   property:实体类的属性名
               使用resutlMap的目的在于Brand中的成员与数据库中的成员的命名方式
               不一样
                这种不同会导致这样的问题封装对象的时候出现问题,导致名字不同的对象无法查询出来
           -->
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>



    <select id="selectAll" resultMap="brandResultMap">
        select *
        from tb_brand;
    </select>
</mapper>

编写logback.xml和mybatis-config.xml

这里参考文章Mapper代理开发

编写测试方法

  • 编写测试用例
代码语言:javascript
复制
package com.study.test;

import com.study.mapper.BrandMapper;
import com.study.pojo.Brand;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {
    @Test
    public void testSelectAll() throws IOException {
        //1. 获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2. 获取SqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3. 获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        //4. 执行方法
        List<Brand> brands = brandMapper.selectAll();
        System.out.println(brands);

        //5. 释放资源
        sqlSession.close();

    }
}

运行结果讲解

根据id来查询

  • 编写接口方法:Mapper接口
代码语言:txt
复制
-  参数:id 查看详情就是查询某一行数据,所以需要根据id进行查询。而id以后是由页面传递过来。
 
代码语言:txt
复制
-  结果:Brand 根据id查询出来的数据只要一条,而将一条数据封装成一个Brand对象即可
 
  • 编写SQL语句:SQL映射文件
  • 执行方法、进行测试
编写接口方法

BrandMapper 接口中定义根据id查询数据的方法

代码语言:javascript
复制
/**
  * 查看详情:根据Id查询
  */
Brand selectById(int id);
编写SQL语句

BrandMapper.xml 映射配置文件中编写 statement,使用 resultMap 而不是使用 resultType

代码语言:javascript
复制
<select id="selectById"  resultMap="brandResultMap">
    select *
    from tb_brand where id = #{id};
</select>

注意:上述SQL中的 #{id}先这样写,一会我们再详细讲解

编写测试方法

test/java 下的 com.study.mapper 包下的 MybatisTest类中 定义测试方法

代码语言:javascript
复制
 @Test
public void testSelectById() throws IOException {
    //接收参数,该id以后需要传递过来
    int id = 1;

    //1. 获取SqlSessionFactory
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

    //2. 获取SqlSession对象
    SqlSession sqlSession = sqlSessionFactory.openSession();

    //3. 获取Mapper接口的代理对象
    BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

    //4. 执行方法
    Brand brand = brandMapper.selectById(id);
    System.out.println(brand);

    //5. 释放资源
    sqlSession.close();
}

运行结果

SQL语句中特殊字段处理

我们开发的时候有可能会遇到某些特殊字符,导致报错的情况发生。

  • 转义字符 下图的 &lt; 就是 < 的转义字符。
  • <![CDATA[内容]]>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Mybatis练习
    • 安装MybatisX
    • 创建数据库
    • 编写接口方法
    • 编写BrandMapper.xml
    • 编写logback.xml和mybatis-config.xml
    • 编写测试方法
    • 运行结果讲解
    • 根据id来查询
      • 编写接口方法
      • 编写SQL语句
      • 编写测试方法
      • SQL语句中特殊字段处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档