mybatis開發步驟
- 建立一個java web工程/可以使java工程;建立mybatis工程的java package包
- 把mybatis架構的jar包及其依賴包拷貝到項目工程中
- 編寫資料實體類,與資料庫表進行對應 - 為orm(對象映射關系)做準備
- .定義資料操作接口,并在接口中定義資料操作
- 編寫一個接口映射檔案,對接口的資料操作進行映射
- 編寫mybatis全局配置檔案,配置資料庫連接配接參數,配置映射檔案或資料操作接口...
- 編寫測試類,測試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);
}
}
}