mybatis學習筆記(3)—資料庫和bean名稱不一樣處理方案
阿新 • • 發佈:2018-11-12
之前寫的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();
}
}
兩種基本的解決方式,如果用到的較少,可以選擇第一種,如果用到較多較複雜,可以選擇第二種。