首頁 > 軟體

Mybatis實現ResultMap結果集

2022-04-15 13:00:11

ResultMap——解決屬性名和欄位名不一致的問題

資料庫中的欄位

新建一個專案,拷貝之前的,測試實體類欄位不一致的情況

1.新建一個module——mybatis-03

2.新建db.properties組態檔

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useEncoding=false&characterEncoding=UTF-8&serverTimezone=GMT
username=root
password=root

3.新建mybatis-config.xml組態檔

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <properties resource="db.properties"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/kuang/dao/UserMapper.xml"/>
    </mappers>
</configuration>

4.建立com.kuang.utils包,包下建立MybatisUtils工具類

package com.kuang.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

//sqlSessionFactory用來構建sqlSession
public class MybatisUtils {

    //提升SqlSessionFactory的作用域
    private static SqlSessionFactory sqlSessionFactory;

    static{
        try {
//            使用Mybatis第一步獲取sqlSessionFactory物件
            String resource = "mybatis-config.xml";
//            通過Resources讀取組態檔
            InputStream inputStream = Resources.getResourceAsStream(resource);
//          通過SqlSessionFactoryBuilder載入一個流,構建一個sqlSession工廠
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    //    既然有了 SqlSessionFactory,顧名思義,我們可以從中獲得 SqlSession 的範例。
//    SqlSession 提供了在資料庫執行 SQL 命令所需的所有方法。
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();

    }
}

5.建立com.kuang.pojo包,裡面儲存實體類物件User

package com.kuang.pojo;

public class User {
    private int id;
    private String name;
    private String password;

    public User(int id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", password='" + password + ''' +
                '}';
    }
}

6.建立com.kuang.dao包,裡面存放介面UserMapper以及介面實現類UserMapper.xml

UserMapper

package com.kuang.dao;

import com.kuang.pojo.User;

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

public interface UserMapper {
    
    //    根據使用者id查詢使用者資訊
    User getUserById(Integer id);

}

UserMapper.xml

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace=繫結一個對應的Dao/Mapper介面-->
<mapper namespace="com.kuang.dao.UserMapper">

    <select id="getUserById" resultType="com.kuang.pojo.User" parameterType="Integer">
        select * from user where id=#{id}
    </select>

</mapper>

7.建立測試類

package com.kuang.dao;

import com.kuang.pojo.User;
import com.kuang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

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

public class UserDaoTest {


    @Test
    public void testGetUserById(){
        //第一步:獲取SqlSession物件
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //執行Sql
//        方式一:getMapper(推薦使用)
        UserMapper userDao = sqlSession.getMapper(UserMapper.class);

        User user1 = userDao.getUserById(1);
        System.out.println(user1);


        //關閉sqlSession
        sqlSession.close();
    }
}

8測試結果及問題分析

8.1解決方案一:在sql查詢語句中為pwd欄位起別名起別名

將原sql語句

select id,name,pwd as password from user where id=#{id}

改為

select id,name,pwd as password from user where id=#{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->id}

8.2 resultMap 結果集對映

欄位名:id    name    pwd
屬性名:id    name    password

<!--結果集對映-->
<!--    id:對應下面的參照
        type:將結果集對映為什麼型別,我們需要對映為一個User物件
            result:代表它的結果
                column:資料表中的欄位名
                properties:物件中的屬性名
    -->
    <resultMap id="UserMap" type="com.kuang.pojo.User" >
        <result column="id" property="id"/>
        <result column="name" property="name" />
        <result column="pwd" property="password"/>
    </resultMap>
    <select id="getUserById" resultMap="UserMap" >
        select * from user where id=#{id}
    </select>

  • resultMap 元素是 MyBatis 中最重要最強大的元素
  • ResultMap 的設計思想是,對簡單的語句做到零設定,對於複雜一點的語句,只需要描述語句之間的關係就行了
  • ResultMap 的優秀之處——你完全可以不用顯式地設定它們

 到此這篇關於Mybatis實現ResultMap結果集的文章就介紹到這了,更多相關Mybatis ResultMap結果集內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com