首先,簡要概括一下mybatis 環境搭建步驟
第一步:創建 maven 工程
第二步:導入座標
第三步:編寫必要代碼(實體類和持久層接口)
第四步:編寫 SqlMapConfig.xml
第五步:編寫映射配置文件
第六步:編寫測試類
要使用mybatis代理dao實現CRUD有以下要求:
1、持久層接口和持久層接口的映射配置必須在相同的包下
2、持久層映射配置中 mapper 標籤的 namespace 屬性取值必須是持久層接口的全限定類名(com.xxx.xx.class)
3、SQL 語句的配置標籤,,,的 id 屬性必須和持久層接口的
方法名相同。
默認你已經搭建好mybatis環境並寫好實體類和接口(此鏈接是環境搭建)(https://mp.csdn.net/mdeditor/96371976#)
一、根據 ID 查詢
1.在持久層接口中添加 findById 方法
User findById(Integer userId);
2.在用戶的映射配置文件中配置
<!-- 根據 id 查詢 -->
<select id="findById" resultType="com.yx.domain.User" parameterType="int">
select * from user where id = #{id}
</select>
此處有些細節問題需要說明
**resultType 屬性:**用於指定結果集的類型。
**parameterType 屬性:**用於指定傳入參數的類型。
**sql 語句中使用#{}字符:**它代表佔位符,相當於jdbc的?,都是用於執行語句時替換實際的數據。具體的數據是由#{}裏面的內容決定的。
**#{}中內容的寫法:**由於數據類型是基本類型,所以此處可以隨意寫。
3.在測試類添加測試
@Before
public void init() throws IOException {
in = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
sqlSession = factory.openSession();
userDao = sqlSession.getMapper(IUserDao.class);
}
@After
public void destory() throws IOException {
sqlSession.commit();
sqlSession.close();
in.close();
}
@Test
public void testFindOneById() {
User user = userDao.findById(41);
System.out.println(user);
}
如此,一個根據用戶ID查找用戶的功能便實現了。其他查詢操作讀者可以自行操作試試。
二、保存操作
1.在持久層接口中添加新增方法
int saveUser(User user);
2.在用戶的映射配置文件中配置
<!-- 保存用戶-->
<insert id="saveUser" parameterType="com.yx.domain.User">
<!-- 配置保存時獲取插入的 id -->
<selectKey keyColumn="id" keyProperty="id" resultType="int">
select last_insert_id();
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
此處有些細節問題需要說明
**parameterType 屬性:**代表參數的類型,因爲我們要傳入的是一個類的對象,所以類型就寫類的全名稱。
**sql 語句中使用#{}字符:**它代表佔位符,相當於原來 jdbc 部分所學的?,都是用於執行語句時替換實際的數據。具體的數據是由#{}裏面的內容決定的。
**#{}中內容的寫法:**由於我們保存方法的參數是 一個 User 對象,此處要寫 User 對象中的屬性名稱。它用的是 ognl 表達式。
**ognl 表達式:**它是 apache 提供的一種表達式語言,全稱是:Object Graphic Navigation Language 對象圖導航語言
它是按照一定的語法格式來獲取數據的。
語法格式就是使用 #{對象.對象}的方式
#{user.username}它會先去找 user 對象,然後在 user 對象中找到 username 屬性,並調用getUsername()方法把值取出來。但是我們在 parameterType 屬性上指定了實體類名稱,所以可以省略 user.而直接寫 username。
3.添加測試類中的測試方法
@Test
public void testSaveUser(){
User user = new User();
user.setUsername("yue");
user.setBirthday(new Date());
user.setSex("男");
user.setAddress("合肥");
System.out.println(user);
userDao.saveUser(user);
System.out.println(user);
}
如此,一個增加用戶的功能便實現了。
三、用戶更新
1.在持久層接口中添加更新方法
int updateUser(User user);
2.在用戶的映射配置文件中配置
<update id="updateUser" parameterType="com.yx.domain.User">
update user set username = #{username},birthday=#{birthday},sex=#{sex},address=#{address} where id =#{id}
</update>
3.加入更新的測試方法
@Test
public void testUpdateUser(){
User user = userDao.findById(56);
user.setUsername("xi");
int res = userDao.updateUser(user);
System.out.println(res);
}
如此,一個更新用戶信息的功能便實現了。
四、用戶刪除
1.在持久層接口中添加刪除方法
int deleteUserById(Integer id);
2.在用戶的映射配置文件中配置
<delete id="deleteUserById" parameterType="int">
delete from user where id = #{id}
</delete>
3.加入刪除的測試方法
@Test
public void testDeleteUserById(){
userDao.deleteUserById(56);
}