mybatis基於代理dao實現CRUD(xml實現)

首先,簡要概括一下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);
    }

如此,一個刪除用戶的功能便實現了。

以上,就是最基本的mybatis中的CRUD操作。至於更復雜的條件查詢,模糊查詢,讀者可以先自行琢磨一下。博主以後還會寫一篇相關的帖子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章