mybatis簡介

Mybatis
1》什麼是Mybatis?
開源的持久層框架
jdbc:代碼繁瑣,要寫sql語句 優點:性能好,直接操作數據庫
hibernate框架:代碼簡潔,不用寫sql。缺點:性能較低
Mybatis框架:代碼簡潔,寫sql,性能還可以。容易掌握
如何使用?
1.導包

可以使用maven來對jar包進行管理,具體可以去阿里雲倉庫搜索。
2.添加Mybatis配置文件


3.寫實體類

生成相應的get,set和tostring。

4.寫映射文件.注:修改配置文件,指定映射文件的位置

<?xml version="1.0" encoding="UTF-8" ?>
<!-- Dept.xml 在com.tarena.entity 包中 -->  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<!-- paramterType:參數類型 -->
<mapper namespace="dao.EmpDAO">
    <insert id="save" parameterType="entity.Emp">
        insert into t6
        values(8,#{pwd},#{name})
    </insert>
    <!-- id:要求唯一 resultType:返回結果的類型 -->
    <select id="findAll" resultType="entity.Emp">
        select * from t6
    </select>
    <select id="findById" parameterType="int" resultType="entity.Emp">
        select *
        from t6 where id=#{id}
    </select>
    <update id="modify" parameterType="entity.Emp">
        update t6 set
        name=#{name},pwd=#{pwd}
        where id=#{id}
    </update>
    <delete id="delete" parameterType="int">
        delete from t6 where id=#{id}
    </delete>

    <!-- 返回Map類型的結果 map是java.util.map的簡寫形式 -->
    <select id="findById2" parameterType="int" resultType="map">
        select * from t6 where id=#{id}
    </select>

    <!-- 使用ResultMap解決實體類的屬性名與數據庫字段名不一致的情況 -->
    <select id="findById3" parameterType="int" resultMap="emp2Map">
        select * from t6 where id=#{id}
    </select>
    <!-- 處理表的字段名與實體類的屬性名對應關係 -->
    <resultMap type="entity.Emp2" id="emp2Map">
        <result property="password" column="pwd" />
        <result property="empno" column="id" />
    </resultMap>
</mapper>

5:調用SqlSession提供的方法來訪問數據庫
注:實體類的屬性名與表的字段表要求一樣。大小寫無所謂。

測試:

package test;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import entity.Emp;
import entity.Emp2;

public class TestCase {
    private SqlSession ss;

    @Before
    public void init() {
        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
        SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml"));
        ss = ssf.openSession();
    }

    @Test
    public void test1() {
        Emp emp = new Emp();
        emp.setPwd("369");
        emp.setName("JACK");
        ss.insert("test.save", emp);
        ss.commit();
        ss.close();
    }

    @Test
    public void test2() {
        List<Emp> emps = ss.selectList("test.findAll");
        System.out.println(emps);
        ss.close();
    }

    @Test
    public void test3() {
        Emp emp = ss.selectOne("test.findById", 3);
        System.out.println(emp);
    }

    @Test
    public void test4() {
        Emp emp = ss.selectOne("test.findById", 3);
        emp.setName("hh");
        emp.setPwd("987");
        ss.update("test.modify", emp);
        ss.commit();
        ss.close();
        System.out.println(emp);
    }

    @Test
    public void test5() {
        ss.delete("test.delete", 8);
        List<Emp> emps = ss.selectList("test.findAll");
        System.out.println(emps);
        ss.commit();
        ss.close();
    }
    @Test
    public void test6() {
    Map data=ss.selectOne("test.findById2",2);
    System.out.println(data);
    System.out.println(data.get("name"));
        ss.close();
    }
    @Test
    public void test7() {
        Emp2 emp=ss.selectOne("test.findById3",2);
        System.out.println(emp);
        ss.close();
    }
}

 

4>返回Map類型的結果
mybatis會將查詢結果先封裝到一個Map對象裏面(以字段名爲key,以字段值爲alue)
然後再將Map對象中的數據添加到實體對象裏面.

Mapper映射器
符合映射文件的接口
注:mybatis會自動實現一個符合該接口要求的對象
要求:1.接口方法的名稱與映射文件中的sql的id要一樣
2.方法的參數類型要與映射文件中的parameterType類型一致
3.方法的返回類型要與映射文件中的ResultType一致,無返回爲void
此外,映射文件的namespace必須等於映射器的全限定名字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章