02-Mybatis實現 CRUD 操作

Mybatis實現 CRUD 操作相關

基於前一個入門項目傳送門

  1. 在IUserdao接口中添加方法
public interface IUserDao {
    /**
     * 查找所有方法
     * @return
     */
     List<User> findAll();

    /**
     * 通過id查找用戶
     * @param id
     * @return
     */
     User findUserById(Integer id);

    /**
     * 保存用戶操作
     * @param user
     */
     void saveUser(User user);

    /**
     * 修改用戶操作
     * @param user
     */
     void updateUser(User user);

    /**
     * 刪除用戶
     * @param id
     */
     void deleteUser(Integer id);
}
  1. 在IUserDao.xml中添加數據庫代碼

注意:
resultType 屬性:
用於指定結果集的類型。
parameterType 屬性:
用於指定傳入參數的類型。
sql 語句中使用#{}字符:
它代表佔位符,相當於原來 jdbc 部分所學的?,都是用於執行語句時替換實際的數據。 具體的數據是由#{}裏面的內容決定的。
parameterType 屬性:
代表參數的類型,因爲我們要傳入的是一個類的對象,所以類型就寫類的全名稱。

<?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="com.ymz.dao.IUserDao">
    <!-- 配置查詢所有操作 -->
    <select id="findAll" resultType="com.ymz.entity.User">
        select * from user;
    </select>
    <!--通過Id查找用戶操作-->
    <select id="findUserById" parameterType="java.lang.Integer" resultType="com.ymz.entity.User">
        select * from user where id = #{id}
    </select>
    <!--保存用戶操作-->
    <insert id="saveUser" parameterType="com.ymz.entity.User">
        insert into user(username,birthday,sex,address) values(#{username},
        #{birthday},#{sex},#{address});
    </insert>
    <!--更新用戶操作-->
    <update id="updateUser" parameterType="com.ymz.entity.User">
        update user set username=#{username},birthday=#{birthday},
        sex=#{sex},address=#{address} where id = #{id}
    </update>
    <!--刪除用戶操作-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id = #{id}
    </delete>
</mapper>
  1. 創建測試類
    注意:session.commit();使用來實現事務提交。
public class MybatisTest {
    private InputStream is;
    private SqlSession session;
    private SqlSessionFactory build;
    private IUserDao userDao;

    @Before
    public void init() throws IOException {
        // 1. 獲取配置文件
        is = Resources.getResourceAsStream("SqlMapConfig.xml");
        // 2. 創建SqlSessionFactory對象
        build = new SqlSessionFactoryBuilder().build(is);
        // 3. 使用構建者創建工廠對象SqlSession
        session = build.openSession();
        // 4. 使用對象SqlSession創建dao接口的代理對象
        userDao = session.getMapper(IUserDao.class);
    }
    @After
    public void close(){
        session.commit();
        // 6. 釋放資源
        try {
            session.close();
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

   @Test
    public void findAll(){
       // 查詢所有用戶方法
       List<User> users = userDao.findAll();
       for(User user:users){
           System.out.println(user);
       }
   }
   @Test
    public void saveUser(){
       User user = new User();
       user.setUsername("柳飄飄");
       user.setSex("女");
       user.setBirthday(new Date());
       user.setAddress("北京市朝陽區");
       userDao.saveUser(user);
   }
    @Test
    public void updateUser(){
        User user = userDao.findUserById(50);
        user.setAddress("湖北省武漢市");
        userDao.updateUser(user);
    }
    @Test
    public void deleteUser(){
        userDao.deleteUser(52);
    }
}

Mybatis 與 JDBC 編程的比較

1.數據庫鏈接創建、釋放頻繁造成系統資源浪費從而影響系統性能,如果使用數據庫鏈接池可解決此問題。
解決:
在 SqlMapConfig.xml 中配置數據鏈接池,使用連接池管理數據庫鏈接。

2.Sql 語句寫在代碼中造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變 java 代碼。
解決:
將 Sql 語句配置在 XXXXmapper.xml 文件中與 java 代碼分離。
3.向 sql 語句傳參數麻煩,因爲 sql 語句的 where 條件不一定,可能多也可能少,佔位符需要和參數對應。
解決:
Mybatis 自動將 java 對象映射至 sql 語句,通過 statement 中的 parameterType 定義輸入參數的
類型。
4.對結果集解析麻煩,sql 變化導致解析代碼變化,且解析前需要遍歷,如果能將數據庫記錄封裝成 pojo 對
象解析比較方便。
解決:
Mybatis 自動將 sql 執行結果映射至 java 對象,通過 statement 中的 resultType 定義輸出結果的
類型。

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