Mybatis 常规CURD操作(*)

1,编辑测试方法

package com.jt.springboot_demo2_mybatis;

import com.jt.springboot_demo2_mybatis.mapper.DemoUserMapper;
import com.jt.springboot_demo2_mybatis.pojo.DemoUser;
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.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

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

public class TestMybatis {
    private SqlSessionFactory sqlSessionFactory;

    /**
     * mybatis的核心 sqlSessionFacotry对象
     *
     * @BeforeEach:测试API中的注解,在执行@Test注解方法时,会提前执行!!!
     */
    @BeforeEach
    public void init() throws IOException {
        //1,指定资源文件
        //指定配置文件地址
        String resource = "mybaits\\mybaits.config.xml";
        //通过IO流 加载指定的配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //动态生成SqlSessionFactory
        sqlSessionFactory =
                new SqlSessionFactoryBuilder().build(inputStream);
    }

    /**
     * 需求:查询age> 18 and age <100的用户信息
     * 规则
     */
    @Test
    public void testSelect01() {
      /**  //自动提交事务
        sqlSessionFactory.openSession(true);
       */
        //获取SqlSession  类比 数据库链接
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取Mapper接口
        DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
        DemoUser demoUser = new DemoUser();
        Map<String,Object> map = new HashMap<>();
        map.put("minAge", 18);
        map.put("maxAge", 100);
        List<DemoUser> userList = demoUserMapper.select01(map);
        System.out.println(userList);
        sqlSession.close();
    }
    /**
     * 例如: 删除id=232/233/234的数据?
     *  Sql: delete from demo_user where id in (232,233,234)
     * 规则: 如果遇到相同的多个数据,则一般采用集合的方式封装数据.
     * 封装方式:
     *      1. array
     *      2. list
     *      3. map<List>
     */
    @Test
    public void testDelect(){
        //获取SQLSession 类比 数据库链接
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取Mapper接口
        DemoUserMapper demoUserMapper = sqlSession.getMapper(DemoUserMapper.class);
        //将数据封装为数组
        int[] ids = {232,233,234};
        demoUserMapper.deleteIds(ids);
        System.out.println("删除操作成功!!!");
    }
}

 2,编辑Mapper接口

package com.jt.springboot_demo2_mybatis.mapper;

import com.jt.springboot_demo2_mybatis.pojo.DemoUser;
import org.apache.ibatis.annotations.Param;

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

/**
 * 说明:
 *      1,根据面向接口开发的思想要定义一个Mapper接口
 *      2,在接口中可以写接口方法,谁用谁去实现!!!
 *      3,Mybatis中的实现类以xml文件的形式存在
 */
public interface DemoUserMapper {
    //1,查询所有的表数据

    List<DemoUser> select01(Map<String, Object> map);

    void deleteIds(int[] ids);
}

3,编辑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">

<!--xml映射文件 必须与接口一对一绑定
    namespace指定需要绑定的接口名称,不能重复-->
<mapper namespace="com.jt.springboot_demo2_mybatis.mapper.DemoUserMapper">
    <!--根据age查询数据
    xml文件中的转义字符.
            &gt;  > 大于
            &lt;  < 小于
            &amp;  & 号
        说明:如果sql中有大量的转义字符 建议使用转义标签体
        语法: <![CDATA[  xxx内容 报文   ]]>
    -->
    <select id="select01" resultType="com.jt.springboot_demo2_mybatis.pojo.DemoUser">
        <!--select * from demo_user where age > #{minAge} and age &lt; #{maxAge}-->
        <![CDATA[  select * from demo_user where age > #{minAge} and age < #{maxAge}]]>
    </select>
    <!--
     需求: 批量删除多个数据
     难点: 如果使用#{集合}获取的是集合对象的整体.删除无效.
     思路: 将数组拆分为单个数据. 可以通过遍历的方式操作
     语法: mybatis为了参数取值方便,特意封装了遍历的标签 foreach
     关于标签参数说明:
         <foreach collection=""></foreach>
         1.如果传递的参数是数组,     则collection="array"
         2.如果传递的参数是list集合, 则collection="list"
         3.如果传递的参数是Map集合,  则collection="map中的key"

     标签属性说明:
         1.collection 集合的名称
         2.item 每次遍历的数据的形参变量
         3.open 循环的开始标签
         4.close 循环的结束标签
         5.index 循环遍历下标 一般不用
         6.separator 循环遍历的分割符
 -->
    <delete id="deleteIds">
        delete from demo_user where id in (
        <foreach collection="array" item="id" separator=",">
            #{id}
        </foreach>
        )
    </delete>
</mapper>

总结

抽取生成SqlSessionFactory的方法 @BeforeEach

利用Mybatis查询数据时,如果返回值结果确定唯一则使用POJO对象接收.如果不能确定.使用List集合接收.

mybatis默认支持单值传参.如果遇到多值,需要将多值转化为单值.
策略: 1.利用POJO对象封装
2.利用万能的Map集合
3.如果参数一定使用多值操作,则使用@Param(“sex”) String sex

#号 和 $符用法
#号有预编译效果, 为数据添加一对""号
$符 没有预编译的效果, 一般以字段名称为参数时使用.

mybatis原生条件下 做"更新"操作时,需要手动提交事务.
//自动提交事务
sqlSessionFactory.openSession(true);
6.xml中常见的转义字符

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值