昨天分享失敗的經驗加上程式碼沒有註解,但今天我已經試成功了,而且是很蠢的錯誤,另外也試了一下generatekey的語法,今天只對Alarm.xml insert部份以及getAll已經是成功的部份跟大家分享並加上一些註解,另外個人MyBatis的確蠻適合小型應用的,設定簡單不會很複雜,目前官網部分還有http://www.mybatis.org/core/configuration.html#typeHandlers,typeHandler還不知道用在哪,明天有時間將開始研究Dynamic SQLhttp://www.mybatis.org/core/dynamic-sql.html。
Note:不知道主辦單位可不可以發給我紀念衫,如果我有堅持到底的話.....
Alaram.xml
<?xml version="1.0" encoding="UTF-8"?>
<mapper namespace="Alarm">//mapper是連結javabean與資料庫互動的設定檔,包括欄位的mapping,查詢等
//namespace當專案多的時候再研究吧.....
<resultMap id="result" type="Alarm"> //ResultMap就是像是ResultSet只是設定預先設定在XML裡而已...個人感覺
<result property="id" column="id"/> //property指的是在javabean裡的屬性,而column就是在資料表的欄名
<result property="aid" column="alarmid"/>
<result property="refid" column="refid"/>
<result property="des" column="description"/>
<result property="state" column="state"/>
<result property="sys" column="system"/>
</resultMap>
<select id="getAll" resultMap="result"> //每一個查詢都要指定id,直接指定id呼叫,DAO程式碼會很簡化。
SELECT * FROM Alarm //resultMap就是要指定要在哪裡個resultMap執行sql
</select> //另外基本上可以有n的查詢只要id不一樣就可以了。
<insert id="insert" parameterType="Alarm" useGeneratedKeys="true" keyProperty="id">
//useGeneratedKeys屬性設定為true代表有自動遞增的欄位,而名稱就在keyProperty中設定
//parameterType代表傳入的參數型態,可以是int, 可以是String,看適用場合(get某一欄等)
INSERT INTO Alarm (refid, alarmid, description, state, system)
VALUES (#{refid}, #{aid}, #{des}, #{state}, #{sys}) //取值的語法是#{變數名稱},也就是上面的property變數
</insert>
</mapper>
AlarmDAO.java
package dao.Alarm;
import java.util.Iterator;
import java.util.List;
import mybatis.MyBatisConnFactory;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import read.GetDataFromFile;
import alarm.Alarm;
public class AlarmDAO {
private SqlSessionFactory ssessfactory;
public AlarmDAO(){
ssessfactory = MyBatisConnFactory.getSsessfactory(); //建立SqlSessionFacotry
}
public List<Alarm> listAll(){
SqlSession session = ssessfactory.openSession();//當然第一步就是取得session
try{
List<Alarm> alist= session.selectList("Alarm.getAll");//Alarm旨的是namespace,而.getAll指的是id
return alist;
}finally{
session.close(); //關閉session
}
}
public void insert(){
SqlSession session = ssessfactory.openSession();
try {
GetDataFromFile gf= new GetDataFromFile();
List<Alarm> alist =gf.readFromExcel();
Iterator<Alarm> it=alist.iterator();
while(it.hasNext()){
session.insert("Alarm.insert", it.next()); //呼叫inert把Alarm物件依次寫入DB
session.commit();
}
} finally {
session.close();
}
}
}
MySQL截圖:(830筆是正確的)
Excel截圖