java連接數據庫方式(二):單獨使用MyBatis 框架實現

作者的個人分享網:分享時刻【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>

項目目錄結構:

這裏寫圖片描述

發佈了43 篇原創文章 · 獲贊 86 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章