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;然后就可以進行平常的操作了.
以上是本人個人觀點,如有不對,希望共同交流!