1. 程式人生 > >mybatis學習筆記(3)—資料庫和bean名稱不一樣處理方案

mybatis學習筆記(3)—資料庫和bean名稱不一樣處理方案

之前寫的mybatis物件的bean物件和資料庫的物件名稱是對應的,然而再實際開發的過程有很多不一一對應的情況。就需要解決。
bean物件:

package com.test.bean;
/*
 * javabean 物件
 */
public class order {
	  private int id;
	  private String no;
	  private float price;
	  public int getId() {
	        return id;
	    }

	    public void setId(int id) {
	        this
.id = id; } public String getOrderNo() { return no; } public void setOrderNo(String orderNo) { this.no = orderNo; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; }
@Override public String toString() { return "Order [id=" + id + ", orderNo=" + no + ", price=" + price+ "]"; } }

而mysql的物件為
在這裡插入圖片描述
再xml中的配置為:

<!-- 
        第一種方法
        根據id查詢得到一個order物件,使用這個查詢是可以正常查詢到我們想要的結果的,
         這是因為我們將查詢的欄位名都起一個和實體類屬性名相同的別名,這樣實體類的屬性名和查詢結果中的欄位名就可以一一對應上
   -->
<select id="getorderbyid2" parameterType="int" resultType="com.test.bean.order"> select order_id id,order_no no,order_price price from orders where order_id=#{id} </select> <select id="getorderbymap" parameterType="int" resultMap="orderResultMap"> select * from orders where order_id=#{id} </select> <resultMap type="com.test.bean.order" id="orderResultMap"> <!-- 用id屬性來對映主鍵欄位 --> <id property="id" column="order_id"/> <!-- 用result屬性來對映非主鍵欄位 --> <result property="no" column="order_no"/> <result property="price" column="order_price"/> </resultMap>

test例項(先封裝一下)

import java.io.InputStream;

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



public class returnsqlsession {
	public static SqlSessionFactory getSqlSessionFactory()
	{
		String resource="conf.xml";
		InputStream in=returnsqlsession.class.getClassLoader().getResourceAsStream(resource);
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
		return factory;
	}
	public static SqlSession getSqlSession(){//返回sqlsession
		return getSqlSessionFactory().openSession();	
	}
	 /**
	      * 獲取SqlSession
	      * @param isAutoCommit 
	      *         true 表示建立的SqlSession物件在執行完SQL之後會自動提交事務
	      *         false 表示建立的SqlSession物件在執行完SQL之後不會自動提交事務,這時就需要我們手動呼叫sqlSession.commit()提交事務
	      * @return SqlSession
	      */
	     public static SqlSession getSqlSession(boolean isAutoCommit) {
	         return getSqlSessionFactory().openSession(isAutoCommit);
	     }
}

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.test.bean.order;

public class test1 {
 
	public static void testselect1() throws IOException
	{
		SqlSession sqlsession=returnsqlsession.getsqlsession(true);
		//String statement="ordermapper.getorderbyid1";
		//String statement="ordermapper.getorderbyid2";
		String statement="ordermapper.getorderbymap";
		order order=sqlsession.selectOne(statement, 2);
	    sqlsession.close();
	    System.out.println(order);
	}

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
         testselect1();	
	}
}

兩種基本的解決方式,如果用到的較少,可以選擇第一種,如果用到較多較複雜,可以選擇第二種。