MyBatis从入门到“入土“

news2024/11/17 17:47:33

 💕喜欢的朋友可以关注一下,下次更新不迷路!💕(●'◡'●)

目录

一、Mybatis为何物?👌

二、快速入门🤣

 1、新建项目😊

2、数据库建表😊

3、导入依赖的jar包😊

4、根据表建pojo类😊

5、编写mapper映射文件(编写sql)😊

 6、编写全局配置文件(主要是配置数据源信息)😊

7、测试😊

三、快速入土😢

代理开发😂

1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。

2、设置SQL映射文件的namespace属性为Mapper接口全限定名。

3、在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致。

4、通过SqlSession的getMapper方法获取Mapper接口的代理对象,并调用对应方法。

 Mybatis核心配置--mybatis-config.xml😂

1、可以连接多个数据库

 2、配置标签

案例😂

1、 建表

2、实体类

3、测试类

4、mybatisx插件

根据方法自动生成mapper映射文件

 5、查询(查询所有)

6、查看详情(根据id查询一个)

7、条件查询

 根据参数接收(无参/一个参数/两个参数/)

散装参数(模糊匹配)

对象参数

map参数

 动态条件查询(用户输入条件时,是否所有条件都会填写。不是,哥们🤣👌)

 使用if,choose,when设定条件

 8、添加

 主键返回

 9、修改

修改全部字段

 修改动态字段

10、删除

单个删除

批量删除

 注解开发😍


 

一、Mybatis为何物?👌

🤦‍♂️恶臭的描述: MyBatis 是一个优秀的持久层框架,它对JDBC的操作数据库的过程进行封装,让开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等JDBC繁琐的过程代码。

❤️舒服的描述:

不需要手动编写 JDBC 代码来执行 SQL 语句,也不需要处理数据库连接的创建和关闭。

所有的数据库操作都被抽象成了简单的 Mapper 方法调用。 (伟大无需多言!)

Mybatis中文官网

二、快速入门🤣

 前言:

完整结构图

只需要通过如下几个步骤,即可用mybatis快速进行持久层的开发

  1. 编写全局配置文件
  2. 编写mapper映射文件
  3. 加载全局配置文件,生成SqlSessionFactory
  4. 创建SqlSession,调用mapper映射文件中的SQL语句来执行CRUD操作

🤣话不多说,直接Mybatis启动!🤣

 1、新建项目😊

java8

2、数据库建表😊

3、导入依赖的jar包😊

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.itqingshui</groupId>
    <artifactId>mybatis-test1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>Archetype - mybatis-test1</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.21</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.30</version>
        </dependency>
    </dependencies>

       <build>
       <plugins>
           <plugin>
               <groupId>org.apache.maven.plugins</groupId>
               <artifactId>maven-compiler-plugin</artifactId>
               <version>3.8.1</version>
               <configuration>
                   <source>1.8</source> <!-- 替换为你的JDK版本 -->
                   <target>1.8</target> <!-- 替换为你的JDK版本 -->
               </configuration>
           </plugin>
       </plugins>
   </build>

</project>

4、根据表建pojo类😊

package pojo;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Student{
    private Integer id;
    private String name;
    private Integer score;
    private Integer age;
    private Integer gender;
}
@Getter
@Setter:省略set,get方法。
@NoArgsConstructor:建立一个无参构造器。
@AllArgsConstructor:建立一个全参构造器。
@ToString:建立一个tostring方法。

5、编写mapper映射文件(编写sql)😊

<?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="pojo.StudentMapper">
    <select id="findAll" resultType="pojo.Student">
        select * from student
    </select>

    <insert id="insert" parameterType="pojo.Student">
        insert into student(name,gender,age,score) values(#{name},#{gender},#{age},#{score})
    </insert>

    <delete id="delete" parameterType="int">
        delete from student where id=#{id}
    </delete>

    <update id="update" parameterType="pojo.Student">
        update student set name=#{name},gender=#{gender},age=#{age},score=#{score} where id=#{id}
    </update>

</mapper>

 6、编写全局配置文件(主要是配置数据源信息)😊

resources包下 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="lovertx"/>
                <property name="password" value="1234567"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载编写的SQL语句 -->
        <mapper resource="StudentMapper.xml"/>
    </mappers>
</configuration>

7、测试😊

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 pojo.Student;

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


public class MybatisDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

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

        SqlSession sqlSession = sqlSessionFactory.openSession();

        List<Student> student = sqlSession.selectList("pojo.StudentMapper.findAll");

        for (Student s : student){
            System.out.println(s);
        }
        sqlSession.close();
    }
}

三、快速入土😢

代理开发😂

对于

  List<Student> student = sqlSession.selectList("pojo.StudentMapper.findAll");

目的:

解决原生方式中的硬编码。

简化后期执行SQL

 

1、定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。

在resources包下创建mapper包并放入StudentMapper.xml

2、设置SQL映射文件的namespace属性为Mapper接口全限定名。

<mapper namespace="pojo.StudentMapper">

改为 

<mapper namespace="mapper.StudentMapper">

3、在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致。

StudentMapper中 

package mapper;

import pojo.Student;

import java.util.List;

public interface StudentMapper {
    List<Student>  findAll();
}

4、通过SqlSession的getMapper方法获取Mapper接口的代理对象,并调用对应方法。

StudentMapper userMapper = sqlSession.getMapper(StudentMapper.class);
userMapper.findAll().forEach(System.out::println);

 Mybatis核心配置--mybatis-config.xml😂

1、可以连接多个数据库

可以配置多个environment,通过default属性切换不同的environment 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="lovertx"/>
                <property name="password" value="1234567"/>
            </dataSource>
        </environment>
    </environments>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="lovertx"/>
                <property name="password" value="1234567"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!-- 加载编写的SQL语句 -->
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

 2、配置标签

案例😂

1、 建表

id:主键

brand_name:品牌名称

company_name:企业名称

ordered:排序字段

description:描述信息

status:状态(0:禁用,1启用)

2、实体类

package pojo;

import lombok.*;

@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Brand {
    private Integer id;
    private String brand_name;
    private String company_name;
    private Integer ordered;
    private String description;
    private Integer status;
}

3、测试类

4、mybatisx插件

通过点击左边的红色小鸟 

 

可以找到蓝色小鸟

 

 

根据方法自动生成mapper映射文件

1、第一步:在StudentMapper中

package mapper;

import pojo.Student;

import java.util.List;

public interface StudentMapper {
    List<Student>  findAll();
    
    Student findById(int id);
}

2、使用插件自动生成

<select id="findById" resultType="pojo.Student"></select>

3、补充实际操作

<select id="findById" resultType="pojo.Student">
        select * from student where id=#{id}
    </select>

 5、查询(查询所有)

1、创建BrandMapper(先写方法,后自动写sql)

 

package mapper;

import pojo.Brand;
import java.util.List;

public interface BrandMapper {
    List<Brand> findAll();
}

2、创建BrandMapper.xml

package mapper;

import pojo.Brand;
import java.util.List;

public interface BrandMapper {
    List<Brand> findAll();
}

 3、配置映射文件

在mybatis-config.xml添加 <mapper resource="mapper/BrandMapper.xml"/>

<mappers>
        <!-- 加载编写的SQL语句 -->
        <mapper resource="mapper/StudentMapper.xml"/>
        <mapper resource="mapper/BrandMapper.xml"/>
    </mappers>

 4、测试类

import mapper.BrandMapper;
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 java.io.IOException;
import java.io.InputStream;

public class MybatisDemo3 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

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

        SqlSession sqlSession = sqlSessionFactory.openSession();

        BrandMapper userMapper = sqlSession.getMapper(BrandMapper.class);
        userMapper.findAll().forEach(System.out::println);

        sqlSession.close();
    }
}

6、查看详情(根据id查询一个)

BrandMapper中写: 

Brand findById(int id);
public interface BrandMapper {
    List<Brand> findAll();
    
    Brand findById(int id);
}

BrandMapper.xml中写:

<select id="findById" resultType="pojo.Brand">
        select * from tb_brand where id = #{id}
    </select>

 测试类中写:

public class MybatisDemo {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

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

        SqlSession sqlSession = sqlSessionFactory.openSession();

        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        Brand brand = brandMapper.findById(1);
        System.out.println(brand);
        sqlSession.close();
    }
}

7、条件查询

类似于实现这样的功能:

 根据参数接收(无参/一个参数/两个参数/)
散装参数(模糊匹配)

因模糊匹配需要处理参数

接口方法

List<Brand> selectByCondition(@Param("status") int status, @Param("company_name") String company_name, @Param("brand_name") String brand_name);

sql语句

<select id="selectByCondition" resultType="pojo.Brand">
        select * from tb_brand
        where status = #{status}
            and brand_name like #{brand_name}
            and company_name like #{company_name}
    </select>

测试类 

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        //接收参数
        int status = 1;
        String company_name = "华为";
        String brand_name = "华为";

        //因模糊匹配,所有处理参数
        company_name = "%" + company_name + "%";
        brand_name = "%" + brand_name + "%";

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        List<Brand> brands = brandMapper.selectByCondition(status, company_name, brand_name);
        for (Brand brand : brands) {
            System.out.println(brand);
        }
        sqlSession.close();
    }
}

 

对象参数

对象的属性名称要和参数占位符名称一致


Mapper接口:

List<Brand> selectByCondition(Brand brand);

sql语句:

<select id="selectByCondition" resultType="pojo.Brand">
        select * from tb_brand
        where status = #{status}
            and brand_name like #{brand_name}
            and company_name like #{company_name}
    </select>

 测试类:

多了个封装对象

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        //接收参数
        int status = 1;
        String company_name = "华为";
        String brand_name = "华为";

        //因模糊匹配,所有处理参数
        company_name = "%" + company_name + "%";
        brand_name = "%" + brand_name + "%";

        //封装对象
        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setCompany_name(company_name);
        brand.setBrand_name(brand_name);

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

//      List<Brand> brands = brandMapper.selectByCondition(status, company_name, brand_name);
        List<Brand> brands = brandMapper.selectByCondition(brand);
        for (Brand brand1 : brands) {
            System.out.println(brand1);
        }
        sqlSession.close();
    }
}

map参数

 Mapper接口:

List<Brand> selectByCondition(Map map);

sql语句:

<select id="selectByCondition" resultType="pojo.Brand">
        select * from tb_brand
        where status = #{status}
            and brand_name like #{brand_name}
            and company_name like #{company_name}
    </select>

测试类:

public class MybatisDemo {
    public static void main(String[] args) throws IOException {
        //接收参数
        int status = 1;
        String company_name = "华为";
        String brand_name = "华为";

        //因模糊匹配,所有处理参数
        company_name = "%" + company_name + "%";
        brand_name = "%" + brand_name + "%";

        //封装对象
//        Brand brand = new Brand();
//        brand.setStatus(status);
//        brand.setCompany_name(company_name);
//        brand.setBrand_name(brand_name);

        Map map = new HashMap();
        map.put("status",status);
        map.put("company_name",company_name);
        map.put("brand_name",brand_name);


        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

//      List<Brand> brands = brandMapper.selectByCondition(status, company_name, brand_name);
//      List<Brand> brands = brandMapper.selectByCondition(brand);
        List<Brand> brands = brandMapper.selectByCondition(map);
        for (Brand brand1 : brands) {
            System.out.println(brand1);
        }
        sqlSession.close();
    }
}
 动态条件查询(用户输入条件时,是否所有条件都会填写。不是,哥们🤣👌)

只需要修改sql语句:

<select id="selectByCondition" resultType="pojo.Brand">
        select * from tb_brand
        where
            <if test="status != null">
                status = #{status}
            </if>
            <if test="brand_name != null and brand_name != ''">
                and brand_name like #{brand_name}
            </if>
            <if test="company_name != null and company_name != ''">
                and company_name like #{company_name}
            </if>
    </select>

  可是当特殊条件缺少时会出现错误:

 Map map = new HashMap();
        //map.put("status",status);
        map.put("company_name",company_name);
        //map.put("brand_name",brand_name);

 解决:恒等式

将sql语句修改为:

<select id="selectByCondition" resultType="pojo.Brand">
        select * from tb_brand
        <where>
            <if test="status != null">
                and status = #{status}
            </if>
            <if test="brand_name != null and brand_name != ''">
                and brand_name like #{brand_name}
            </if>
            <if test="company_name != null and company_name != ''">
                and company_name like #{company_name}
            </if>
        </where>
    </select>
 使用if,choose,when设定条件
<select id="selectByConditionOne" resultType="pojo.Brand">
        select * from tb_brand
        where
            <choose><!--相当于switch-->
                <when test="status != null"><!--相当于case-->
                    status = #{status}
                </when>
                <when test="brand_name != null and brand_name != ''">
                    brand_name like #{brand_name}
                </when>
                <when test="company_name != null and company_name != ''">
                    company_name like #{company_name}
                </when>
                <otherwise><!--当用户一个条件都不给-->
                    1=1
                </otherwise>
            </choose>
    </select>

 8、添加

 接口方法

void add(Brand brand);

sql语句

<insert id="add">
        insert into tb_brand(brand_name,company_name,ordered,description,status)
        values(#{brand_name},#{company_name},#{ordered},#{description},#{status})
    </insert>

 测试类

public class MybatisDemo3 {
    public static void main(String[] args) throws IOException, ClassNotFoundException {

        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        BrandMapper userMapper = sqlSession.getMapper(BrandMapper.class);

        int status = 1;
        String company_name = "菠萝手机";
        String brand_name = "菠萝";
        int ordered = 1;
        String description = "美国有苹果,中国有菠萝";
        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setCompany_name(company_name);
        brand.setBrand_name(brand_name);
        brand.setOrdered(ordered);
        brand.setDescription(description);
        userMapper.add(brand);
//事务提交
        sqlSession.commit();
        sqlSession.close();
    }
}
 主键返回

实现可查询主键id的值

 因为事务回滚导致少了id=4

因此查询菠萝的id的值为5


将sql语句改为

<insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into tb_brand(brand_name,company_name,ordered,description,status)
        values(#{brand_name},#{company_name},#{ordered},#{description},#{status})
    </insert>

即添加

useGeneratedKeys="true" keyProperty="id"

 9、修改

修改全部字段

实现

 Mapper接口

void update(Brand brand);

SQL语句

<update id="update">
        update tb_brand
        <set>
            <if test="brand_name != null and brand_name != ''">
                brand_name = #{brand_name},
            </if>
            <if test="company_name != null and company_name != ''">
                company_name = #{company_name},
            </if>
            <if test="ordered != null">
                ordered = #{ordered},
            </if>
            <if test="description != null and description != ''">
                description =#{description},
                status = #{status}
            </if>
        where id = #{id}
        </set>
    </update>

测试类

public class UpdateTest {
    public static void main(String[] args) throws IOException
    {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        Brand brand = new Brand();
        brand.setId(5);
        brand.setBrand_name("香飘飘");
        brand.setCompany_name("香飘飘");
        brand.setDescription("香飘飘");
        brand.setOrdered(100);
        brand.setStatus(1);
        brandMapper.update(brand);

        sqlSession.close();
    }
}
 修改动态字段

实现修改密码功能(想单独改哪个值就改哪个值)

如果调用接口却不给参数,则数据库会出现null值🤦‍♂️

 实现

只需要在SQL语句中添加条件,添加<set>标签

<update id="update">
        update tb_brand
        <set>
            <if test="brand_name != null and brand_name != ''">
                brand_name = #{brand_name},
            </if>
            <if test="company_name != null and company_name != ''">
                company_name = #{company_name},
            </if>
            <if test="ordered != null">
                ordered = #{ordered},
            </if>
            <if test="description != null and description != ''">
                description =#{description},
                status = #{status}
            </if>
        where id = #{id}
        </set>
    </update>

10、删除

单个删除

Mapper接口

void delete(int id);

 SQL语句

<delete id="delete">
        delete from tb_brand where id = #{id}
    </delete>

测试类

public class DeleteTest {
    public static void main(String[] args) throws IOException, IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
        
        brandMapper.delete(2);
        sqlSession.close();
    }
}
批量删除

 ​​​​​​

 实现

传id数组,sql遍历数组,一个一个删掉

Mapper接口

void deleteByIds(@Param("ids") int[] ids);

 SQL语句

<delete id="deleteByIds">
        delete from tb_brand where id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>

 测试类

public class DeleteTest2 {
    public static void main(String[] args) throws IOException, IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        int []ids = {5,6};
        brandMapper.deleteByIds(ids);
        sqlSession.close();
    }
}

 注解开发😍

优点:对于简单的SQL语句使用注解开发会非常便捷。

@Select("select * from tb_user where id = #{id}")
public User selectById(int id);

查询:@Select

添加:@Insert

修改:  @Update

删除:@Delete 

缺点:对于复杂的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="mapper.BrandMapper">
    <insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into tb_brand(brand_name,company_name,ordered,description,status)
        values(#{brand_name},#{company_name},#{ordered},#{description},#{status})
    </insert>

    <update id="update">
        update tb_brand
        <set>
            <if test="brand_name != null and brand_name != ''">
                brand_name = #{brand_name},
            </if>
            <if test="company_name != null and company_name != ''">
                company_name = #{company_name},
            </if>
            <if test="ordered != null">
                ordered = #{ordered},
            </if>
            <if test="description != null and description != ''">
                description =#{description},
                status = #{status}
            </if>
        where id = #{id}
        </set>
    </update>

    <delete id="delete">
        delete from tb_brand where id = #{id}
    </delete>
    <delete id="deleteByIds">
        delete from tb_brand where id in
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>


    <select id="findAll" resultType="pojo.Brand">
            select * from tb_brand
    </select>
    <select id="findById" resultType="pojo.Brand">
        select * from tb_brand where id = #{id}
    </select>

<!--    <select id="selectByCondition" resultType="pojo.Brand">-->
<!--        select * from tb_brand-->
<!--        where status = #{status}-->
<!--            and brand_name like #{brand_name}-->
<!--            and company_name like #{company_name}-->
<!--    </select>-->
    <select id="selectByCondition" resultType="pojo.Brand">
        select * from tb_brand
        <where>
            <if test="status != null">
                and status = #{status}
            </if>
            <if test="brand_name != null and brand_name != ''">
                and brand_name like #{brand_name}
            </if>
            <if test="company_name != null and company_name != ''">
                and company_name like #{company_name}
            </if>
        </where>
    </select>
    <select id="selectByConditionOne" resultType="pojo.Brand">
        select * from tb_brand
        where
            <choose><!--相当于switch-->
                <when test="status != null"><!--相当于case-->
                    status = #{status}
                </when>
                <when test="brand_name != null and brand_name != ''">
                    brand_name like #{brand_name}
                </when>
                <when test="company_name != null and company_name != ''">
                    company_name like #{company_name}
                </when>
                <otherwise><!--当用户一个条件都不给-->
                    1=1
                </otherwise>
            </choose>
    </select>
</mapper>

 💕完结撒花!💕

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1687924.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【高级数据结构】B树

B树 一、概念性问题1、前置知识&#xff1a;常见搜索结构2、常规使用数据结构缺陷问题3、B树概念4、存放数量分析 二、代码实现逻辑1、结点定义和基本框架2、Find查找函数&#xff08;1&#xff09;思想&#xff08;2&#xff09;代码实现 3、InsertKey插入关键字函数--InsertK…

采用伪代码及C代码演示如何解决脱机最小值问题

采用伪代码及C代码演示如何解决脱机最小值问题 问题背景算法设计伪代码实现C代码实现证明数组正确性使用不相交集合数据结构最坏情况运行时间的紧确界 问题背景 脱机最小值问题涉及到一个动态集合 &#xff08; T &#xff09; &#xff08;T&#xff09; &#xff08;T&…

国内大模型价格战全面爆发:新旧势力逐鹿江湖【附主流模型价格对比】

近年来&#xff0c;随着人工智能技术的不断发展&#xff0c;大模型逐渐成为行业的焦点。然而&#xff0c;伴随而来的却是一场价格战。DeepSeek率先推出超低价服务&#xff0c;随后字节跳动、阿里巴巴、百度、科大讯飞、腾讯等巨头纷纷跟进&#xff0c;使得这一领域的竞争愈演愈…

echarts-树图、关系图、桑基图、日历图

树图 树图主要用来表达关系结构。 树图的端点也收symbol的调节 树图的特有属性&#xff1a; 树图的方向&#xff1a; layout、orient子节点收起展开&#xff1a;initialTreeDepth、expandAndCollapse叶子节点设置&#xff1a; leaves操作设置&#xff1a;roam线条&#xff1a…

Mysql触发器优化大数据表

背景 数据库的订单数量过多&#xff0c;需要分出热表用于快速查询&#xff0c;热表仅保存10天的订单数据。 解决思路 每次数据库订单表触发增删改时&#xff0c;同步操作到trigger_order_mul_info表&#xff0c;然后trigger_order_mul_info会定期删除超过10天的数据。 增删…

【编译原理复习笔记】正则表达式与自动机

正则表达式 正则表达式是一种用来描述正则语言的更紧凑的表达方法 e.g. r a ( a ∣ b ) ∗ ( ϵ ∣ ( . ∣ ) ( a ∣ b ) ) ra(a|b)^*(\epsilon|(.|\\_ )(a|b)) ra(a∣b)∗(ϵ∣(.∣)​(a∣b)) 正则表达式可以由较小的正则表达式按照特定的规则递归地构建。每个正则表达式定义…

【笔记】软件架构师要点记录(1)

【笔记】软件架构师要点记录 20240517 20240517 连续性&#xff1a;恢复能力&#xff1b;可用性&#xff1a;保持稳定态的时长 增量开发模式&#xff1a;在增量开发中&#xff0c;每个增量都有明确的范围和功能&#xff0c;并按照特定的功能顺序完成。增量之间的范围划分在开发…

防火墙技术基础篇:基于IP地址的转发策略

防火墙技术基础篇&#xff1a;基于IP地址的转发策略的应用场景及实现 什么是基于IP地址的转发策略&#xff1f; 基于IP地址的转发策略是一种网络管理方法&#xff0c;它允许根据目标IP地址来选择数据包的转发路径。这种策略比传统的基于目的地地址的路由更灵活&#xff0c;因…

图片转excel技术在医疗领域的应用探讨

在医疗行业中&#xff0c;图片转Excel技术的应用已经逐渐普及&#xff0c;为医护人员提供了极大的便利。这种技术利用OCR&#xff08;光学字符识别&#xff09;和机器学习的先进算法&#xff0c;将图片中的信息自动转化为Excel表格&#xff0c;大大提高了数据处理和分析的效率。…

智能锁千千万,谁是你的NO.1,亲身实测凯迪仕传奇大师K70旗舰新品

智能锁千千万&#xff0c;谁是你的NO.1。欢迎来到智哪儿评测室&#xff0c;这次我们为大家带来了凯迪仕传奇大师K70系列的一款重磅新品。 在科技的浪潮中&#xff0c;家居安全领域正经历着前所未有的变革。智能锁越来越成为家的安全守护神&#xff0c;以及智能生活的得力助手。…

Monodle centerNet3D 瑞芯微RKNN、地平线Horizon芯片部署、TensorRT部署

一直想做一点3D目标检测&#xff0c;先来一篇单目3D目标检测Monodle&#xff08;基于centernet的&#xff09;&#xff0c;训练代码参考官方【代码】&#xff0c;这里只讲讲如何部署。 模型和完整仿真测试代码&#xff0c;放在github上参考链接【模型和完整代码】。 1 模型训练…

Creating Server TCP listening socket *:6379: listen: Unknown error

错误&#xff1a; 解决方法&#xff1a; 在redis安装路径中打开cmd命令行窗口&#xff0c;输入 E:\Redis-x64-3.2.100>redis-server ./redis.windows.conf结果&#xff1a;

智慧校园学工管理系统的部署

学工体系思政服务该怎么规划建造&#xff1f;思政作为高校育人的中心使命&#xff0c;在做到让学生健康高兴生长的一起&#xff0c;也应满意学生生长成才的各类需求。使用技术为学生供给优质的信息化服务&#xff0c;是其间的有效途径。大数据让个性化教育成为可能&#xff0c;…

Python函数、类和方法

大家好&#xff0c;当涉及到编写可维护、可扩展且易于测试的代码时&#xff0c;Python提供了一些强大的工具和概念&#xff0c;其中包括函数、类和方法。这些是Python编程中的核心要素&#xff0c;可以帮助我们构建高效的测试框架和可靠的测试用例。 本文将探讨Python中的函数、…

Swin Transformer 笔记与理解

目录 解决什么问题基本结构理解 解决什么问题 传统的transformer处理于长序列需要非常大的计算量&#xff0c;而且很慢。且传统的transformer虽然的全局信息的获取上有着很好的效果&#xff0c;但是在局部信息的获取上就没有那么强了。Swim transformer的主要的贡献就是使用分…

LLM 大模型学习必知必会系列(十):基于AgentFabric实现交互式智能体应用,Agent实战

LLM 大模型学习必知必会系列(十)&#xff1a;基于AgentFabric实现交互式智能体应用,Agent实战 0.前言 **Modelscope **是一个交互式智能体应用基于ModelScope-Agent&#xff0c;用于方便地创建针对各种现实应用量身定制智能体&#xff0c;目前已经在生产级别落地。AgentFabri…

Java输入与输出详解

Java输入和输出 前言一、Java打印Hello World二、输出到控制台基本语法代码示例格式化字符串 三、从键盘输入读入一个字符正确写法 使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 N 个数字 前言 推荐一个网站给想要了解或者学习人工智能知识的读者&#xff0c;这…

嵌入式智能硬件茶杯垫的设计与实现方案

iCupBox简介 这是一款智能杯垫产品,基于GTD时间管理理念设计,目的是提醒人们专心工作和及时喝水休息,提高工作效率。 https://gitee.com/jiangtao008/iCupBox 开原许可协议:MIT 项目分为客户端APP和杯垫固件系统: 客户端APP,使用QML开发,集成GTD时间管理方法,与杯垫固…

QQ技术导航源码附带交易系统

网站功能 QQ登录 友联自助交换 友情链接交易功能 多功能搜索 ico小图标本地化 网站图片本地化 蜘蛛日志 文章评论 网站评论 自助链接匿名提交站点&#xff0c;添加友链访问网站自动审核通过 VIP 会员等级 VIP 付费升级 单个文章或者站点付费快审 多背景图片可自定义背景图片…

Web Server项目实战2-Linux上的五种IO模型

上一节内容的补充&#xff1a;I/O多路复用是同步的&#xff0c;只有调用某些API才是异步的 Unix/Linux上的五种IO模型 a.阻塞 blocking 调用者调用了某个函数&#xff0c;等待这个函数返回&#xff0c;期间什么也不做&#xff0c;不停地去检查这个函数有没有返回&#xff0c…