天天看點

mybatis開發步驟

mybatis開發步驟

  1. 建立一個java web工程/可以使java工程;建立mybatis工程的java package包
  2. 把mybatis架構的jar包及其依賴包拷貝到項目工程中
  3. 編寫資料實體類,與資料庫表進行對應 - 為orm(對象映射關系)做準備
  4. .定義資料操作接口,并在接口中定義資料操作
  5. 編寫一個接口映射檔案,對接口的資料操作進行映射
  6. 編寫mybatis全局配置檔案,配置資料庫連接配接參數,配置映射檔案或資料操作接口...
  7. 編寫測試類,測試mybatis架構:4個步驟(擷取mybatis環境 --> 執行個體化資料操作接口 --> 調用接口方法 --> 處理操作結果)

使用mybatis架構的幾個階段

  •     1.基本應用:(熟練掌握)
  •         使用mybatis完成jdbc的增删查改操作,能夠進行對象映射和關系映射  
  •         開發步驟,工作流程,工作原理,基本操作
  •     2.熟練應用:(熟悉應用)
  •         使用mybatis簡化程式開發,進行複雜業務的開發
  •         配置優化,動态sql,其他複雜的映射
  •     3.優化應用:(了解)
  •         利用orm架構的緩存機制優化程式性能,對某些複雜業務能夠進行定制開發 

架構架構

mybatis開發步驟
mybatis開發步驟

全局配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<!-- 這是mybatis全局配置檔案,用于進行mybatis配置 -->
<!-- dtd:文檔類型定義,使用全局文檔類型定義限制,可以配置哪些标簽,每個标簽可以配置哪些屬性 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置mybatis的運作環境 -->
	<environments default="development">
		<environment id="development">
	      <!-- 配置事務管理器  -->
	      <transactionManager type="JDBC"/>
	      <!-- 配置jdbc的4個參數 -->
	      <dataSource type="POOLED">
	        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
	        <property name="url" value="jdbc:oracle:thin://localhost:1521/orcl"/>
	        <property name="username" value="trainUser"/>
	        <property name="password" value="123456"/>
	      </dataSource>
	    </environment>
	</environments>
	
	<mappers>
		<!-- 關聯mybatis的接口映射檔案 -->
		<mapper resource="com/neuedu/mybatisdemo/dao/ICourceDao.xml"/>
	</mappers>
</configuration>
           

局部配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<!-- mybatis接口映射檔案,用于映射接口操作,
	mybatis會根據配置檔案的配置實作資料庫的操作 -->
<!-- 注意:mybatis有兩個配置檔案,一個是全局配置檔案,一個接口映射檔案
	接口映射檔案需要使用接口文檔映射定義 -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<!-- 
在mapper映射檔案中,使用mapper便簽進行接口映射,使用namespace指定要映射的接口;
即namespace配置的是接口的名稱,一般的一個映射檔案實作(映射)一個接口,
在運作過程中,mybatis的代理類公會根據配置實作資料操作接口定義的資料庫操作(相當于由mybatis編寫了一個接口實作類)
-->
<mapper namespace="com.neuedu.mybatisdemo.dao.ICourceDao">
	<!-- resultMap用于配置查詢結果的映射關系 -->
	<resultMap type="com.neuedu.mybatisdemo.bean.Cource" id="courceMap">
		<!-- id用于配置資料庫的主鍵列或唯一鍵列 -->
		<!-- orm架構可以完成資料庫表的列與java類屬性的映射關系 
			 - object mapping對象映射,relation mapping關系映射 -->
		<id column="cource_id" property="courceId"/>
		<result column="cource_name" property="courceName"/>
		<result column="cource_score" property="courceScore"/>
		<result column="start_date" property="startDate"/>
	</resultMap>
	<!-- 在接口映射檔案中,使用select,insert,update,delete配置對應的sql腳本 -->
	<!-- 在以上标簽中,使用id配置接口的方法名稱,resultMap用于配置自定義的結果映射關系 -->
	<select id="findAll" resultMap="courceMap">
		select * from cource
	</select>
	<!-- 注意使用mybatis進行配置,id不能重名,即接口方法不能重載 -->
	<!-- 如果接口方法有參數,需要使用parameterType配置參數的類型(原始資料類型或對象類型),
		多個參數使用parameterMap進行配置(集合類型) 或 使用對象類型進行配置 -->
	<select id="findById" resultMap="courceMap" parameterType="String">
		<!-- 可以使用#{} 擷取參數值 -->
		select * from cource where cource_id = #{id}
	</select>
	<insert id="addCource" parameterType="com.neuedu.mybatisdemo.bean.Cource" >
		insert into cource(cource_id,cource_name,cource_score,start_date) 
		values(#{courceId},#{courceName},#{courceScore},sysdate)
	</insert>
	<update id="editCource" parameterType="com.neuedu.mybatisdemo.bean.Cource">
		update cource set 
		cource_name = #{courceName},cource_score = #{courceScore},start_date = sysdate
		where cource_id = #{courceId}
	</update>
	<!-- 某些情況下,parameterType可以省略 -->
	<delete id="deleteById" parameterType="String">
		<!-- 隻有一個參數時,參數名稱可以任意
		public void deleteById(String id);
		 -->
		delete from cource where cource_id = #{id}
	</delete>
</mapper>
           

測試類

package test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.neuedu.mybatisdemo.bean.Cource;
import com.neuedu.mybatisdemo.dao.ICourceDao;

public class TestICourceDao {

	private Logger logger = Logger.getLogger(TestICourceDao.class);
	private SqlSession session = null;
	
	@Before
	public void init(){
		try {
			//1.加載mybatis環境
			String resource = "config/mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			//2.通過mybatis執行個體化資料通路接口
			session = sqlSessionFactory.openSession();
			
		} catch (IOException e) {
			logger.warn("發生了異常!",e);
		}	
	}
	@After
	public void destroy(){
		if(session != null){
			session.close();
		}
	}
	
	
	public void testDeleteCource(){
		Cource cource = null;
		cource = session.selectOne("com.neuedu.mybatisdemo.dao.ICourceDao.findById","cource003");
		if(cource != null){
			try {
				session.getMapper(ICourceDao.class).deleteById(cource.getCourceId());
				session.commit();
				logger.info("删除課程成功!");
			} catch (Exception e) {
				logger.info("删除課程失敗!",e);
			}
		}else{
			logger.info("要删除的課程不存在!");
		}
	}
	@Test
	public void testEditCource(){
		Cource cource = null;
		cource = session.selectOne("com.neuedu.mybatisdemo.dao.ICourceDao.findById","cource003");
		if(cource != null){
			cource.setCourceName("html+css基礎知識");
			try {
				session.getMapper(ICourceDao.class).editCource(cource);
				session.commit();
				logger.info("修改課程成功!");
			} catch (Exception e) {
				//session.rollback();
				logger.info("修改課程失敗!",e);
			}
		}else{
			logger.info("要修改的課程不存在!");
		}
	}
	
	public void testAddCource(){
		//Cource cource = new Cource("cource002","mybatis實戰",4,null);
		Cource cource = new Cource("cource003","html5+css3基礎知識",4,null);
		try {
			session.getMapper(ICourceDao.class).addCource(cource);
			//使用jdbc事務
			session.commit();
			logger.info("新增課程成功!");
		} catch (Exception e) {
			//session.rollback();
			logger.info("新增課程失敗!",e);
		}
		
	}
	public void testFind(){
		List<Cource> list = session.getMapper(ICourceDao.class).findAll();
		for(Cource cource : list){
			logger.info(
					cource.getCourceId() + cource.getCourceName() 
					+ cource.getCourceScore() + cource.getStartDate());
		}
	}
	public void testFindAll(){ //測試方法一
		try {
			//1.加載mybatis環境
			String resource = "config/mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			
			//2.通過mybatis執行個體化資料通路接口
			SqlSession session = sqlSessionFactory.openSession();
			//ICourceDao courceDao = session.getMapper(ICourceDao.class);
			
			//3.調用資料通路接口,進行資料操作
			/*List<Cource> list = courceDao.findAll();*/
			//Cource cource = courceDao.findById("couce001");
			
			Cource cource = null;
			//方法1 - 通過mybatis session先擷取mybatis映射接口,再調用接口的方法進行查詢
			//cource = session.getMapper(ICourceDao.class).findById("couce001");
			//List<Cource> list = session.getMapper(ICourceDao.class).findAll();
			
			//方法2 - 直接使用mybatis session調用直接接口和方法,并進行參數傳遞
			cource = session.selectOne("com.neuedu.mybatisdemo.dao.ICourceDao.findById","couce001");
			//List<Cource> list = session.selectList("com.neuedu.mybatisdemo.dao.ICourceDao.findAll");
			
			//4.處理資料操作的結果
			/*for(Cource cource : list){
				logger.info(
						cource.getCourceId() + cource.getCourceName() 
						+ cource.getCourceScore() + cource.getStartDate());
			}*/
			
			if(cource != null){
				logger.info(
						cource.getCourceId() + cource.getCourceName() 
						+ cource.getCourceScore() + cource.getStartDate());
			}else{
				logger.info("沒有找到該課程資訊!");
			}
			
		} catch (IOException e) {
			logger.warn("發生異常!",e);
		}	
	}
}
           

繼續閱讀