简单了解MyBatis

MyBatis

1、快速入门

MyBatis中文手册官网MyBatis中文网

1.1、创建数据表添加数据

create table user(
	id int auto_increment primary key comment '主键id',
	name varchar(20) comment '姓名',
	age int comment '年龄',
	gender char(1) comment '性别(1:男, 2:女)',
	phone char(11) comment '手机号'
) comment '用户基本信息表';

insert into user values (null '糖锅', 20, '1', '12011011934'),
						(null '糖解', 19, '2', '12011564514'),
						(null '糖魅', 27, '2', '19631011934'),
						(null '糖仁', 32, '1', '19018451934');

1.2、创建模块,导入坐标

1、新建一个项目,项目名字随意

在这里插入图片描述

2、鼠标右击项目,选择新建模块

在这里插入图片描述

3、设置模块信息

在这里插入图片描述

5、在pom.xml中添加如下配置信息

<dependencies>
        <!--MyBatis的依赖-->
        <dependency>

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

        <!--MySQL的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>

        <!--junit 单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--添加slf4j日志api-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-parent</artifactId>
            <version>1.7.20</version>
        </dependency>

        <!--添加logback-classic依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        
        <!--添加logback-core依赖-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        
    </dependencies>

1.3、编写MyBatis核心配置文件,替换连接信息,解决代码中硬编码问题

1、鼠标右击resources新建File文件,文件名字为mybatis-config.xml

在这里插入图片描述

2、在mybatis-config.xml填写如下配置信息,

<?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"/>
                <!--mybatis为连接的数据库名-->
                <property name="url" value="jdbc:mysql:///test?useSSL=false"/>
                <!--填写数据库用户名-->
                <property name="username" value="root"/>
                <!--填写数据库密码-->
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <!--加载mapper的映射文件-->
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

1.4、编写SQL映射文件,统一管理SQL语句,解决硬编码问题

1、鼠标右击resources新建File文件,文件名字为UserMapper.xml

在这里插入图片描述

2、在UserMapper.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">

<!--
    namespace:名称空间
-->
<mapper namespace="test">
    <select id="selectAll" resultType="com.tg.pojo.User">
        select * from user;
    </select>
</mapper>

1.5、日志文件配置(看个人情况)

这里我简单配置一个日志文件

1、鼠标右击resources新建File文件,文件名字为logback.xml

2、根据自己情况配置自己的日志文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--输出流对象 默认 System.out 改为 System.err-->
        <target>System.out</target>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
                %msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level]  %c [%thread] : %msg%n</pattern>
        </encoder>
    </appender>

    <!-- File是输出的方向通向文件的 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <!--日志输出路径-->
        <file>C:/code/itheima-data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>C:/code/itheima-data2-%d{yyyy-MMdd}.log%i.gz</fileNamePattern>
            <!--文件拆分大小-->
            <maxFileSize>1MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <!--

    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
   , 默认debug
    <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
    -->
    <root level="ALL">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>
</configuration>

具体步骤:

1、定义POJO类

鼠标右击java,创建包com.tg.pojo,在包下创建类User

在这里插入图片描述

public class User {
    private int id;
    private String name;
    private int age;
    private int gender;
    private String phone;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", gender=" + gender +
                ", phone='" + phone + '\'' +
                '}';
    }
}

java中创建类MyBatisTest1类进行如下操作

  • 加载核心配置文件,获取SqlSessionFactory对象

  • 获取SqlSession对象,执行SQL语句

  • 释放资源

/**
 * MyBatis测试类
 */
public class MyBatisTest1 {
    public static void main(String[] args) throws IOException {
        //加载MyBatis核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);					   

        //获取SqlSession对象,用它来执行Sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //执行Sql语句
        List<Object> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

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

2、Mapper代理开发

2.1、目的

解决原生方式中的硬编码问题

简化后期SQL

2.2、具体步骤

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

  • 鼠标右击java,创建包com.tg.mapper,在包中创建接口UserMapper

  • 鼠标右击resources,创建文件夹com/tg/mapper,将UserMapper.xml转移到该文件夹中

在这里插入图片描述

  • 修改UserMapper.xml中的namespace=“com.tg.mapper.UserMapper”

在这里插入图片描述

  • 修改mabatis-config.xml中的mapper映射为resource=“com/tg/mapper/UserMapper.xml”

在这里插入图片描述

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

public interface UserMapper {
    List<User> selectAll();
}

4、编码

在java中创建类MyBatisTest2

  • 通过SqlSession对象的gerMapper方法获取Mapper接口的代理对象

  • 调用对应的方法完成Sql的执行

如果Mapper接口名称和SQL映射文件名称相同,并在统一目录下,则可以使用包扫描的方式简化SQL映射文件加载

上述红色信息意思就是,可以在mabatis-config.xml使用**< package name=“com.tg.mapper”/>代替< mapper resource=“com/tg/mapper/UserMapper.xml”/>**

在这里插入图片描述

代码示例:

/**
 * MyBatis测试类
 */
public class MyBatisTest2 {
    public static void main(String[] args) throws IOException {
        //加载MyBatis核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //获取SqlSession对象,用它来执行Sql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectAll();

        System.out.println(users);

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

3、MyBatis核心配置文件详解

3.1、MyBatis核心配置文件的顶层结构

在这里插入图片描述

配置各个标签时,需要遵守前后顺序

示例,我们在MyBatis的配置文件中添加别名配置

<typeAliases>
        <package name="com.tg.pojo"/>
</typeAliases>

在这里插入图片描述

当我们添加此配置之后我们可以在Sql映射文件中简写刚才数据查询的返回值为user或者User

在这里插入图片描述

当然我们还可以配置多个数据源

示例:

<!--环境配置,可根据需要配置多个,通过对应的default属性切换不同的environment-->
    <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:///test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库信息-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>

4、MyBatis文件完成增删改查

4.1、环境准备

建立数据库表tb_brand
CREATE TABLE tb_brand (
  id int NOT NULL AUTO_INCREMENT COMMENT 'id主键',
  brand_name varchar(20) DEFAULT NULL COMMENT '品牌名称',
  company_name varchar(20) DEFAULT NULL COMMENT '企业名称',
  ordered int DEFAULT NULL COMMENT '排序字段',
  escription varchar(200) DEFAULT NULL COMMENT '描述信息',
  status int DEFAULT NULL COMMENT '状态:0-禁用、1-启用',
  PRIMARY KEY (`id`)
) COMMENT '品牌信息表';

在这里插入图片描述

创建实体类
public class Brand {
    private Integer id;
    private String brandName;
    private String companyName;
    private Integer ordered;
    private String description;
    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.tg.test.BrandTest

在这里插入图片描述

安装MyBatisX插件

具体步骤:依次点击File>>Settings>>plugins>>搜索MybatisX>>INSTALL>>重启IDEA就欧克啦

4.2、需要完成的功能

4.2.1、查询
查询所有数据
  • 编写接口方法:Mapper接口

    参数:无

    结果:List< Brand>

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

  • 编写SQL语句: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">

<!--
    namespace:名称空间
-->
<mapper namespace="com.tg.mapper.BrandMapper">

    <select id="selectAll" resultType="brand">
        select *
        from tb_brand;
    </select>
</mapper>
  • 执行测试方法
public class BrandTest {
    @Test
    public void testBrandSelectAll() throws IOException {
        //获取SqlSessionFactory对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //基于SqlSessionFactory对象获取SqlSession对象
        SqlSession ss = ssf.openSession();

        //基于SqlSession对象获取Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        //执行SQL
        List<Brand> list = mapper.selectAll();
        for (Brand brand : list) {
            System.out.println(brand);
        }

        //释放资源
        ss.close();
    }
}

当我们执行完成后会发现一些小问题

在这里插入图片描述

怎么会有null值呢?!

原来是因为我们数据库表的字段名和实体类的属性名不一样造成的,那有什么解决办法吗,🤭嘿嘿,当然是有的:

起别名,重新书写SQL映射文件中的查询语句

select id, brand_name as brandName, company_name as companyName, ordered, description, status
from tb_brand;

或者书写一个sql片段

在这里插入图片描述

不过上述两种方式不是很灵活的感觉,所以我们经常使用的是resultMap来解决此类问题

在这里插入图片描述

其中resultMap标签中的id可以是任意名字,type是返回值类型,resultMap标签中的result标签 column是数据库表中的字段名,property是实体类中的属性名,记得还要把select标签中原来的resultType换成resultMap并且赋值,其值为resultMap标签中的id名。

查看
  • 编写接口方法:Mapper接口

    参数:id

    结果:brand

Brand selectById(int id);
  • 编写SQL语句:SQL映射文件
<!--paramaterType可以省略不写-->
<select id="selectById" parameterType="int" resultMap="brandResultMap">
        select
            *
        from tb_brand
        where id = #{id};
    <!--
		参数占位符
			1、#{}:会被替换成?,防止sql注入
			2、${}:存在注入问题
	-->
</select>

在进行sql语句编写的过程中我们会遇到一些特殊字符比如”<“,这时候我们需要进行特殊字符处理,保证程序能够成功运行。

特殊字符处理:

转义字符:例如小于符号写成&lt

CDATA区:小于符号可以写成

select * 
form table1
where id
<![CDATA[
	<
]]>#{id};
  • 执行方法
public class BrandTest1 {
    @Test
    public void testSelectDescription() throws IOException {
        //创建SqlSessionFactory对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //基于SqlSessionFactory对象创建SqlSession对象
        SqlSession ss = ssf.openSession();

        //基于SqlSession对象创建Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        //执行sql
        Brand brand = mapper.selectById(1);
        System.out.println(brand);

        //释放资源
        ss.close();
    }
}
条件查询
1、所条件查询
  • 编写接口方法:Mapper接口

    参数:所有查询条件

    结果:List< Brand>

//第一种方式
//List<Brand> selectByCondition(@Param("status")int status, @Param("companyName")String companyName,@Param("brandName")String brandName);

//第二种方式
//List<Brand> selectByCondition(Brand brand);

//第三种方式
List<Brand> selectByCondition(Map map);
  • 编写SQL语句:SQL映射文件
<select id="selectByCondition" resultMap="brandResultMap">
        select *
        from tb_brand
        where
            status = #{status}
        and company_name like #{companyName}
        and brand_name like #{brandName};
</select>
  • 执行方法,测试
public class BrandTest2 {
    @Test
    public void testSelectByCondition() throws IOException {
        //接受参数
        int status = 1;
        String companyName = "华锅";
        String brandName = "华";

        //参数处理
        companyName = "%" + companyName + "%";
        brandName = "%" + brandName + "%";

        //创建Brand对象
//        Brand brand = new Brand();
//        brand.setStatus(status);
//        brand.setBrandName(brandName);
//        brand.setCompanyName(companyName);

        //创建Map集合
        Map map = new HashMap();
        map.put("status", status);
        map.put("companyName", companyName);
        map.put("brandName", brandName);

        //创建SqlSessionFactory对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //根据SqlSessionFactory对象创建SqlSession对象
        SqlSession ss = ssf.openSession();

        //根据SqlSession对象创建Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        //查询
        //List<Brand> brands = mapper.selectByCondition(status, companyName, brandName);

        //List<Brand> brands = mapper.selectByCondition(brand);

        List<Brand> brands = mapper.selectByCondition(map);

        for (Brand br : brands) {
            System.out.println(br);
        }

        //释放资源
        ss.close();
    }
}
2、动态条件查询

SQL语句会随着用户的输入或者外部条件的变化而变化,我们称之为动态SQL

MyBatis对动态SQL有很强大的支撑

  • if
  • choose(when, otherwise)
  • trim(where, set)
  • foreach

示例:我们修改上面多条件查询中的SQL映射文件就可以实现动态多条件查询了

<select id="selectByCondition" resultMap="brandResultMap">
        select *
        from tb_brand
        <where>
            <if test="status != null">
                and status = #{status}
            </if>
            <if test="companyName != null and companyName != '' ">
                and company_name like #{companyName}
            </if>
            <if test="brandName != null and brandName != '' ">
                and brand_name like #{brandName}
            </if>
        </where>
</select>

单条件的动态条件查询:

choose(when, otherwise):选择,类似于java中的switch语言

<select id="selectBySingle" resultMap="brandResultMap">
        select *
        from tb_brand
        <where>
            <choose>
                <when test="status != null">
                    status = #{status}
                </when>
                <when test="companyName != null and companyName != '' ">
                    company_name like #{companyName}
                </when>
                <when test="brandName != null and brandName != '' ">
                    brand_name like #{brandName}
                </when>
            </choose>
        </where>
    </select>
4.2.2、添加
  • 编写接口方法:Mapper接口

    参数:除了id以外的所有数据

    结果:void

void insertNOId(Brand brand);
  • 编写SQL语句:SQL映射文件
<insert id="insertNOId">
        insert into tb_brand(brand_name, company_name, ordered, description, status)
        values(#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
</insert>
  • 执行测试
@Test
    public void testInsertNoId() throws IOException {
        //接受参数
        int status = 1;
        int ordered = 7;
        String companyName = "糖魅集团";
        String brandName = "小魅手机";
        String description = "小魅手机就是牛皮";

        //创建Brand对象
        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setDescription(description);
        brand.setOrdered(ordered);

        //创建SqlSessionFactory对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //根据SqlSessionFactory对象创建SqlSession对象
        SqlSession ss = ssf.openSession(true);//true:自动提交事务

        //根据SqlSession对象创建Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        mapper.insertNOId(brand);
        
        //提交事务:若没有设置opensession方法中的参数为true则需要手动提交事务
        //ss.commit();

        //释放资源
        ss.close();
    }

此时我们如果想要在添加数据的同时获取其id可以完成吗?当我们在mapper.insertNoid(brand)下边紧接着执行System.out.println(brand.getId())时,我们发现运行结果是null。

当我们想要实现主键返回时,我们只需要稍微修改一下我们的SQL映射文件即可:

<insert id="insertNOId" useGeneratedKeys="true" keyProperty="id">

添加上**useGeneratedKeys=“true” keyProperty=“id”**即可。

4.2.3、修改
修改全部字段
  • 编写接口方法:Mapper接口

    参数:所有参数

    结果:int影响的行数

int updateAll(Brand brand);
  • 编写SQL方法:SQL映射文件
<update id="updateAll">
        update tb_brand
        set
            brand_name = #{brandName},
            company_name = #{companyName},
            ordered = #{ordered},
            description = #{description},
            status = #{status}
        where id = #{id};
</update>
  • 执行方法测试
@Test
    public void testUpdateAll() throws IOException {
        //接受参数
        int id = 4;
        int status = 1;
        int ordered = 89;
        String companyName = "糖魅集团";
        String brandName = "小魅手机";
        String description = "小魅手机就是牛皮,哦嚯嚯嚯";

        //创建Brand对象
        Brand brand = new Brand();
        brand.setStatus(status);
        brand.setBrandName(brandName);
        brand.setCompanyName(companyName);
        brand.setDescription(description);
        brand.setOrdered(ordered);
        brand.setId(id);

        //创建SqlSessionFactory对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //根据SqlSessionFactory对象创建SqlSession对象
        SqlSession ss = ssf.openSession(true);

        //根据SqlSession对象创建Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        mapper.updateAll(brand);

        //释放资源
        ss.close();
    }
修改动态字段

只需要修改SQL映射文件即可

<update id="updateAll">
        update tb_brand
        <set>
            <if test="companyName != null and companyName != '' ">
                company_name = #{companyName},
            </if>
            <if test="brandName != null and brandName != '' ">
                brand_name = #{brandName},
            </if>
            <if test="ordered != null">
                ordered = #{ordered},
            </if>
            <if test="description != null and description != '' ">
                description = #{description},
            </if>
            <if test="status != null">
                status = #{status} 
            </if>
        </set>
        where id = #{id};
    </update>
4.2.4、删除
删除一个
  • 编写接口方法:Mapper接口

    参数:id

    返回值:void

void delById(int id);
  • 编写SQL语句:SQL映射文件
<delete id="delById">
        delete
        from tb_brand
        where id = #{id};
</delete>
  • 执行测试方法
@Test
    public void testDeleteById() throws IOException {
        //接受参数
        int id = 6;

        //创建SqlSessionFactory对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //根据SqlSessionFactory对象创建SqlSession对象
        SqlSession ss = ssf.openSession(true);

        //根据SqlSession对象创建Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        mapper.delById(id);

        //释放资源
        ss.close();
    }
批量删除
  • 编写接口方法

    参数:id数组

    返回值:void

/**
     *此时mapper配置文件中
     *<foreach collection="ids" item="id" separator="," open="(" close=")">
     *      #{id}
     * </foreach>
     * collection可以等于ids
     *
     * 若是delByIds(int[] ids)
     * 此时
     * <foreach collection="array" item="id" separator="," open="(" close=")">
     *       #{id}
     * </foreach>
     * collection要写等于array
     */
void delByIds(@Param("ids") int ids);
  • 编写SQL映射文件
<delete id="delByIds">
        delete from tb_brand
        where in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
</delete>
rceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

        //根据SqlSessionFactory对象创建SqlSession对象
        SqlSession ss = ssf.openSession(true);

        //根据SqlSession对象创建Mapper代理对象
        BrandMapper mapper = ss.getMapper(BrandMapper.class);

        mapper.delById(id);

        //释放资源
        ss.close();
    }
批量删除
  • 编写接口方法

    参数:id数组

    返回值:void

/**
     *此时mapper配置文件中
     *<foreach collection="ids" item="id" separator="," open="(" close=")">
     *      #{id}
     * </foreach>
     * collection可以等于ids
     *
     * 若是delByIds(int[] ids)
     * 此时
     * <foreach collection="array" item="id" separator="," open="(" close=")">
     *       #{id}
     * </foreach>
     * collection要写等于array
     */
void delByIds(@Param("ids") int ids);
  • 编写SQL映射文件
<delete id="delByIds">
        delete from tb_brand
        where in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
</delete>
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值