1. 程式人生 > >Mybatids學習篇二

Mybatids學習篇二

                           使用MyBatis對錶執行CRUD操作


1、新增Mybatis的配置檔案conf.xml


2、定義表所對應的實體類,


3、定義操作users表的sql對映檔案userMapper.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,namespace的值習慣上設定成包名+sql對映檔名,這樣就能夠保證namespace的值是唯一的
            例如namespace="com.users.mapping.userMapper"就是com.users.mapping(包名)+userMapper(userMapper.xml檔案去除字尾)
  -->
<mapper namespace="com.users.mapping.userMapper">

     <!-- 在select標籤中編寫查詢的SQL語句, 設定select標籤的id屬性為getUser,id屬性值必須是唯一的,不能夠重複
                          使用parameterType屬性指明查詢時使用的引數型別,resultType屬性指明查詢返回的結果集型別
          resultType="com.User"就表示將查詢結果封裝成一個User類的物件返回

          User類就是users表所對應的實體類
     -->
     <!-- 
              根據id查詢得到一個user物件
      -->
     <select id="getUser" parameterType="int" 
         resultType="com.users.Users">
         select * from users where id=#{id}
     </select>
     
     <!-- 建立使用者(Create) -->
     <insert id="addUser" parameterType="com.users.Users">
         insert into users(name,age) values(#{name},#{age})
     </insert>
     
     <!-- 刪除使用者(Remove) -->
     <delete id="deleteUser" parameterType="int">
        delete from users where id=#{id}
     </delete>
     
     <!-- 修改使用者(Update) -->
     <update id="updateUser" parameterType="com.users.Users">
         update users set name=#{name},age=#{age} where id=#{id}
     </update>
     
     <!-- 查詢全部使用者-->
     <select id="getAllUsers" resultType="com.users.Users">
         select * from users
     </select>
     
</mapper>

4、定義sql對映的介面

  UserMapperI介面的程式碼如下:

package com.users.mapping;


import java.util.List;


import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;


import com.users.Users;


public interface UserMapperI {
/**
 * @author w_little
 * 定義sql對映的介面,使用註解指明方法要執行的SQL
 */
 
  //使用@Insert註解指明add方法要執行的SQL
    @Insert("insert into users(name, age) values(#{name}, #{age})")
    public int add(Users user);
    
    //使用@Delete註解指明deleteById方法要執行的SQL
    @Delete("delete from users where id=#{id}")
    public int deleteById(int id);
    
    //使用@Update註解指明update方法要執行的SQL
    @Update("update users set name=#{name},age=#{age} where id=#{id}")
    public int update(Users user);
    
    //使用@Select註解指明getById方法要執行的SQL
    @Select("select * from users where id=#{id}")
    public Users getById(int id);
    
    //使用@Select註解指明getAll方法要執行的SQL
    @Select("select * from users")
         public List<Users> getAll();
}

5、conf.xml檔案中註冊這個對映介面

<mappers>

      <mapper resource="com/users/mapping/userMapper.xml"/>

 <!-- 註冊UserMapper對映介面-->
  <mapper class="com.users.mapping.UserMapperI"/>
</mappers>

6、用到的MyBatisUtil工具類程式碼如下

package com.util;



import java.io.InputStream;


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




public class MybatisUtil {
/**
     * 獲取SqlSessionFactory
     * @return SqlSessionFactory
     */
   public static SqlSessionFactory getSqlSessionFactory() {
    //mybatis的配置檔案
        String resource = "conf.xml";
        //使用類載入器載入mybatis的配置檔案(它也載入關聯的對映檔案)
             InputStream is = MybatisUtil.class.getClassLoader().getResourceAsStream(resource);
             //構建sqlSession的工廠
             SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
            
        return factory;
    }
    
    /**
           * 獲取SqlSession
           * @return SqlSession
      */
      public static SqlSession getSqlSession() {
       //建立能執行對映檔案中sql的sqlSession
       return getSqlSessionFactory().openSession();
    }
     
    /**
     * 獲取SqlSession
     * @param isAutoCommit 
     *    true 表示建立的SqlSession物件在執行完SQL之後會自動提交事務
   * false 表示建立的SqlSession物件在執行完SQL之後不會自動提交事務,這時就需要我們手動呼叫sqlSession.commit()提交事務
     * @return SqlSession
     */
    public static SqlSession getSqlSession(boolean isAutoCommit) {
       return getSqlSessionFactory().openSession(isAutoCommit);
    }
}

7、單元測試類的程式碼如下:

package com.user.test;


import java.util.List;


import org.apache.ibatis.session.SqlSession;
import org.junit.Test;


import com.users.Users;
import com.users.mapping.UserMapperI;
import com.util.MybatisUtil;


public class Test1 {


@Test
public void testAdd() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 得到UserMapperI介面的實現類物件, UserMapperI介面的實現類物件由
* sqlSession.getMapper(UserMapperI.class)動態構建出來
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
Users user = new Users();
user.setName("使用者zxw");
user.setAge(20);
int add = mapper.add(user);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(add);

}


@Test
public void testUpdate() {
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
/**
* 得到UserMapperI介面的實現類物件
* mUserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
Users user = new Users();
user.setId(1);
user.setName("使用者lxw");
user.setAge(56);
// 執行修改操作
int retResult = mapper.update(user);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(retResult);




}


@Test
public void testDelete() {
SqlSession sqlSession = MybatisUtil.getSqlSession(true);
/**
* 得到UserMapperI介面的實現類物件
* mUserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
*/
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 執行刪除操作
int retResult = mapper.deleteById(7);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(retResult);

}


@Test
public void testGetUser() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 得到UserMapperI介面的實現類物件,UserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 執行查詢操作,將查詢結果自動封裝成User返回
Users user = mapper.getById(8);
// 使用SqlSession執行完SQL之後需要關閉SqlSession
sqlSession.close();
System.out.println(user);

}


@Test
public void testGetAll() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
// 得到UserMapperI介面的實現類物件,UserMapperI介面的實現類物件由sqlSession.getMapper(UserMapperI.class)動態構建出來
UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
// 執行查詢操作,將查詢結果自動封裝成List<User>返回
List<Users> lstUsers = mapper.getAll();
// 使用SqlSession執行完SQL之後需要關閉SqlSession
   sqlSession.close();
System.out.println(lstUsers);

}
}