posts - 2, comments - 27, trackbacks - 0, articles - 60
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          初試MyBatis

          Posted on 2012-07-22 12:48 ZhouFeng 閱讀(427) 評論(0)  編輯  收藏 所屬分類: 原創Web開發DataBase
          雖然MyBatis發布已經有一段時間了,一直想試試,可總是被中斷,這次總算是跑了一下,對MyBatis有所了解。
          在www.mybatis.org上可以找到下載鏈接,我下載的是mybatis-3.1.1這個版本,下載一個zip包,里面包含有主要的庫文件mybatis-3.1.1.jar,還有一些引用的jar,一個PDF說明文檔,這個說明文檔提供的是E文版,可以在網上找到相應的中文版,下載完成后,就開始我的操作了。
          在MyEclipse里創建了一個java工程,本來是打算在Web中使用的,沒有創建Web工程,只是想試一下MyBatis這東東,java工程就可以了。
          創建時引入MyBatis庫和數據庫驅動庫,創建一個空的工程

          準備好數據庫,此處用MySQL做練習,創建一個bbs數據庫,創建一個tb_users表,結構如下
          +----------+----------+------+-----+---------+-------+
          | Field    | Type     | Null | Key | Default | Extra |
          +----------+----------+------+-----+---------+-------+
          | userid   | int(11)  | NO   | PRI |         |       |
          | username | char(20) | NO   |     |         |       |
          +----------+----------+------+-----+---------+-------+

          創建一個User類,與數據表對應
          package com.cuit.prj.domain;

          public class User {
              
          private int userid;
              
          private String userName;
              
              
          public User() {
                  
          super();
              }
              
          public User(int userid, String userName) {
                  
          super();
                  
          this.userid = userid;
                  
          this.userName = userName;
              }
              
          public int getUserid() {
                  
          return userid;
              }
              
          public void setUserid(int userid) {
                  
          this.userid = userid;
              }
              
          public String getUserName() {
                  
          return userName;
              }
              
          public void setUserName(String userName) {
                  
          this.userName = userName;
              }
          }
          再創建一個UserMapper接口,里面提供了對User的相關操作
          package com.cuit.prj.presistence;

          import com.cuit.prj.domain.User;

          public interface UserMapper {
              User selectUser(
          int userid);
              
          void insertUser(User user);
              
          void updateUser(User user);
              
          void deleteUser(int userid);
          }
          再創建一個UserMapper.xml,與UserMapper.java對應的一個配置文件,經本例測試,其中的id要和接口中的方法名一致
          <?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.cuit.prj.presistence.UserMapper">
              
          <select id="selectUser" parameterType="int" resultType="com.cuit.prj.domain.User">
                  select *
                  from tb_users where userid = #{userid}
              
          </select>

              
          <insert id="insertUser" parameterType="com.cuit.prj.domain.User">
                  insert into tb_users(userid,username) values (#{userid},#{userName})
              
          </insert>

              
          <update id="updateUser" parameterType="com.cuit.prj.domain.User">
                  update tb_users set username = #{userName} where userid = #{userid}
              
          </update>

              
          <delete id="deleteUser" parameterType="int">
                  delete from tb_users where userid = #{userid}
              
          </delete>
          </mapper>
          在src下面創建MyBatis配置文件mybatis-conf.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">
                      
          <transactionManager type="JDBC" />
                      
          <dataSource type="POOLED">
                          
          <property name="driver" value="com.mysql.jdbc.Driver" />
                          
          <property name="url" value="jdbc:mysql://localhost/bbs" />
                          
          <property name="username" value="root" />
                          
          <property name="password" value="1233" />
                      
          </dataSource>
                  
          </environment>
              
          </environments>
              
          <mappers>
                  
          <mapper resource="com/cuit/prj/presistence/UserMapper.xml" />
              
          </mappers>
          </configuration>
          創建一個獲取連接的SessionFactory的類
          package com.cuit.prj.sessionfactory;

          import java.io.IOException;
          import java.io.Reader;

          import org.apache.ibatis.io.Resources;
          import org.apache.ibatis.session.SqlSession;
          import org.apache.ibatis.session.SqlSessionFactory;
          import org.apache.ibatis.session.SqlSessionFactoryBuilder;

          public class SessionFactory {
              
          public static SqlSession getSession(){
                  SqlSession session 
          = null;
                  String resource 
          = "mybatis-conf.xml";
                  
          try {
                      Reader reader 
          = Resources.getResourceAsReader(resource);
                      SqlSessionFactory sqlMapper 
          = new SqlSessionFactoryBuilder().build(reader);
                      session 
          = sqlMapper.openSession();
                  } 
          catch (IOException e) {
                      e.printStackTrace();
                  }
                  
          return session;
              }
          }
          做好上述準備后,寫一個主方法調用測試,如下
          package com.cuit.prj;

          import org.apache.ibatis.session.SqlSession;
          import com.cuit.prj.domain.User;
          import com.cuit.prj.presistence.UserMapper;
          import com.cuit.prj.sessionfactory.SessionFactory;

          public class AppTest {
              public static void main(String[] args) {
                  System.out.println(
          "Hello");
                  SqlSession session 
          = SessionFactory.getSession();
                  
          try {
                      UserMapper mapper 
          = session.getMapper(UserMapper.class);

                      User user 
          = mapper.selectUser(2);
                      System.out.println(user.getUserName());
                  } 
          finally {
                      session.close();
                  }
              }
          }
          在數據庫中添加兩條記錄,并提交
          +--------+----------+
          | userid | username |
          +--------+----------+
          | 1      | user1    |
          | 2      | user2    |
          +--------+----------+
          接下來就可以運行看看結果了。輸出如下:
          Hello
          user2
          終于跑起來了,在處理了一系列的Exception之后看到的結果,上面的測試只是做了一個讀取數據的操作,如果有新增或修改數據,需要調用session.commit()操作。
          大概小結一下,用了MyBatis感覺還是很不錯的,把SQL語句和JAVA代碼分離開,喜歡自己掌控SQL語句的人們可能會喜歡MyBatis一些,不像Hibernate那樣可以完全不用寫SQL語句。只是配置文件和接口寫起來還是有些麻煩,還有POJO類的生成,工作量還是不小哇,網上找到一個生成工具,下次研究一下再補充上來。
          主站蜘蛛池模板: 蒙城县| 成武县| 盐池县| 密山市| 施甸县| 左贡县| 四平市| 平山县| 祁连县| 铅山县| 象山县| 天柱县| 浠水县| 康保县| 岑溪市| 勃利县| 白河县| 桦川县| 襄樊市| 巩留县| 根河市| 昌乐县| 崇左市| 乌鲁木齐县| 楚雄市| 克什克腾旗| 中山市| 改则县| 边坝县| 金塔县| 丹凤县| 清涧县| 昭通市| 罗定市| 浦北县| 延吉市| 霍林郭勒市| 渭源县| 余江县| 华亭县| 南城县|