• Java框架 MyBatis的各种查询功能


    0.准备工作

    pojo类:

    1. /**
    2. * 和数据库表 t_user 对应的实体类
    3. */
    4. public class User {
    5. private Integer id;
    6. private String username;
    7. private String password;
    8. private Integer age;
    9. private String gender;
    10. private String email;
    11. public User() {
    12. }
    13. public User(Integer id, String username, String password, Integer age, String gender, String email) {
    14. this.id = id;
    15. this.username = username;
    16. this.password = password;
    17. this.age = age;
    18. this.gender = gender;
    19. this.email = email;
    20. }
    21. public Integer getId() {
    22. return id;
    23. }
    24. public void setId(Integer id) {
    25. this.id = id;
    26. }
    27. public String getUsername() {
    28. return username;
    29. }
    30. public void setUsername(String username) {
    31. this.username = username;
    32. }
    33. public String getPassword() {
    34. return password;
    35. }
    36. public void setPassword(String password) {
    37. this.password = password;
    38. }
    39. public Integer getAge() {
    40. return age;
    41. }
    42. public void setAge(Integer age) {
    43. this.age = age;
    44. }
    45. public String getGender() {
    46. return gender;
    47. }
    48. public void setGender(String gender) {
    49. this.gender = gender;
    50. }
    51. public String getEmail() {
    52. return email;
    53. }
    54. public void setEmail(String email) {
    55. this.email = email;
    56. }
    57. @Override
    58. public String toString() {
    59. return "User{" +
    60. "id=" + id +
    61. ", username='" + username + '\'' +
    62. ", password='" + password + '\'' +
    63. ", age=" + age +
    64. ", gender='" + gender + '\'' +
    65. ", email='" + email + '\'' +
    66. '}';
    67. }
    68. }

    工具类:

    1. package com.chenyixin.ssm.utils;
    2. import org.apache.ibatis.io.Resources;
    3. import org.apache.ibatis.session.SqlSession;
    4. import org.apache.ibatis.session.SqlSessionFactory;
    5. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    6. import java.io.InputStream;
    7. public class SqlSessionUtil {
    8. public static SqlSession getSqlSession() {
    9. try {
    10. // 获取核心的配置文件
    11. InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    12. // 创建 SqlSessionFactoryBuilder 对象
    13. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    14. // 通过核心配置文件多对应的字节输入流创建工厂类 SqlSessionFactory ,生产 SqlSession 对象
    15. SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
    16. // 创建 SqlSession 对象(自动操作事务)
    17. return sqlSessionFactory.openSession(true);
    18. } catch (Exception e) {
    19. throw new RuntimeException(e);
    20. }
    21. }
    22. }
    mybatis-config.xml:
    
    1. configuration
    2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
    4. <configuration>
    5. <properties resource="jdbc.properties"/>
    6. <typeAliases>
    7. <package name="com.chenyixin.ssm.pojo"/>
    8. typeAliases>
    9. <environments default="development">
    10. <environment id="development">
    11. <transactionManager type="JDBC"/>
    12. <dataSource type="POOLED">
    13. <property name="driver" value="${jdbc.driver}"/>
    14. <property name="url" value="${jdbc.url}"/>
    15. <property name="username" value="${jdbc.username}"/>
    16. <property name="password" value="${jdbc.password}"/>
    17. dataSource>
    18. environment>
    19. environments>
    20. <mappers>
    21. <package name="com.chenyixin.ssm.mapper"/>
    22. mappers>
    23. configuration>

    数据库中的数据:

     

    1、查询一个实体类对象

    接口:

    1. public interface SelectMapper {
    2. /**
    3. * 根据 id 获取用户信息
    4. * @param id 要查询的id
    5. * @return 返回查询到的用户信息
    6. */
    7. User getUserById(@Param("id") Integer id);
    8. }

    配置文件:

    1. mapper
    2. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    4. <mapper namespace="com.chenyixin.ssm.mapper.SelectMapper">
    5. <select id="getUserById" resultType="user">
    6. select *
    7. from t_user
    8. where id = #{id};
    9. select>
    10. mapper>

    测试类:

    1. public class SelectMapperTest {
    2. SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    3. SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
    4. @Test
    5. public void getUserById() {
    6. User user = mapper.getUserById(3);
    7. System.out.println(user);
    8. // User{id=3, username='李四', password='123', age=19, gender='男', email='123456@qq.com'}
    9. }
    10. }

    2、查询一个list集合

    SelectMapper 接口:

    1. /**
    2. * 查询所有用户信息
    3. * @return 返回所有用户信息的 list 集合
    4. */
    5. List getAllUser();

    SelectMapper.xml配置文件:

    1. <select id="getAllUser" resultType="user">
    2. select * from t_user
    3. select>

    测试:

    1. @Test
    2. public void getAllUser() {
    3. List allUser = mapper.getAllUser();
    4. allUser.forEach(System.out::println);
    5. // User{id=1, username='张三', password='123456', age=19, gender='男', email='123456@qq.com'}
    6. // User{id=3, username='李四', password='123', age=19, gender='男', email='123456@qq.com'}
    7. // User{id=13, username='王五', password='321', age=23, gender='女', email='321@qq.com'}
    8. }

    注意:

    若 sql 语句查询的结果为多条时,一定不能以实体类类型作为方法的返回值,否则会抛出异常

            TooManyResultsException

    若 sql 语句查询的结果为 1 时,此时可以使用实体类类型或 list 集合类型作为方法的返回值

    3、查询单个数据

    SelectMapper 接口:

    1. /**
    2. * 查询用户信息的总记录数
    3. * @return 返回总记录数值
    4. */
    5. Integer getCount();

    SelectMapper.xml配置文件:

    1. <select id="getCount" resultType="Integer">
    2. select count(*) from t_user
    3. select>

    测试:

    1. @Test
    2. public void getCount() {
    3. Integer count = mapper.getCount();
    4. System.out.println(count); //3
    5. }

    4、查询一条数据为map集合

    SelectMapper 接口:

    1. /**
    2. * 根据 id 查询用户信息,并存储到 map 集合中
    3. * @param id 要查询的id
    4. * @return 返回查询到的用户信息,用 map 集合存储
    5. */
    6. Map getUserByIdToMap(@Param("id") Integer id);

    SelectMapper.xml配置文件:

    1. <select id="getUserByIdToMap" resultType="map">
    2. select *
    3. from t_user
    4. where id = #{id};
    5. select>

    测试:

    1. @Test
    2. public void getUserByIdToMap() {
    3. Map user1 = mapper.getUserByIdToMap(3);
    4. Map user2 = mapper.getUserByIdToMap(14);
    5. System.out.println(user1);
    6. // {password=123, gender=男, id=3, age=19, email=123456@qq.com, username=李四}
    7. System.out.println(user2);
    8. // {password=123456, gender=男, id=14, username=赵六}
    9. }

    注意:

    1、map 中的数据是无序的

    2、若查询到的字段值为 null ,则在 map 中不保存

    5、查询多条数据为map集合

    查询所有的用户信息为 map 集合

    若查询的数据有多条时,并且要将每一条数据转化为 map 集合

            此时有两种解决方案:

            1、经 mapper 接口方法的返回值设置为泛型是 map 的 list 集合

            2、可以将查询到的每条数据转换的 map 集合放在一个大的 map 集合中,但是必须要通过 @MapKey 注解将查询到的某个字段的值作为大的 map 集合的键

    代码示例:

    SelectMapper 接口:

    1. /**
    2. * 查询所有用户信息为map集合
    3. * @return
    4. * 将表中的数据以map集合的方式查询,一条数据对应一个map;
    5. * 若有多条数据,就会产生多个map集合,此时可以将这些map放在一个list集合中获取
    6. */
    7. List> getAllUserToMap1();
    8. /**
    9. * 查询所有用户信息为map集合
    10. * @return
    11. * 将表中的数据以map集合的方式查询,一条数据对应一个map;
    12. * 若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,
    13. * 此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合
    14. */
    15. @MapKey("id")
    16. Map getAllUserToMap2();

    SelectMapper.xml配置文件:

    1. <select id="getAllUserToMap1" resultType="map">
    2. select * from t_user
    3. select>
    4. <select id="getAllUserToMap2" resultType="map">
    5. select * from t_user
    6. select>

    测试:

    1. @Test
    2. public void getAllUserToMap1() {
    3. List> list = mapper.getAllUserToMap1();
    4. list.forEach(System.out::println);
    5. // {password=123456, gender=男, id=1, age=19, email=123456@qq.com, username=张三}
    6. // {password=123, gender=男, id=3, age=19, email=123456@qq.com, username=李四}
    7. // {password=321, gender=女, id=13, age=23, email=321@qq.com, username=王五}
    8. // {password=123456, gender=男, id=14, username=赵六}
    9. }
    10. @Test
    11. public void getAllUserToMap2() {
    12. Map map = mapper.getAllUserToMap2();
    13. for (Map.Entry entry : map.entrySet()) {
    14. System.out.println(entry);
    15. }
    16. // 1={password=123456, gender=男, id=1, age=19, email=123456@qq.com, username=张三}
    17. // 3={password=123, gender=男, id=3, age=19, email=123456@qq.com, username=李四}
    18. // 13={password=321, gender=女, id=13, age=23, email=321@qq.com, username=王五}
    19. // 14={password=123456, gender=男, id=14, username=赵六}
    20. }

  • 相关阅读:
    [附源码]Python计算机毕业设计Django-Steam游戏平台系统论文
    Linux常用用户管理用到的指令
    C++ 结构体
    Ubuntu镜像源cn.arichinve.ubuntu.com不可用原因分析和解决
    基于DJYOS的SPI驱动编写指导手册
    计算机毕业设计ssm基于vuejs的二手车交易平台ue120系统+程序+源码+lw+远程部署
    odoo 开发入门教程系列-安全-简介
    浅析AI视频智能分析系统人脸检测算法的应用与特点
    支持 equals 相等的对象(可重复对象)作为 WeakHashMap 的 Key
    Python基础教程:print输出带颜色的方法详解
  • 原文地址:https://blog.csdn.net/weixin_65637841/article/details/126302689