作者的個人分享網:分享時刻【www.itison.cn】
在沒有與spring 框架集成之前,MyBatis 並沒有體現出它的強大,但是比起傳統的JDBC還是有所優勢的。(但是建議只用於學習mybatis)
1. MyBatis 本是apache的一個開源項目iBatis, 2010年這個項目由apache software foundation遷移到了google code,並且改名爲MyBatis 。2013年11月遷移到Github。
2. MyBatis 提供了動態sql語句
3. MyBatis 底層封裝了JDBC,主要的功能就是實現數據庫連接。支持定製化 SQL、存儲過程以及高級映射, 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。
MyBatis 實現數據的連接,需要幾個步驟:
首先封裝個BaseMapper.java,相當於傳統JDBC中的BaseDao.java
package com.meetingroom.mapper;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
* MyBatis 的BaseDao
* @author LIU
* @version 1.0 2017-10-19
*/
public class BaseMapper {
/**
* 獲取session
*TODO
*LIU
* @param path
* @return
*下午11:31:35
*/
public SqlSession getSession(String path){
Reader reader = null;
SqlSession session = null;
try {
reader = Resources.getResourceAsReader(path);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
session = factory.openSession();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return session;
}
}
接着再編寫對應的映射文件:MeetingMapper.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="com.meetingroom.mapper.MeetingMapper">
<select id="getAllCounts" resultType="int">
select count(id)
from meeting
</select>
<select id="showAll" parameterType="com.meetingroom.bean.Page" resultType="com.meetingroom.bean.Meeting">
select id,meeting_name as meetingName,meeting_order as meetingOrder,advance_name as advanceName
from meeting order by meeting_order desc
limit #{start},#{currCount}
</select>
<insert id="addMeeting" parameterType="com.meetingroom.bean.Meeting" >
insert into meeting(meeting_name,meeting_order,advance_name)
values(#{meetingName},#{meetingOrder},#{advanceName})
</insert>
</mapper>
往下是數據映射實現類:MeetingMapper.java
查詢方法要與映射的id對應上,操作完成後必須要關閉session
package com.meetingroom.mapper.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.meetingroom.bean.Meeting;
import com.meetingroom.bean.Page;
import com.meetingroom.mapper.BaseMapper;
import com.meetingroom.mapper.MeetingMapper;
/**
* 會議室數據映射實現
* @author LIU
* @version 1.0 2017-10-24
*/
public class MeetingMapperImpl extends BaseMapper implements MeetingMapper {
/**
* 配置文件路徑
*/
String path = "mybatis.xml";
/**
* 獲取所有記錄數
*TODO
*LIU
* @return
*下午4:05:04
*/
@Override
public int getAllCounts() {
// TODO Auto-generated method stub
int result = 0;
SqlSession session = null;
try {
session = getSession(path);
result = session.selectOne("com.meetingroom.mapper.MeetingMapper.getAllCounts");
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return result;
}
/**
* 顯示所有會議室信息
*TODO
*LIU
* @return
*下午4:05:43
*/
@Override
public List<Meeting> showAll(Page page) {
// TODO Auto-generated method stub
List<Meeting> meetingList = null;
SqlSession session = null;
try {
session = getSession(path);
meetingList = session.selectList("com.meetingroom.mapper.MeetingMapper.showAll", page);
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return meetingList;
}
/**
* 增加會議室信息
*TODO
*LIU
* @param meeting
* @return
*下午4:06:47
*/
@Override
public int addMeeting(Meeting meeting) {
// TODO Auto-generated method stub
int result = 0;
SqlSession session = null;
try {
session = getSession(path);
result = session.insert("com.meetingroom.mapper.MeetingMapper.addMeeting", meeting);
session.commit();
} catch (Exception e) {
session.rollback();
e.printStackTrace();
}finally{
session.close();
}
return result;
}
}
最後寫mybatis.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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///meetingroom"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/meetingroom/mapper/MeetingMapper.xml"/>
</mappers>
</configuration>
項目目錄結構: