首页 > 其他分享 >MyBatis基础使用二

MyBatis基础使用二

时间:2022-10-20 23:46:35浏览次数:49  
标签:username map mapper 基础 使用 MyBatis password com id

MyBatis基础使用二

配置Mybatis参考MyBatis基础用法一

基本的CRUD

接口UserMapper

package com.wfy.mapper;

import com.wfy.pojo.User;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

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

public interface  UserMapper {


    //根据用户名查询用户
    /**这里为了节省时间使用了注解编写查询语句
     * MyBatis获取参数值的两种方式:${}和#{}
     * ${}的本质就是字符串的拼接,#{}的本质就是占位符赋值
     * ${}使用字符串的方式拼接sql,若为字符串或日期类型的字段进行赋值时,需要手动加单引号
     * #{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
     * */
//    @Select("select * from user where username=#{username}")
    @Select("select * from user where username='${username}'")
    List<User> SelectUserByName(String username);

    /**若mapper接口方法的参数放在map集合中,以两种方式存储数据
     * 1.以arg0,arg1...为键,以参数为值
     * 2.以param1,param2....为键,以参数为值
     * 因此,只需要通过#{}和${}访问map集合的键,就可以获取相应的值,一定要注意${}的单引号问题
     * 这里通过注解的方式设置Param的键的值,此时MyBatis会将这些参数放在map中,以两种方式进行存储
     * 1.以@Param注解的value属性值为键,以参数为值
     * 2.以param1,param2,param3.....为键,以参数为值
     * */
    List<User> SelectUser(@Param("username") String username, @Param("password") String password);

    /**
     * 由于传输多个参数是放在map集合中的值,因此我们可以自己设置map集合来直接获取键的值
     * */
    User SelectByMap(Map<String,Object> map);

    //新增数据
    int InsertUser(User user);

            /*
            *  通过map集合查询全部数据
            * 若查询的数据有多条时,并且要将每条数据转换为map集合
            *此时有两种解决方案:
            * 1.将mapper接口方法的返回值设置为泛型是map的list集合
            * List<Map<String,Object>> SelectAllByMap(); ----返回值无顺序
            * 2.可以将每条数据转换的map集合存放在一个大的map中,但是必须要通过@Mapkey注解将查询的某个字段的值作为大的map的键
            * @MapKey("id") //设置键
            * Map<String ,Object> SelectAllByMap()-----返回值以id键为顺序
            * 结果:
             {
            1={password=123456, gender=男, id=1, age=20, [email protected], username=任凌飞}, 3={password=224466, gender=男, id=3, age=20, [email protected], username=绫小路清隆},
            4={password=123456, gender=男, id=4, age=20, [email protected], username=任凌飞}, 6={password=12581, gender=男, id=6, age=20, [email protected], username=折木奉太郎}
            *}
            * */
    @MapKey("id") //设置键
    Map<String ,Object> SelectAllByMap();

    //模糊查询
    List<User> SelectUserByLike(String username);
}

mapper映射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">
<mapper namespace="com.wfy.mapper.UserMapper">
    <insert id="InsertUser">
        insert into user values (null,#{username},#{password},#{age},#{gender},#{email})
    </insert>

    <select id="SelectUser" resultType="User">
    select * from user where username=#{username} and password=#{password}
</select>
    <select id="SelectByMap" resultType="com.wfy.pojo.User">
        select * from user where username=#{username} and password=#{password}
    </select>
    <select id="SelectAllByMap" resultType="java.util.Map">
        select * from user
    </select>
    <select id="SelectUserByLike" resultType="com.wfy.pojo.User">
         select * from user where username like "%"#{username}"%"
    </select>
</mapper>

测试类

package com.wfy.MyBatisTest;

import com.wfy.mapper.UserMapper;
import com.wfy.pojo.User;
import com.wfy.utils.SqlSessionFactoryUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

public class MyBatisTest {

    @Test
    public void SelectByName(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.SelectUserByName("任凌飞");
        for(User user : users){
            System.out.println(user);
        }
    }

    @Test
    public void SelectUser(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.SelectUser("任凌飞", "123456");
        for (User user:users
             ) {
            System.out.println(user);
        }
    }

    @Test
    public void SelectByMap(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> map= new HashMap<>();
        map.put("username","绫小路清隆");
        map.put("password","224466");
        User user = mapper.SelectByMap(map);
        System.out.println(user);
    }

    @Test
    public void InsertUser(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.InsertUser(new User(null, "折木奉太郎", "12581", 20, "男", "[email protected]"));
        if (i>0){
            System.out.println("插入成功~");
        }else {
            System.out.println("插入失败~");
        }
    }

    @Test
    public void SelectAllByMap(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        Map<String, Object> stringObjectMap = mapper.SelectAllByMap();
        //{1={password=123456, gender=男, id=1, age=20, [email protected], username=任凌飞}, 3={password=224466, gender=男, id=3, age=20, [email protected], username=绫小路清隆},
        // 4={password=123456, gender=男, id=4, age=20, [email protected], username=任凌飞}, 6={password=12581, gender=男, id=6, age=20, [email protected], username=折木奉太郎}}
        System.out.println(stringObjectMap);
    }

    @Test
    public void SelectUserByLike(){
        SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = mapper.SelectUserByLike("任");
        list.forEach(System.out::println);
    }

}

上述所使用的基础用法

  1. MyBatis获取参数值的两种方式:${}#{}

    • ${}的本质就是字符串的拼接,#{}的本质就是占位符赋值

    • ${}使用字符串的方式拼接sql,若为字符串或日期类型的字段进行赋值时,需要手动加单引号

    • {}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号

  2. 若mapper接口方法的参数放在map集合中,以两种方式存储数据

      1. 以arg0,arg1...为键,以参数为值
      1. 以param1,param2....为键,以参数为值
    • 因此,只需要通过#{}和${}访问map集合的键,就可以获取相应的值,一定要注意${}的单引号问题

    • 这里通过注解的方式设置Param的键的值,此时MyBatis会将这些参数放在map中,以两种方式进行存储

      1. 以@Param注解的value属性值为键,以参数为值
      1. 以param1,param2,param3.....为键,以参数为值
  3. 通过map集合查询全部数据

  • 若查询的数据有多条时,并且要将每条数据转换为map集合
    *此时有两种解决方案:

       * 1. 将mapper接口方法的返回值设置为泛型是map的list集合
       * List<Map<String,Object>> SelectAllByMap(); ----返回值无顺序
       * 2. 可以将每条数据转换的map集合存放在一个大的map中,但是必须要通过@Mapkey注解将查询的某个字段的值作为大的map的键
       * @MapKey("id") //设置键
       * Map<String ,Object> SelectAllByMap()-----返回值以id键为顺序
       * 结果:
          ```java
          {
           1={password=123456, gender=男, id=1, age=20, [email protected], username=任凌飞}, 3={password=224466, gender=男, id=3, age=20, [email protected], username=绫小路清隆},
           4={password=123456, gender=男, id=4, age=20, [email protected], username=任凌飞}, 6={password=12581, gender=男, id=6, age=20, [email protected], username=折木奉太郎}
           }
          ```
    
  1. 模糊查询的三种方式
  • 第一种模糊查询的方式
 select * from user where username like '%${username}%'
  • 第二种模糊查询的方式
 select * from user where username like concat('%',#{username},'%')
  • 第三种模糊查询的方式
select * from user where sername like "%"#{username}"%"

标签:username,map,mapper,基础,使用,MyBatis,password,com,id
From: https://www.cnblogs.com/wfy-studying/p/16811783.html

相关文章

  • Docker_基础知识
    容器概述容器本义:盛装物体、隔离物体。容器意义:解决虚拟化资源浪费的问题。容器沿革:1979---2013---                    版本:企业版(EE)/社区版(CE)1.......
  • MyBatis基础使用四
    MyBatis基础使用四动态SQL一、多条件查询语句通过标签进行的多条件查询,通过test属性中的表达式判断标签中的内容是否有效(是否会拼接到sql中)<selectid="SelectCond......
  • Mybaits基本使用
    Mybaits基本使用整体的项目逻辑第一步:配置mybatis-config.xml核心配置文件,导入项目依赖<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationP......
  • JavaScript基础知识
    JavaScript基础知识##输出语句*1.window.alert()--写入警告框*2.document.write()---写入HTML输出*3.console.log()---写入浏览器控制台*alert("helloworld!......
  • Gradle基础知识-Wrapper,Daeman;Groovy闭包语法
    gradledescirbe:gradle本质就是一个bin脚本,分为window和unix。启动gradle:启动jvm加载lib所需的库gradlewrapper输入gradlewrapper命令会在当前目录创建安装一个jar包......
  • firebath数据库常见操作——增删改查使用总结
    firebath数据库常见操作——增删改查使用总结问题背景之前在看一个GitHub上的海外项目用到了Google的实时在线数据库firebath,查看官方文档提供的demo和api介绍感觉相对还......
  • [C#]SourceGenerator实战: 对任意对象使用await吧!!!
    [C#]SourceGenerator实战:对任意对象使用await吧!!!前言本文记录一次简单的SourceGenerator实战,最终实现可以在代码中await任意类型对象,仅供娱乐,请勿在生产环境中使......
  • 嵌入式-C语言基础:理解形参和实参的区别
    #include<stdio.h>//实参:函数原型中声明函数后面带的参数inttest(intx)//函数原型{//函数体printf("test里面的x地址=%p",&x);returnx;}//变量......
  • Spring中Transactional注解使用的心得
    今天看黑马redis的课,里面讲到了一个事务注解不生效的问题。究其原因,就在于Spring中事务注解生效的条件。那么接下来就说一下自己的心得。查了一下资料,就是说如果想让@Tr......
  • 印象笔记的高效使用方式
    印象笔记使用思路:笔记软件很多,能够做笔记的软件也很多,使用每种软件,务必充分发挥其优势才有意义。使用了印象笔记这么久,体会到以下几点:一、充分利用网页裁剪功能。网页裁剪......