MyBatis

MyBatis简介

MyBatis是一个优秀的持久层框架,它对jdbc操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

持久层:1.负责将数据到保存到数据库的那一层代码

              2.JavaEE三层架构:表现层、业务层、持久层

框架:1.框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型

           2.在框架的基础之上构建编写更加高效、规范、通用、可拓展

 

MyBatis入门

1.建立一个数据库,在其中创建一张表并填入数据

 

 

 

 

2.使用IDEA创建一个maven项目

 

 

 

3.导入依赖jar包(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <!-- mysql 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.36</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.11</version>
        </dependency>

    </dependencies>

</project>

 

 4.创建一个User类

package com.yezi.pojo;

public class User {
    private String id;
    private String username;
    private String password;
    private String gender;
    private String addr;

    public String getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

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

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

 

5.编写mapper映射文件(编写SQL)(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="com.yezi.mapper.UserMapper">
<!--    <mapper namespace="test">-->
    <select id="selectAll" resultType="com.yezi.pojo.User">
        select * from tb_user;
    </select>
    <select id="selectById" resultType="com.yezi.pojo.User">
        select * from tb_user where id = #{id};
    </select>
</mapper>

 

6.连接数据库信息

<?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>
    
    <typeAliases>
        <package name="com.yezi.pojo"/>
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
<!--                数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/db1?characterEncoding=UTF-8&amp;useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456789"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
<!--        <mapper resource="com/yezi/mapper/BrandMapper.xml"></mapper>-->
        <package name="com.yezi.mapper"/>
    </mappers>
</configuration>

 

7.测试类

package com.yezi;

import com.yezi.pojo.User;
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;
import java.util.List;

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

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

        //3.执行sql
//        List<User> users = sqlSession.selectList("test.selectAll");
        List<User> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

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

Mapper代理:

目的:1.解决原生方式中的硬编码

           2.简化后期执行SQL

 

 

 MyBatis案例

环境准备:

1.建立一个数据库表tb_brand(数据库db1中)

DROP TABLE
IF EXISTS tb_brand;

CREATE TABLE tb_brand (
    id INT PRIMARY KEY auto_increment,
    brand_name VARCHAR (20),
    company_name VARCHAR (20),
    ordered INT,
    description VARCHAR (100),
    STATUS INT
);

INSERT INTO tb_brand (
    brand_name,
    company_name,
    ordered,
    description,
    STATUS
)
VALUE
    (
        '三只松鼠',
        '三只松鼠股份有限公司',
        5,
        '好吃不上火',
        0
    ),
    (
        '华为',
        '华为技术有限公司',
        100,
        '华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界',
        1
    ),
    (
        '小米',
        '小米科技有限公司',
        50,
        'are you ok',
        1
    );

SELECT * FROM tb_brand;

 

 2.建立实体类Brand

package com.yezi.pojo;

public class Brand {
    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 +
                '}';
    }
}

 

3.测试用例MyBatisTest

package com.yezi.test;

public class MyBatisTest {
}

 

*4.安装MyBatisX插件

MyBatisX主要作用:

  1. 自动生成代码功能,包含自动生成数据库实体和XML配置文件,根据Mapper的接口方法名自动生成xml配置
  2. Mapper接口与xml自动跳转功能

1.查询

(1)查询所有&结果映射

 

 BrandMapper接口:

package com.yezi.mapper;

import com.yezi.pojo.Brand;

import java.util.List;

public interface BrandMapper {
    //    查询所有
    List<Brand> selectAll();
}

 

编写全局配置文件

<?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.yezi.mapper.BrandMapper">
     <!--
    数据库表的字段名称 和 实体类的属性名称 不一样,则不能自动封装数据
       *起别名:对不一样的列名起别名,让别名和实体类的属性名一样
           *缺点:每次查询都要定义一次别名
               *sql片段
                   缺点:不灵活
       *resultMap:
           1.定义<resultMap>标签
           2.使用resultMap属性替换 resultType属性
    -->

    <resultMap id="brandResultMap" type="brand">
        <!--
            id:完成主键字段的映射
               column:表的列名
               property:实体类的属性名
            result:完成一般字段的映射
               column:表的列名
               property:实体类的属性名
        -->
        <result column="brand_name" property="brandName"></result>
        <result column="company_name" property="companyName"></result>
    </resultMap>

</mapper>

 

测试类

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

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

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

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

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

    }

(2)查看详情

 

 

 

BrandMapper接口:

package com.yezi.mapper;


import com.yezi.pojo.Brand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    //查看详情
    Brand selectById(int id);

}

 

编写全局配置文件:

<?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.yezi.mapper.BrandMapper">
     <select id="selectAll" resultMap="brandResultMap">
        select *
        from tb_brand;
    </select>


    <!--    <sql id="brand_column">-->
    <!--        id, brand_name brandName, company_name companyName, ordered, description, STATUS-->
    <!--    </sql>-->

    <!--    <select id="selectAll" resultType="brand">-->
    <!--        select <include refid="brand_column"/>-->
    <!--        from tb_brand;-->
    <!--    </select>-->

    <!--    <select id="selectAll" resultType="brand">-->
    <!--        select id, brand_name brandName, company_name companyName, ordered, description, STATUS-->
    <!--        from tb_brand;-->
    <!--    </select>-->

    <!--
        * 参数占位符:
             1.#{}:会将其替换为?,防止SQL注入
             2.${}: 拼sql 会存在SQL注入问题
             3.使用时间:
                  * 参数传递的时候:#{id}
                  * 表名或者列名不固定的情况下:${}会存在SQL注入问题
        *参数类型:parameterType:可以省略
        *特殊字符处理:
            1.转义字符
            2.CDATA区
            (<select id="selectById" resultMap="brandResultMap">
              select *
              from tb_brand where id
              <![CDATA[
              >
              ]]>
               #{id};
               </select>-->

</mapper>

 

测试类

package com.yezi.test;

import com.yezi.mapper.BrandMapper;
import com.yezi.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.HashMap;
import java.util.List;
import java.util.Map;

public class MyBatisTest {

    @Test
    public void testSelectById() throws IOException {
        //接收参数
        int id = 1;

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

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

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

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

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

    }
}

 

(3)条件查询

 

 

 

BrandMapper接口:

package com.yezi.mapper;


import com.yezi.pojo.Brand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    /**
     * 条件查询
     *   * 参数接收
     *       1.散装参数:如果方法中有多个参数需要使用@Param("SQL参数占位符名称")
     *       2.对象参数:对象的属性名称要和参数占位符名称一致
     *       3。map集合参数
     * @Param status
     * @Param companyName
     * @Param brandName
     * @return
     */
//    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);

}

 

编写全局配置文件:

<?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.yezi.mapper.BrandMapper">
    <select id="selectById" resultMap="brandResultMap">
        select *
        from tb_brand
        where id = #{id};
    </select>


    <!--条件查询-->
    <!--    <select id="selectByCondition" resultMap="brandResultMap">-->
    <!--        select *-->
    <!--        from tb_brand-->
    <!--        where-->
    <!--            status = #{status}-->
    <!--          and company_name like #{companyName}-->
    <!--          and brand_name like #{brandName}-->
    <!--    </select>-->

    

</mapper>

 

测试类

package com.yezi.test;

import com.yezi.mapper.BrandMapper;
import com.yezi.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.HashMap;
import java.util.List;
import java.util.Map;

public class MyBatisTest {
@Test
public void testSelectByCondition() throws IOException {
//接收参数
int status = 1;
String companyName = "华为";
String brandName = "华为";

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

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




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

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

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

//执行方法
// List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);
List<Brand> brands = brandMapper.selectByCondition(brand);

System.out.println(brands);

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

}
 }

 

(4)动态条件查询

 

 

 

 

 

BrandMapper接口:

package com.yezi.mapper;


import com.yezi.pojo.Brand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    //多条件查询
    List<Brand> selectByCondition(Map map);

   // 单条件动态查询
List<Brand> selectByConditionSingle(Brand brand);
}

 

编写全局配置文件:

<?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.yezi.mapper.BrandMapper">
<!--    多条件动态条件查询
               * if:条件判断
                   * test:逻辑表达式
               * 问题:
                   * 恒等式
                   * <where> 替换 where 关键字
    -->
<select id="selectByCondition" resultMap="brandResultMap"> select * from tb_brand /*where 1=1*/ <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>

<!--    单条件动态条件查询-->
<select id="selectByConditionSingle" 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>
</mapper>

 

测试类

package com.yezi.test;

import com.yezi.mapper.BrandMapper;
import com.yezi.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.HashMap;
import java.util.List;
import java.util.Map;

public class MyBatisTest {

    @Test
    public void testSelectByCondition() throws IOException {
        //接收参数
        int status = 1;
        String companyName = "华为";
        String brandName = "华为";

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

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

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


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

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

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

        //执行方法
//        List<Brand> brands = brandMapper.selectByCondition(status, companyName, brandName);
//        List<Brand> brands = brandMapper.selectByCondition(brand);
        List<Brand> brands = brandMapper.selectByCondition(map);
        System.out.println(brands);

        //释放资源
        sqlSession.close();
    }
@Test
public void testSelectByConditionSingle() throws IOException {
//接收参数
int status = 1;
String companyName = "华为";
String brandName = "华为";

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

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


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

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

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

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

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

}
}

 

2.添加&修改功能

 

 

 

 

BrandMapper接口:

package com.yezi.mapper;


import com.yezi.pojo.Brand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    //添加
    void add(Brand brand);

    //修改
    int update(Brand brand);

}

 

编写全局配置文件:

<?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.yezi.mapper.BrandMapper">
    <!--    添加-->

    <insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into tb_brand (brand_name, company_name, ordered, description, STATUS)
        values (#{brandName}, #{companyName}, #{ordered}, #{description}, #{status});
    </insert>
    <!--
            mybatis会将数组参数,封装为一个Map集合
                *默认:array= 数组
                *使用@param注解改变map集合的默认key的名称
        -->

    <!--修改-->
    <update id="update">
        update tb_brand
        <set>
            <if test="brandName != null and brandName != ''">
                brand_name = #{brandName},
            </if>

            <if test="companyName != null and companyName != ''">
                company_name = #{companyName},
            </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>

</mapper>

 

测试类

package com.yezi.test;

import com.yezi.mapper.BrandMapper;
import com.yezi.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.HashMap;
import java.util.List;
import java.util.Map;

public class MyBatisTest {

    @Test
    public void testAdd2() throws IOException {
        //接收参数
        int status = 1;
        String companyName = "oppo手机";
        String brandName = "oppo";
        String description = "oppo记录美好生活";
        int ordered = 100;

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


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

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

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

        //执行方法
        brandMapper.add(brand);
        Integer id = brand.getId();
        System.out.println(id);

        //提交事务
        sqlSession.commit();

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


    @Test
    public void testUpdate() throws IOException {
        //接收参数
        int status = 1;
        String companyName = "oppo手机";
        String brandName = "oppo";
        String description = "oppo手机,oppo记录美好生活";
        int ordered = 200;
        int id = 8;

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


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

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

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

        //执行方法
        int count = brandMapper.update(brand);
        System.out.println(count);

        //提交事务
        sqlSession.commit();

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

 

3.删除功能

 

 

 

 

 

 

BrandMapper接口:

package com.yezi.mapper;


import com.yezi.pojo.Brand;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface BrandMapper {

    //根据id删除
    void deleteById(int id);

    //批量删除
    void deleteByIds(@Param("ids") int[] ids);

}

 

编写全局配置文件:

<?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.yezi.mapper.BrandMapper">
    <delete id="deleteById">
        delete
        from tb_brand
        where id = #{id}
    </delete>
    <delete id="deleteByIds">
        delete from tb_brand where id
        in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

</mapper>

 

测试类

package com.yezi.test;

import com.yezi.mapper.BrandMapper;
import com.yezi.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.HashMap;
import java.util.List;
import java.util.Map;

public class MyBatisTest {

     @Test
    public void testDeleteById() throws IOException {
        //接收参数
        int id = 8;

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

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

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

        //执行方法
        brandMapper.deleteById(id);

        //提交事务
        sqlSession.commit();

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


    @Test
    public void testDeleteByIds() throws IOException {
        //接收参数
        int[] ids = {7,9,10};

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

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

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

        //执行方法
        brandMapper.deleteByIds(ids);

        //提交事务
        sqlSession.commit();

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

 

posted on 2022-07-20 16:56  叶子1111  阅读(30)  评论(0编辑  收藏  举报

导航