前面已經講到用接口的方式編程。如果不一致就會出錯,這一章主要在上一講基于接口編程的基礎上完成如下事情:
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里面的屬性名稱
文章列表