<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 表字段名與實體類屬性名不同的解決方案 在實際開發過程中,表中的字段名和表對應實體類的屬性名稱不一定都是完全相同的。 ## 一、創建訂單表,并插入數據 ~~~ CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('aaaa', 23); INSERT INTO orders(order_no, order_price) VALUES('bbbb', 33); INSERT INTO orders(order_no, order_price) VALUES('cccc', 22); ~~~ ## 二、定義實體類 ~~~ package com.ntqingniao.mybatis.entity; /** * 定義orders表對應的實體類 * * @author CUI * */ public class Order { // Order實體類中屬性名和orders表中的字段名是不一樣的 private int id; // id===>order_id private String orderNo; // orderNo===>order_no private float price; // price===>order_price public int getId() { return id; } public void setId(int id) { this.id = id; } public String getOrderNo() { return orderNo; } public void setOrderNo(String orderNo) { this.orderNo = orderNo; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override public String toString() { return "Order [id=" + id + ", orderNo=" + orderNo + ", price=" + price + "]"; } } ~~~ ## 三、編寫 SQL 的 xml 映射文件 ### 1、定義 sql 映射的接口 OrderMapper 接口的代碼如下: ~~~ package com.ntqingniao.mybatis.mapping; import com.ntqingniao.mybatis.entity.Order; public interface OrderMapper { /** * 根據id查詢得到一個order對象 * * @param id * @return Order */ public Order getOrderById(int id); /** * 根據id查詢得到一個order對象(SQL查詢語句采用別名) * * @param id * @return Order */ public Order selectOrder(int id); /** * 根據id查詢得到一個order對象(采用resultMap進行配置) * * @param id * @return Order */ public Order selectOrderResultMap(int id); } ~~~ ### 2、創建 orderMapper.xml 文件 orderMapper.xml 的內容如下: ~~~ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的 例如namespace="com.ntqingniao.mybatis.mapping.orderMapper"就是com.ntqingniao.mybatis.mapping(包名)+orderMapper(OrderMapper.java文件去除后綴) --> <mapper namespace="com.ntqingniao.mybatis.mapping.OrderMapper"> <!-- 根據id查詢得到一個order對象,使用這個查詢是查詢不到我們想要的結果的, 這主要是因為實體類的屬性名和數據庫的字段名對應不上的原因,因此無法查詢出對應的記錄 --> <select id="getOrderById" parameterType="int" resultType="com.ntqingniao.mybatis.entity.Order"> select * from orders where order_id=#{id} </select> <!-- 方法一 --> <!-- 根據id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結果的, 這是因為我們查詢的字段名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結果中的字段名就可以一一對應上 --> <select id="selectOrder" parameterType="int" resultType="com.ntqingniao.mybatis.entity.Order"> select order_id id, order_no orderNo,order_price price from orders where order_id=#{id} </select> <!-- 根據id查詢得到一個order對象,使用這個查詢是可以正常查詢到我們想要的結果的, 這是因為我們通過<resultMap>映射實體類屬性名和表的字段名一一對應關系 --> <select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap"> select * from orders where order_id=#{id} </select> <!-- 方法二 --> <!--通過<resultMap>映射實體類屬性名和表的字段名對應關系 --> <resultMap type="com.ntqingniao.mybatis.entity.Order" id="orderResultMap"> <!-- 用id屬性來映射主鍵字段 --> <id property="id" column="order_id" /> <!-- 用result屬性來映射非主鍵字段 --> <result property="orderNo" column="order_no" /> <result property="price" column="order_price" /> </resultMap> </mapper> ~~~ ### 3、在 conf.xml 文件中添加 orderMapper.xml 映射文件 ~~~ <mappers> <!-- 注冊orderMapper.xml文件, orderMapper.xml位于com.ntqingniao.mybatis.mapping這個包下,所以resource寫成com/ntqingniao/mybatis/mapping/orderMapper.xml--> <mapper resource="com/ntqingniao/mybatis/mapping/orderMapper.xml"/> </mappers> ~~~ ### 4、測試代碼 測試類代碼如下: ~~~ package com.ntqingniao.mybatis.test; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.ntqingniao.mybatis.entity.Order; import com.ntqingniao.mybatis.entity.User; import com.ntqingniao.mybatis.mapping.OrderMapper; import com.ntqingniao.mybatis.mapping.UserMapper; public class Test1 { public static void main(String[] args) { // mybatis的配置文件 String resource = "conf.xml"; // 使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件) InputStream is = Test.class.getClassLoader().getResourceAsStream( resource); // 構建sqlSession的工廠 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(is); // 使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關聯的映射文件) // Reader reader = Resources.getResourceAsReader(resource); // 構建sqlSession的工廠 // SqlSessionFactory sessionFactory = new // SqlSessionFactoryBuilder().build(reader); // 創建能執行映射文件中sql的sqlSession SqlSession session = sessionFactory.openSession(); // 通過getMapper()方法獲取UserMapper接口 OrderMapper orderMapper = session.getMapper(OrderMapper.class); Order order = new Order(); // 查詢orders表中id為1的記錄,執行查詢操作,將查詢結果自動封裝成Order返回 order = orderMapper.getOrderById(1); // 打印結果:null,也就是沒有查詢出相應的記錄 System.out.println(order); // 執行查詢操作,將查詢結果自動封裝成Order返回(SQL查詢語句采用別名) order = orderMapper.selectOrder(1); // 打印結果:Order [id=1, orderNo=aaaa, price=23.0] System.out.println(order); // 執行查詢操作,將查詢結果自動封裝成Order返回(采用resultMap進行配置) order = orderMapper.selectOrderResultMap(1); // 打印結果:Order [id=1, orderNo=aaaa, price=23.0] System.out.println(order); // 使用SqlSession執行完SQL之后需要關閉SqlSession session.close(); } } ~~~ > 測試結果: > 1、getOrderById() 方法執行查詢后返回一個 null。 > 2、selectOrder() 方法和 selectOrderResultMap() 方法執行查詢后,可以正常得到想要的結果。 ## 四、總結 當實體類中的屬性名和表中的字段名不一致時,使用 MyBatis 進行查詢操作時無法查詢出相應的結果的問題以及針對問題采用的兩種辦法: > 解決辦法一: 通過在查詢的 sql 語句中定義字段名的別名,讓字段名的別名和實體類的屬性名一致,這樣就可以表的字段名和實體類的屬性名一一對應上了,這種方式是通過在 sql 語句中定義別名來解決字段名和屬性名的映射關系的。 > > 解決辦法二: 通過`<resultMap>`來映射字段名和實體類屬性名的一一對應關系。這種方式是使用MyBatis提供的解決方式來解決字段名和屬性名的映射關系的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看