学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
文章目录
前言
一、MyBatis的各种查询功能
1、查询一个实体类对象
2、查询一个List集合
3、查询单个数据
4、查询一条数据为map集合
5、查询多条数据为map集合
1、方法一
2、方法二
二、特殊SQL的执行
1、模糊查询
2、批量删除
3、动态设置表名
4、添加功能获取自增的主键
一、MyBatis的各种查询功能
- 如果查询出的数据只有一条,可以通过
- 实体类对象接收
- List集合接收
- Map集合接收,结果
{password=123456, sex=男, id=1, age=23, username=admin}
- 如果查询出的数据有多条,一定不能用实体类对象接收,会抛异常TooManyResultsException,可以通过
- 实体类类型的LIst集合接收
- Map类型的LIst集合接收
- 在mapper接口的方法上添加@MapKey注解
1、查询一个实体类对象
/*** 根据用户id查询用户信息* @param id* @return*/UsergetUserById( ("id") intid);
<!--UsergetUserById( ("id") intid);--><selectid="getUserById"resultType="User">select*fromt_userwhereid=#{id} </select>
publicvoidtestGetUserById() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); UserMapperuserMapper=sqlSession.getMapper(UserMapper.class); Useruser=userMapper.getUserById(1); System.out.println(user); }
2、查询一个List集合
/*** 查询所有用户信息* @return*/List<User>getUserList();
<!--List<User>getUserList();--><selectid="getUserList"resultType="User">select*fromt_user</select>
publicvoidtestGetUserByList() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); UserMapperuserMapper=sqlSession.getMapper(UserMapper.class); List<User>list=userMapper.getUserList(); System.out.println(list); }
3、查询单个数据
/** * 查询用户的总记录数 * @return * 在MyBatis中,对于Java中常用的类型都设置了类型别名 * 例如:java.lang.Integer-->int|integer * 例如:int-->_int|_integer * 例如:Map-->map,List-->list */intgetCount();
<!--intgetCount();--><selectid="getCount"resultType="_integer">selectcount(id) fromt_user</select>
publicvoidtestGetUserByCount() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); UserMapperuserMapper=sqlSession.getMapper(UserMapper.class); intl=userMapper.getCount(); System.out.println(l); }
4、查询一条数据为map集合
/** * 根据用户id查询用户信息为map集合 * @param id * @return */Map<String, Object>getUserToMap( ("id") intid);
<!--Map<String, Object>getUserToMap( ("id") intid);--><selectid="getUserToMap"resultType="map">select*fromt_userwhereid=#{id} </select><!--结果:{password=123456, sex=男, id=1, age=23, username=admin}-->
publicvoidtestGetUserByToMap() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); UserMapperuserMapper=sqlSession.getMapper(UserMapper.class); Mapmap=userMapper.getUserToMap(1); System.out.println(map); }
5、查询多条数据为map集合
1、方法一
/** * 查询所有用户信息为map集合 * @return * 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取 */List<Map<String, Object>>getAllUserToMap();
<!--Map<String, Object>getAllUserToMap();--><selectid="getAllUserToMap"resultType="map">select*fromt_user</select>
publicvoidtestGetUserByAllToMap() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); UserMapperuserMapper=sqlSession.getMapper(UserMapper.class); List<Map<String, Object>>list=userMapper.getAllUserToMap(); System.out.println(list); }
2、方法二
/*** 查询所有用户信息为map集合* @return* 将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合*/"id") (Map<String, Object>getAllUserToMap2();
<!--Map<String, Object>getAllUserToMap();--><selectid="getAllUserToMap2"resultType="map">select*fromt_user</select>
publicvoidtestGetUserByAllToMap2() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); UserMapperuserMapper=sqlSession.getMapper(UserMapper.class); Map<String, Object>map=userMapper.getAllUserToMap2(); System.out.println(map); }
二、特殊SQL的执行
1、模糊查询
/*** 根据用户名进行模糊查询* @param username * @return java.util.List<com.atguigu.mybatis.pojo.User>*/List<User>getUserByLike( ("username") Stringusername);
<!--List<User>getUserByLike( ("username") Stringusername);--><selectid="getUserByLike"resultType="User"><!--select*fromt_userwhereusernamelike'%${mohu}%'--><!--select*fromt_userwhereusernamelikeconcat('%',#{mohu},'%')-->select*fromt_userwhereusernamelike"%"#{mohu}"%"</select>
- 其中
select * from t_user where username like "%"#{mohu}"%"
是最常用的
2、批量删除
- 只能使用${},如果使用#{},则解析后的sql语句为
delete from t_user where id in ('1,2,3')
,这样是将1,2,3
看做是一个整体,只有id为1,2,3
的数据会被删除。正确的语句应该是delete from t_user where id in (1,2,3)
,或者delete from t_user where id in ('1','2','3')
/*** 根据id批量删除* @param ids * @return int*/intdeleteMore( ("ids") Stringids);
<deleteid="deleteMore">deletefromt_userwhereidin (${ids}) </delete>
//测试类publicvoiddeleteMore() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); SQLMappermapper=sqlSession.getMapper(SQLMapper.class); intresult=mapper.deleteMore("1,2,3,8"); System.out.println(result); }
3、动态设置表名
- 只能使用${},因为表名不能加单引号
/*** 查询指定表中的数据* @param tableName * @return java.util.List<com.atguigu.mybatis.pojo.User>*/List<User>getUserByTable( ("tableName") StringtableName);
<!--List<User>getUserByTable( ("tableName") StringtableName);--><selectid="getUserByTable"resultType="User">select*from${tableName} </select>
4、添加功能获取自增的主键
- 使用场景
- t_clazz(clazz_id,clazz_name)
- t_student(student_id,student_name,clazz_id)
- 添加班级信息
- 获取新添加的班级的id
- 为班级分配学生,即将某学的班级id修改为新添加的班级的id
- 在mapper.xml中设置两个属性
- useGeneratedKeys:设置使用自增的主键
- keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参数user对象的某个属性中
/*** 添加用户信息* @param user */voidinsertUser(Useruser);
<!--voidinsertUser(Useruser);--><insertid="insertUser"useGeneratedKeys="true"keyProperty="id">insertintot_uservalues (null,#{username},#{password},#{age},#{sex},#{email}) </insert>
//测试类publicvoidinsertUser() { SqlSessionsqlSession=SqlSessionUtils.getSqlSession(); SQLMappermapper=sqlSession.getMapper(SQLMapper.class); Useruser=newUser(null, "ton", "123", 23, "男", "123@321.com"); mapper.insertUser(user); System.out.println(user); //输出:User(id=3, username=ton, password=123, age=23, sex=男, email=123@321.com),自增主键存放到了user的id属性中}
总结
以上就是Mybatis之Mybatis的各种查询功能和特殊SQL的执行的相关知识点,希望对你有所帮助。
积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!