首页 > 数据库 >day112 - mybatis的查询与特殊sql语句

day112 - mybatis的查询与特殊sql语句

时间:2023-06-24 16:57:28浏览次数:53  
标签:username mapper day112 map sqlSession user sql mybatis id

mybatis查询与特殊语句

查询

普通语句

/**
 * 根据id查询用户信息
 * @param id
 * @return
 */
User getUserById(@Param("id") Integer id);
​
<!--   User getUserById(@Param("id") Integer id);  -->
<select id="getUserById" resultType="com.gu.mybatis.pojo.User">
    select * from t_user where id =#{id}
    </select>
        
@Test
    public void getUserById(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        User userById = mapper.getUserById(1);
        System.out.println(userById);
    }

 

多条语句

/**
 * 1. 若查询语句为多条时,一定不能以实体类类型作为返回值
 * 否则会抛出异常
 * 2. 若查询语句为一条时,可以使用实体类型,也可以使用list集合类型作为方法的返回值
 */
<!--  List<User> getAllUser();  -->
<select id="getAllUser" resultType="com.gu.mybatis.pojo.User">
    select * from t_user
    </select>
@Test
    public void getAllUser(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<User> userById = mapper.getAllUser();
        userById.forEach(System.out::println);
    }

 

2.

<!--  Integer getCount();  -->
<!--
    Mybatis中为Java常用的类型设置了类型别名
    Integer:Integer,int
    int:_int,_integer
    Map:map
    String: string
  -->
<select id="getCount" resultType="java.lang.Integer">
    select count(*) from t_user
    </select>

 

map集合方式

  1. 查询一条结果放入map集合中

/**
 * 根据id查询用户信息为一个map集合
 * @param id
 * @return
 */
Map< String, Object>getUserBtIdToMap(@Param("id") Integer id);
​
<!--  Map< String, Object>getUserBtIdToMap(@Param("id") Integer id);  -->
<select id="getUserBtIdToMap" resultType="java.util.Map">
    select * from t_user where id = #{id}
    </select>
        
@Test
    public void getUserByIdToMap(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        Map<String, Object> map = mapper.getUserBtIdToMap(1);
        //{password=123456, gender=男, id=1, age=23, email=222333, username=admin}
        System.out.println(map);
        //若值为null,则不放入map集合中
    }

 

  1. 查询多条结果放入list集合中,list的类型为map

/**
 * 查询所有的用户集合,通过map集合的方式
 *
 * 若查询的数据有多条时,并将每条数据转化为map集合
 * 1. 将mapper接口方法返回值设置为list
 *    List<Map< String, Object>>getAllUserByMap();
 * 2. 将每条数据的map集合放在一个大的map中,通过@MapKey("字段")作为大的map的键
 *     @MapKey("id")
 *     Map< String, Object>getAllUserByMap();
 * @return
 */
//List<Map< String, Object>>getAllUserByMap();
@MapKey("id")
Map< String, Object>getAllUserByMap();
​
<!--  Map< String, Object>getAllUserByMap();  -->
<select id="getAllUserByMap" resultType="java.util.Map">
    select * from t_user
    </select>
    
  @Test
    public void getAllUserByMap(){
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        //List<Map<String, Object>> map = mapper.getAllUserByMap();
        Map<String, Object> map = mapper.getAllUserByMap();
        System.out.println(map);
    }   

 

结果:

{1={password=123456, gender=男, id=1, age=23, email=222333, username=admin}, 2={password=123456, gender=男, id=2, age=22, email=22224444, username=gugu}, 3={password=123456, gender=女, id=3, age=33, email=hahahaha, username=root},

4={id=4, username=a},

5={id=5, username=a},

6={id=6, username=a},

7={id=7, username=a},

8={id=8, username=a},

11={id=11, username=a},

12={password=123456, gender=男, id=12, age=23, email=[email protected], username=xiaoming}}

以@MapKey("id")的id为标识符,返回一个map对象

特殊语句

模糊查询

/**
 * 通过用户名模糊查询用户信息
 * @param name
 * @return
 */
List<User> getUserByLike(@Param("name") String name);
<!--  List<User> getUserByLike(@Param("name") String name);  -->
<select id="getUserByLike" resultType="com.gu.mybatis.pojo.User">
<!--select * from t_user where username like '%${name}%'-->
<!--select * from t_user where username like concat('%',#{name},'%')-->
    select * from t_user where username like "%"#{name}"%"
    </select>

 

批量删除

<!--void deleteMoreUser(@Param("ids") String ids);-->
<delete id="deleteMoreUser">
    delete from t_user where id in(${ids})
    </delete>

 

动态设置表名,查询当前用户信息

<!--List< User> getUserList(@Param("tablename") String tablename);-->
<select id="getUserList" resultType="com.gu.mybatis.pojo.User">
    select * from ${tablename}
    </select>

 

添加用户信息,并获取自增主键

<!--void insertUser(User user);-->
<!--
    useGeneratedKeys:表示当前添加功能使用了自增的主键
    keyProperty:将添加的数据的自增主键为实体类的参数属性赋值,因为sql语句只返回受影响的行数
-->
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
    insert into t_user values(null,#{username},#{password},#{age},#{gender},#{email})
​
    </insert>

 

测试

@Test
public void testGetUserByLike(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
    List<User> like = mapper.getUserByLike("a");
    like.forEach(System.out::println);
}
​
@Test
public void testDeleteUser(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
    mapper.deleteMoreUser("9,10");
}
​
@Test
public void testGetUserList(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
    List<User> user = mapper.getUserList("t_user");
    user.forEach(System.out::println);
}
​
@Test
public void testInsertUser(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    SpecialSQLMapper mapper = sqlSession.getMapper(SpecialSQLMapper.class);
    User user = new User(null,"xiaoming","123456",23,"男","[email protected]");
    mapper.insertUser(user);
    System.out.println(user);
}

 

over

标签:username,mapper,day112,map,sqlSession,user,sql,mybatis,id
From: https://www.cnblogs.com/GUGUZIZI/p/17501298.html

相关文章

  • 数据库内核:PostgreSQL 存储
    存储管理数据库管理系统的存储管理分级在数据库管理系统中存储管理的目的是:提供页或者元组集合的数据视图将数据库对象(例如表)映射到磁盘文件上管理数据与磁盘存储之间的传输使用缓冲区来减少磁盘/内存之间传输次数将加载的数据还原成为元组是使用访问方法......
  • Mysql-概览
    Mysql-基本体系Mysql-索引Mysql-存储引擎......
  • Mysql-存储引擎
    存储引擎1.存储引擎概述和大多数的数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求可以选择最优的存储引擎。存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。Oracle,SqlServer......
  • Mysql-基本体系
    Mysql的体系结构概览1.1逻辑架构图整个MySQLServer由以下组成ConnectionPool:连接池组件ManagementServices&Utilities:管理服务和工具组件SQLInterface:SQL接口组件Parser:查询分析器组件Optimizer:优化器组件Caches&Buffers:缓冲池组件Pluggab......
  • Mysql-索引
    0.概述索引(index)是帮助MySQL高效获取数据的数据结构(有序)。索引是在数据库表的字段上添加的,是为了提高查询效率存在的一种机制。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数......
  • 使用lightdb-em或Prometheus+grafana监控lightdb/PostgreSQL
    lightdb提供了一体化的运维监控平台lightdb-em,支持集中式的监控所有的lightdb实例以及postgresql,包括单机、高可用、分布式。其架构如下: lightdb-em功能:  详细的使用可以参考官方文档,运维指南。安装包可从lightdb官网下载。如果不想使用lightdb-em......
  • 在MySQL中实现upsert功能
    1语法示例INSERTINTOtable_name(column1,column2,...)SELECTcolumn1,column2,...FROMtemp_tableONDUPLICATEKEYUPDATEcolumn1=VALUES(column1),column2=VALUES(column2),...;2自己项目中的SQL代码示例INSERTINTOhs_stock_marke......
  • 基于SpringBoot+MySQL+IDEA开发的家庭财务管理系统
    基于SpringBoot+MySQL+IDEA开发的家庭财务管理系统项目介绍......
  • Mysql-二刷一些重要知识点记录
    执行DDL的时候,即使此DDL被其他DML阻塞了,但是后续DML都会被此DDL阻塞(个人理解:DDL、DML按照申请顺序排队执行)[DML加MDL读锁,DDL加MDL写锁,读写之间互斥]使用onlineddl也就不害怕线上DDL了changebuffer存储inser和update的数据。如果不马上查询,起到加速DML的作用[尽量......
  • elasticsearch-sql查询
    目的elasticsearch以sql形式查询数据方式1get/_xpack/sql?format=txt{"query":"selectspanId,avg(elapsed),count(1)from\"sc-log-wbjr_2022-01-21\"groupbyspanIdhavingcount(1)>100orderbycount(1)desc&quo......