MyBatis各种查询功能:

 如果查询出的数据只有 "一条",可以通过:

1-实体类对象接收
2-List集合接收
3-Map集合接收,结果{password=123456, sex=男, id=1, age=23, username=admin}
2-如果查询出的数据有 "多条",一定不能用"实体类对象"接收,会抛异常 "TooManyResultsException",可以通过

 1-实体类类型的"LIst集合"接收
2-Map类型的"LIst集合"接收
3-在mapper接口的方法上添加@MapKey注解

1-"查询功能"案例:

  • 1.1查询 "一个" 实体类对象

/**
* 根据用户id查询用户信息
* @param id
* @return
*/
User getUserById(@Param("id") int id);
<!--User getUserById(@Param("id") int id);-->
<select id="getUserById" resultType="User">
select * from t_user where id = #{id}
</select>
@Test
public void testGetUserById(){
SqlSession sqlSession = SqlSessionUtils.getSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
User userById = mapper.getUserById(3);
System.err.println(userById);
sqlSession.close();
}
  • 1.2-查询 "一个" List集合

/**
* 查询所有用户信息
* @return
*/
List<User> getUserList();
<!--List<User> getUserList();-->
<select id="getUserList" resultType="User">
select * from t_user
</select>
@Test
public void testGetAllUser(){
SqlSession sqlSession = SqlSessionUtils.getSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<User> userById = mapper.getAllUser();
for (User u:userById) {
System.err.println(u);
}
sqlSession.close();
}
  • 1.3-查询"(表的数据个数)" --> ("表"有多少条数据)

/**
* 查询用户的总记录数
* @return
* 在MyBatis中,对于Java中常用的类型都设置了类型别名
* 例如:java.lang.Integer-->int|integer
* 例如:int-->_int|_integer
* 例如:Map-->map,List-->list
*/
int getCount();
<!--int getCount();-->
<select id="getCount" resultType="_integer">
select count(id) from t_user
</select>
@Test
public void testCount() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Integer count = mapper.getCount();
System.err.println(count);
}
  • 1.4-查询 "一条数据" 为 "map集合":

(用 "Map集合" 来接收 "表的数据",以"字段为Key,字段的值为Vaule")

/**
* 根据用户id查询用户信息为map集合
* @param id
* @return
*/
Map<String, Object> getUserToMap(@Param("id") int id);
<!--Map<String, Object> getUserToMap(@Param("id") int id);-->
<select id="getUserToMap" resultType="map">
select * from t_user where id = #{id}
</select>
<!--结果:{password=123456, sex=男, id=1, age=23, username=admin}-->
 @Test
public void testGetUserToMap() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> userToMap = mapper.getUserToMap(3);
System.err.println(userToMap);
}
  • 1.5-查询 "多条数据" 为map集合("两种方法")

  • 1.5.1- 方法一:List<Map<String, Object>>

/**
* 查询所有用户信息为map集合
* @return
* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取
*/
List<Map<String, Object>> getAllUserToMap();
<!--Map<String, Object> getAllUserToMap();-->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
<!--
结果:
[{password=123456, sex=男, id=1, age=23, username=admin},
{password=123456, sex=男, id=2, age=23, username=张三},
{password=123456, sex=男, id=3, age=23, username=张三}]
-->
@Test
public void testGetAllUserToMap() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<Map<String, Object>> allUserToMap = mapper.getAllUserToMap();
System.err.println(allUserToMap);
}
  • 1.5.2-方法二:@MapKey("id")

/**
* 查询所有用户信息为map集合
* @return
* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合
*/
@MapKey("id")
Map<String, Object> getAllUserToMap2();
<!--Map<String, Object> getAllUserToMap2();-->
<select id="getAllUserToMap2" resultType="map">
select * from t_user
</select>
<!--
结果:
{
1={password=123456, sex=男, id=1, age=23, username=admin},
2={password=123456, sex=男, id=2, age=23, username=张三},
3={password=123456, sex=男, id=3, age=23, username=张三}
}
-->
@Test
public void testGetAllUserToMap2() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> allUserToMap = mapper.getAllUserToMap2();
System.err.println(allUserToMap);
}

2-特殊SQL的执行:

  • 2.1-模糊查询

/**
* 根据用户名进行模糊查询
* @param username
* @return java.util.List<com.atguigu.mybatis.pojo.User>
* @date 2022/2/26 21:56
*/
List<User> getUserByLike(@Param("username") String username);
 <!--    List<User> getUserByLike(@Param("username") String username);-->
<select id="getUserByLike" resultType="User">
<!--select * from t_user where username like '%${username}%'-->
<!--select * from t_user where username like concat('%',#{username},'%')-->
select * from t_user where username like "%"#{username}"%" //这个最经常用
</select>
@Test
public void testGetAllUserToMap2() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
List<User> a = mapper.getUserByLike("a");
System.err.println(a);
}
  • 2.2-批量删除:

细节点:
*只能使用${},不能使用#{} 因为:
${}:delete from t_user where id in (1,2,3)
#{}:delete from t_user where id in ('1,2,3') //不行 原因:#{}在MyBatis会自动生成 ' ' 号。
/**
* 根据id批量删除
* @param ids
* @return int
* @date 2022/2/26 22:06
*/
int deleteMore(@Param("ids") String ids);
<delete id="deleteMore">
delete from t_user where id in (${ids})
</delete>
//测试类
@Test
public void deleteMore() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
int result = mapper.deleteMore("1,2,3,8");
System.out.println(result);
}
  • 2.3-动态设置表名:

连接了"数据库",但是有很多"表"需要查询,就可以 "动态设置表名"

细节:
只能使用${},因为 "表名" 不能加单引号
/**
* 查询指定表中的数据
* @param tableName
* @return java.util.List<com.atguigu.mybatis.pojo.User>
* @date 2022/2/27 14:41
*/
List<User> getUserByTable(@Param("tableName") String tableName);
<!--List<User> getUserByTable(@Param("tableName") String tableName);-->
<select id="getUserByTable" resultType="User">
select * from ${tableName}
</select>
@Test
public void getUserByTable() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
List<User> userByTable = mapper.getUserByTable("t_user");
System.out.println(userByTable);
}
  • 2.4-添加功能获取自增的主键

理解:在 "添加一条信息后,可以返回这个信息在表中的id值"

使用场景:
t_clazz(clazz_id,clazz_name)
t_student(student_id,student_name,clazz_id) 添加班级信息
获取新添加的班级的id
为班级分配学生,即将某学的班级id修改为新添加的班级的id
/**
* 添加用户信息
* @param user
* @date 2022/2/27 15:04
*/
void insertUser(User user);
注意点:
1-useGeneratedKeys:设置使用自增的主键 2-keyProperty:因为增删改有统一的返回值是受影响的行数,
因此只能将获取的自增的主键放在传输的参数user对象的某个属性中 <!--void insertUser(User user);
useGeneratedKeys:设置使用自增的主键
keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参数user对象的某个属性中
--> <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
insert into t_user values (null,#{username},#{password},#{age},#{sex},#{email})
</insert>
//测试类
@Test
public void insertUser() {
SqlSession sqlSession = SqlSessionUtils.getSession();
SqlMapper mapper = sqlSession.getMapper(SqlMapper.class);
User user = new User(null, "ton", "123", 23, "男", "123@321.com");
mapper.insertUser(user);
System.out.println(user);
//输出:user{id=10, username='ton', password='123', age=23, sex='男', email='123@321.com'},自增主键存放到了user的id属性中
}

MyBatis_05(各种查询功能)的更多相关文章

  1. 通过维基API实现维基百科查询功能

    通过英文维基的免费API,可以实现对维基百科的搜索查询或者标题全文查询等,尝试了一下通过title实现全文查询,返回的结果是wikitext格式,暂时不知道该如何应用,所以仅实现了查询功能,可以返回最 ...

  2. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  3. MySQL 5.5开启慢查询功能

    vim /etc/my.cnf [mysqld] slow-query-log = on # 开启慢查询功能 slow_query_log_file = /usr/local/mysql/data/s ...

  4. ASP.NET MVC系列:为视图添加查询功能

    首先,在MoviesController里添加一个查询方法,代码如下 public ActionResult SearchIndex(string title) { //查询数据库中的电影表 var ...

  5. 完善ext.grid.panel中的查询功能(紧接上一篇)

    今天的代码主要是实现,Ext.grid.panel中的查询,其实我也是一名extjs新手,开始想的实现方式是另外再创建一个新的grid类来存放查询出的数据(就是有几个分类查询就创建几个grid类),这 ...

  6. 033医疗项目-模块三:药品供应商目录模块——供货商药品目录t添加查询功能----------Dao层和Service层和Action层和调试

    什么叫做供货商药品目录t添加查询功能?就是说我们前面的博客里面不是说供货商登录后看到了自己供应的药品了么如下: 现在供货商想要往里面添加别的药品,那么这个药品的来源就是卫生局提供的那个Ypxx表(药品 ...

  7. [Architecture Pattern] Repository实作查询功能

    [Architecture Pattern] Repository实作查询功能 范例下载 范例程序代码:点此下载 问题情景 在系统的BLL与DAL之间,加入Repository Pattern的设计, ...

  8. RPM软件包管理的查询功能

    以后大家升级rpm包的时候,不要用Uvh了! 我推荐用Fvh 前者会把没有安装过得包也给装上,后者只会更新已经安装的包   总结:未安装的加上小写p,已安装的不需要加p   查询q    rpm {- ...

  9. 实现带查询功能的Combox控件

    前言 ComBox 还可以实现查询功能,通过设置 ComBox 控件的 AutoCompleteSource 属性和 AutoCompleteMode 属性,可以实现从 Combox 控件中查询已存在 ...

  10. ASP.NET MVC 学习4、Controller中添加SearchIndex页面,实现简单的查询功能

    参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-method ...

随机推荐

  1. 微信小程序【关于地址信息的接入以及自动选择当前位置】

    在做收货地址的时候,通常会让用户填写或者打开地图选择收获地址,此时就需要用到微信提供的地址API,在使用地址API的时候需要注册对应的API,而且地址API会经常调整,需要关注官方公告,下面就是关于地 ...

  2. 2.11-12 滴水new-delete-vector(动态数组编写)

    去长沙玩了几天,没学 1.new 与 delete 通过调用分析了解到new在堆区开辟数据 delete就是释放数据 案例 #include<stdio.h> #include <m ...

  3. [SHOI2006]仙人掌

    [SHOI2006]仙人掌 简要解析 其实很简单 只要普通树形 \(dp\) 就行了 \(f_x\) 表示 \(x\) 能向下延深的最大距离,\(v\) 是 \(x\) 的儿子 当一个点不属于任何环时 ...

  4. Ubuntu20.04获取root权限并用root用户登录

    Ubuntu20.04获取root权限并用root用户登录 转载csdn:静水流深深深! https://blog.csdn.net/qq_42372079/article/details/11758 ...

  5. Hbase一:Hbase介绍及特点

    转载请注明出处: 1.Google的三篇论文 2003年,Google发布Google File System论文,(GFS)这是一个可扩展的分布 式文件系统,用于大型的.分布式的.对大量数据进行访问 ...

  6. 四,redis6版本的使用部署

    继第三章(https://www.cnblogs.com/123456likun/p/13841540.html) 官网发布最新的6版本,有新的数据类型出现,给了小编我极大的动力,决定写几张关于最新的 ...

  7. 麒麟v10系统安Influxdb2.0教程

    1.下载安装包:wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.1.1-linux-amd64.tar.gz 2.解压 tar ...

  8. plesk 关闭维护模式

    最近遇到访问plesk时出现maintanase mode模式,于是网上搜了答案都是老外的,且没有明确怎么解决,但可能造成这一问题的原因也很多,我这个是这么解决的,和大家分享下,希望可以起到一个思路引 ...

  9. vscode格式化

    1.tslint    TypeScript的格式化 2.esLint 3.prettier 4.vetur    格式化html,css,vue

  10. lbaas

    目录 - LBaaS v2 - 负载均衡概念 - 服务器池 Pool - 监听器 Listener - L7 转发策略 l7 policy - 负载均衡算法 Algorithms - 健康监测 Mon ...