MyBatis來源~:
MyBatis本是apache的一個開源的項目,原來稱為iBatis,2010年這個項目由apache softwarefoundation遷移到了google code,並改名為MyBatis。MyBatis是支持普通SQL查詢,存儲過程和高級映射的優秀持久性框架,是一個SQL映射框架。MyBatis消除了幾乎所有的JDBC代碼。MyBatis使用簡單的XML或注解用於配置和映射,將接口和JavaPOJOs(Plan Old Java Objects,普通的Java對象)映射成數據庫中的記錄。簡單地說,MyBatis將SQL語句從程序里剝離出來,放到配置文件,並將查詢結果和持久化類的屬性通過配置文件做了映射,相對於HibernateORM框架,它屬於一種“半自動化”的ORM實現!
MyBatis的優點以及使用場合!!
MyBatis小巧,簡單易學,通過文檔和源代碼可以比較輕松掌握它的設計思路以及實現。其優點如下:
(1)簡單且功能強大!通過SQL映射文件和SqlSession能夠實現數據持久層的功能,與JDBC相比減少很多代碼量!!
(2)開發猿能夠完全為所欲為的控制所執行的SQL語句,尤其適用多表復雜查詢!
(3)容易維護和修改。SQL語句寫在了配置文件中,只要修改配置文件即可!
其缺點如下:
MyBatis屬於半自動化框架的ORM,需要開發人員掌握SQL語句的編寫。由於要寫SQL語句,不同的數據庫要重新修改SQL,因此MyBatis的數據庫移植性不好。
MyBatis的適用場合:
如果不需要太多復雜的功能,而需要一個足夠靈活的DAO層解決方案,或者對性能的要求很高,那么我介意使用MyBatis!
那么既然我們了解了它的適用場合也就應該了解一下它的不適用哪些場合:
(1)當希望對象的持久化對應用程序完全透明時,可以使用對象/映射方案,如hibernate。
(2)當數據庫有移植需求,或者需要支持多種數據庫時不要使用MyBatis。
(3)當應用程序需要完全動態的SQL時,如查詢的字段都需要動態生成時不要使用MyBatis。
(4)當沒有使用關系數據庫時,或者使用的不是真正的關系數據庫時不要使用MyBatis。
**************************************************************************************************************************
原理性的東西我們就介紹到這里吧,下面我們來使用MyBatis實現對數據庫中的部門表進行增, 刪, 改, 查;
第一步准備如下jar包!(jar 包下載地址我們可以去MyBatis的官網下載http://code.goole.com/p/mybatis這里我們推薦下載mybatis-3.2.2.zip)
第二步我們來編寫與數據庫交互的配置文件(名稱可以取任意值,因為我們是專業的所以這里我們將其命名為mybatis-config.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">
<!-- 事務策略是JDBC -->
<transactionManager type="JDBC" />
<!-- 數據源的方式 POOLED -->
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="orcl" />
<property name="password" value="orcl" />
</dataSource>
</environment>
</environments>
<!--映射文件:描述某個實體和數據庫表的對應關系 -->
<mappers>
<mapper resource="cn/happy/entity/Dept.xml" />
</mappers>
</configuration>
注意!這里要講一下其中的集合常用的元素作用:
(1)environments元素:用於配置多個數據環境,這樣可以映射多個數據庫信息。采用default來指定默認使用哪個數據庫環境。environment則是每個數據庫環境的具體配置,包括連接信息和事務管理信息。
在MyBatis中有兩種事務管理器類型(type="[JDBC|MANAGED]"):
JDBC:直接使用了JDBC控制事務。它依賴於從數據源得到的連接來管理事務范圍。
MANAGED:MyBatis自己不負責控制事務,它會讓容器來管理事務的整個生命周期(如通過Spring或JavaEE應用服務器)。
數據源類型有三種:UNPOOLED, POOLED, JNDI。
UNPOOLED:這個數據源的實現是每次被請求時簡單打開和關閉連接。它有一點慢,這是對簡單應用程序的一個很好選擇,因為它不需要及時的連接。
POOLED:采用連接池以避免創建新的連接實例時必要的初始連接和認證時間。這是一種當前Web應用程序快速響應請求的很流行的方法。
JNDI:這個數據源的實現是為了使用如Spring或應用服務器這類的容器。容器可以集中或在外部配置數據源,MyBatis通過JNDI獲取數據源。
(2)mappers元素:包含所有mapper的列表,告訴MyBatis到哪里去找SQL語句。Mapper主要是定義SQL映射文件。
第三步我們需要配置SQL映射文件,命名規范建議實體類名加Mapper.xml后綴這里我將其命名為DeptMapper.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="cn.happy.entity.Dept">
<!-- 1.1 查詢所有部門信息 -->
<select id="selectAllDept" resultType="cn.happy.entity.Dept">
<!-- 這里寫的SQL,而不是HQL,SQL中的表名是不區分大小寫的 --> select * from dept </select>
<!-- 1.1 添加部門信息 -->
<insert id="insertDept" parameterType="cn.happy.entity.Dept"> insert into dept values(SEQ_Num.nextval,#{deptName}) </insert>
<!-- 1.2刪除信息 -->
<delete id="deleteDept" parameterType="cn.happy.entity.Dept"> delete from dept where deptNo=#{deptNo} </delete>
<!-- 1.3修改信息 -->
<update id="updateDept" parameterType="cn.happy.entity.Dept"> update dept set deptName=#{deptName} where deptNo=#{deptNo} </update>
<!-- 1.4 模糊查詢 含有市場的部門信息 -->
<select id="likeDept" parameterType="cn.happy.entity.Dept" resultType="cn.happy.entity.Dept"> select * from dept where deptName like '%${deptName}%' </select>
</mapper>
這樣就配置完畢了,最后我們只需創建測試類測試即可
public class Mybatis_Test { SqlSession session; @Before //將開啟session的方法提出
public void mybefore() throws IOException{ Reader reader = Resources.getResourceAsReader("MyBatis-config.xml"); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory sql = builder.build(reader); session = sql.openSession(); } @Test //查詢所有部門的信息
public void selectAllDeptTest() throws IOException { List<Dept> selectList = session.selectList("selectAllDept"); for (Dept dept : selectList) { System.out.println(dept); } } @Test //根據編號修改部門信息
public void updateDeptTest(){ Dept dept=new Dept(); dept.setDeptNo(1); dept.setDeptName("市場部"); int count = session.update("cn.happy.entity.Dept.updateDept",dept); session.commit(); System.out.println(count+"update ok!"); session.close(); } @Test //刪除一個部門
public void deleteDeptTest(){ Dept dept=new Dept(); dept.setDeptNo(1); int count=session.delete("cn.happy.entity.Dept.deleteDept",dept); session.commit(); System.out.println(count+"del ok!"); session.close(); } @Test //模糊查詢部門信息 關鍵詞為“財”
public void likeDeptTest(){ Dept dept=new Dept(); dept.setDeptName("財"); List<Dept> selectList=session.selectList("cn.happy.entity.Dept.likeDept",dept); for (Dept dept2 : selectList) { System.out.println(dept2); } } @Test //添加一個部門
public void insertDeptTest(){ Dept dept = new Dept(); dept.setDeptName("女神部"); int count = session.insert("cn.happy.entity.Dept.insertDept",dept); session.commit(); System.out.println(count+"添加成功"); } }
感興趣的可以根據如上四個步驟去玩一把,下面內容會逐步更新!!!需要以上素材的可以私聊我 下期再見~~