MyBatis初識(通過小實例清晰認識MyBatis)


1.MyBatis框架:

  MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

2.MyBatis架構:

3.上面的架構圖可能難以理解,下面的圖示更能清晰明白MyBatis的具體使用流程:

  廢話不多說,直接貼工程代碼,通過代碼解釋MyBatis究竟是干嘛的,工程所需要的所有java包都在下面鏈接中:http://pan.baidu.com/s/1kUZmpWb

4.電影的簡單增刪改查工程實現:

  (1)建立數據庫,建一張電影表film:

  

  (2)在工程中建立電影類Film:

  

public class Film {

    // Fields
    private Long id;
    private String fname;

    // Constructors
    /** default constructor */
    public Film() {
    }

    // Property accessors
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFname() {
        return this.fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

}

  (3)在工程中建立電影信息數據訪問接口FilmMapper.java:

  

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

import com.gnc.pojo.Film;

/**
 * 電影信息數據訪問接口
 */
public interface FilmMapper {

    /** 
     * 功能:查詢所有電影 
     * @return 
     */  
    public List<Film> getAllFilm();
    
    /**
     * 功能:按編號獲取電影
     * 
     * @return
     */
    public Film getFilmById(int id);


    /**
     * 功能:添加影片
     * 
     * @param film
     */
    public void insertFilm(Film film);

    /**
     * 功能:修改影片
     * 
     * @param film
     */
    public void updateFilm(Film film);

    /**
     * 功能:刪除影片
     * 
     * @param id
     */
    public void deleteFilm(int id);
}

  (4)建立映射文件FilmMapper.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.gnc.dao.FilmMapper">

    <resultMap id="filmResultMap" type="Film">
        <id property="id" column="id" />
        <result property="fname" column="f_name" />
        <result property="fprice" column="f_price" />
    </resultMap>

    <!-- 查詢所有電影信息,對應FilmMapper接口中的getAllFilm方法 -->
    <select id="getAllFilm" resultMap="filmResultMap">
        select * from film
    </select>

    <!-- 按電影編號查詢電影信息,對應FilmMapper接口中的getFilmById方法 -->
    <select id="getFilmById" parameterType="int" resultMap="filmResultMap">
        select *
        from film where id=#{id}
    </select>


    <!-- 添加影片 -->
    <insert id="insertFilm" parameterType="Film" keyProperty="id"
        useGeneratedKeys="true">
        insert into film (f_name) values (#{fname});
    </insert>

    <!-- 修改影片 -->
    <update id="updateFilm" parameterType="Film">
        update film
        <trim prefix="set" suffixOverrides=",">
            <if test="fname != null">
                f_name = #{fname}
            </if>
        </trim>
        where id = #{id}
    </update>

    <!-- 刪除影片 -->
    <delete id="deleteFilm" parameterType="int">
        delete from film where id
        = #{id}
    </delete>

</mapper>

  (5)建立MyBatis配置文件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>
    <settings>
        <!-- changes from the defaults -->
        <setting name="lazyLoadingEnabled" value="false" />
    </settings>
    <typeAliases>
        <!--這里給實體類取別名,方便在mapper配置文件中使用 -->
        <typeAlias alias="Film" type="com.gnc.pojo.Film" />
    </typeAliases>
    
    <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://localhost:3306/test" />
                <property name="username" value="root" />
                <property name="password" value="geningchao" />
            </dataSource>
        </environment>
    </environments>
    <!--這里添加的是執行CRUD操作的接口對應的配置文件(xml文件) -->
    <mappers>
        <mapper resource="com/gnc/dao/FilmMapper.xml" />
    </mappers>
</configuration>  

  (6)建立測試類TestMyBaties:

  

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 com.gnc.dao.FilmMapper;
import com.gnc.pojo.Film;

import junit.framework.TestCase;

public class TestMyBaties extends TestCase {

    /**
     * 共6步操作完成CRUD
     * 
     * @throws IOException
     */
    public void testBaties() throws IOException {

        // 指定MyBatis配置文件
        String RESOURCE = "mybatis-config.xml";

        // 1、指定MyBaties配置文件
        InputStream inputstream = Resources.getResourceAsStream(RESOURCE);
        // 2、創建SqlSessionFactory()
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputstream);

        SqlSession session = null;
        try {

            // 3、獲取SqlSession
            session = sessionFactory.openSession();

            // 4、獲取DAO接口對象
            FilmMapper mapper = session.getMapper(FilmMapper.class);

            // 5、CRUD操作

            // 5.1--添加影片
            Film film = new Film();
            film.setFname("笑傲江湖");
            mapper.insertFilm(film);
            session.commit();// 添加、修改、刪除操作最后需要提交事務

            // 5.2--修改影片"笑傲江湖"為"喜劇之王"
            film = mapper.getFilmById(1);
            film.setFname("喜劇之王");
            mapper.updateFilm(film);
            session.commit();

            // 5.3--刪除影片"笑傲江湖",其ID為14
//            mapper.deleteFilm(1);
//            session.commit();

            // 5.4--獲取所有電影信息
            List<Film> filmList = mapper.getAllFilm();

            // 顯示所有電影信息
            for (Film filmObj : filmList) {

                System.out.println("電影ID:" + filmObj.getId() + " 電影名:" + filmObj.getFname());

            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 6、關閉SqlSession
            if (session != null) {
                session.close();
            }
        }

    }

}

5.工程流程解釋:

  首先,電影系統中,我們要先有一個數據庫用來存放電影信息,即第一步;然后需要有一個電影類,也就是第二步;接着,需要有一個對電影信息訪問控制的接口,即第三步;接下來,我們一般的做法就是再建立一個java類來實現剛才的接口,實現的過程也就是sql操作,采用MyBatis框架,就將這個過程放在了xml映射文件中,即第四步;昨晚上面步驟之后,就需要進行配置MyBatis信息,即第五步,該步包括連接數據庫,加載映射文件,以及給實體類取一些別名以便映射文件中簡單實用.上述步驟走完之后,就可以進行測試了,測試過程分為三步:第一,加載mybatis-config.xml配置文件,獲取SqlSessionFactory;第二,獲取session;第三,獲取DAO接口對象FilmMapper;然后就可以進行平常的操作了.

 

以上是本人個人觀點,如有不對,希望共同交流!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM