文章出處


前面已經講到用接口的方式編程。如果不一致就會出錯,這一章主要在上一講基于接口編程的基礎上完成如下事情:
1. 用 mybatis 查詢數據,包括列表
2. 用 mybatis 增加數據
3. 用 mybatis 更新數據.
4. 用 mybatis 刪除數據.

 

查詢數據,前面已經講過簡單的,主要看查詢出列表的
查詢出列表,也就是返回list, 在我們這個例子中也就是 List<User> , 這種方式返回數據,需要在User.xml 里面配置返回的類型 resultMap, 注意不是 resultType, 而這個resultMap 所對應的應該是我們自己配置的

<!-- 為了返回list 類型而定義的returnMap -->
    <resultMap type="User" id="resultListUser">
        <id column="id" property="id" />
        <result column="userName" property="userName" />
        <result column="userAge" property="userAge" />
        <result column="userAddress" property="userAddress" />
    </resultMap>

查詢列表的語句在 User.xml 中

<!-- 返回list 的select 語句,注意 resultMap 的值是指向前面定義好的 -->
    <select id="selectUsers" parameterType="string" resultMap="resultListUser">
        select * from user where userName like #{userName}
    </select>

在 IUserOperation 接口中增加方法:public List<User> selectUsers(String userName);    
現在在 Test 類中做測試

public void getUserList(String userName){
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);           
            List<User> users = userOperation.selectUsers(userName);
            for(User user:users){
                System.out.println(user.getId()+":"+user.getUserName()+":"+user.getUserAddress());
            }
            
        } finally {
            session.close();
        }
    }

現在在main  方法中可以測試:

public static void main(String[] args) {
        Test testUser=new Test();
        testUser.getUserList("%");
    }

 

可以看到,結果成功查詢出來。如果是查詢單個數據的話,用第二講用過的方法就可以了。

用mybatis 增加數據 
在 IUserOperation 接口中增加方法:public void addUser(User user);
在 User.xml 中配置

<!--執行增加操作的SQL語句。id和parameterType  
       分別與IUserOperation接口中的addUser方法的名字和  
       參數類型一致。以#{name}的形式引用Student參數  
       的name屬性,MyBatis將使用反射讀取Student參數  
       的此屬性。#{name}中name大小寫敏感。引用其他  
       的gender等屬性與此一致。seGeneratedKeys設置  
       為"true"表明要MyBatis獲取由數據庫自動生成的主  
       鍵;keyProperty="id"指定把獲取到的主鍵值注入  
       到Student的id屬性--> 
    <insert id="addUser" parameterType="User" 
        useGeneratedKeys="true" keyProperty="id"> 
        insert into user(userName,userAge,userAddress)  
             values(#{userName},#{userAge},#{userAddress})  
    </insert>

然后在 Test 中寫測試方法:

/**
     * 測試增加,增加后,必須提交事務,否則不會寫入到數據庫.
     */
    public void addUser(){
        User user=new User();
        user.setUserAddress("人民廣場");
        user.setUserName("飛鳥");
        user.setUserAge(80);
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);
            userOperation.addUser(user);
            session.commit();
            System.out.println("當前增加的用戶 id為:"+user.getId());
        } finally {
            session.close();
        }
    }

用mybatis 更新數據
方法類似,先在 IUserOperation 中增加方法:public void addUser(User user);
然后配置 User.xml 

<update id="updateUser" parameterType="User" >
        update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}
    </update>

Test 類總的測試方法如下:

public void updateUser(){
        //先得到用戶,然后修改,提交。
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);
            User user = userOperation.selectUserByID(4);            
            user.setUserAddress("原來是魔都的浦東創新園區");
            userOperation.updateUser(user);
            session.commit();
            
        } finally {
            session.close();
        }
    }

用mybatis 刪除數據 
同理,IUserOperation 增加方法:public void deleteUser(int id);
配置User.xml

<delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>

然后在Test類中寫測試方法:

    /**
     * 刪除數據,刪除一定要 commit.
     * @param id
     */
    public void deleteUser(int id){
        SqlSession session = sqlSessionFactory.openSession();
        try {
            IUserOperation userOperation=session.getMapper(IUserOperation.class);           
            userOperation.deleteUser(id);
            session.commit();            
        } finally {
            session.close();
        }
    }

這樣,所有增刪改查都完成了,注意在增加,更改,刪除的時候要調用session.commit(),這樣才會真正對數據庫進行操作,否則是沒有提交的。

到此為止,簡單的單表操作,應該都會了,接下來的時間了,我會講多表聯合查詢,以及結果集的選取。 

 

http://blog.csdn.net/woshixuye/article/details/27521071

補充下 resultMap和resultType區別

 

補充下 

column 是對應數據庫中表的字段名稱
property是對應的bean里面的屬性名稱

 


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()