欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis框架之mybatis中dao層開發(fā)的兩種方法

 更新時間:2023年07月11日 08:46:45   作者:盡盡  
這篇文章主要介紹了mybatis框架之mybatis中dao層開發(fā)的兩種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

一、原始dao的開發(fā)方式

即開發(fā)dao接口和dao實現(xiàn)類。

首先添加Dao接口

public interface UserDao {
    // 1、 根據(jù)用戶ID查詢用戶信息
    public User findUserById(int id) throws Exception;
?
    // 2、 根據(jù)用戶名稱模糊查詢用戶列表
    public List<User> findUsersByName(String name) throws Exception;
?
    // 3、 添加用戶
    public void insertUser(User user) throws Exception;
}

然后實現(xiàn)其接口即可

public class UserDaoImpl implements UserDao {
    // 依賴注入,將工程在外面創(chuàng)建
    private SqlSessionFactory sqlSessionFactory;
    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {//將外面創(chuàng)建的工廠傳遞進來(以后spring)
        this.sqlSessionFactory = sqlSessionFactory;
    }
?
    @Override
    public User findUserById(int id) throws Exception {
        // 創(chuàng)建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 調(diào)用SqlSession的增刪改查方法
        // 第一個參數(shù):表示statement的唯一標示
        User user = sqlSession.selectOne("test.findUserById", id);
        System.out.println(user);
        // 關(guān)閉資源
        sqlSession.close();
        return user;
    }
?
    @Override
    public List<User> findUsersByName(String name) {
        // 創(chuàng)建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
?
        // 調(diào)用SqlSession的增刪改查方法
        // 第一個參數(shù):表示statement的唯一標示
        List<User> list = sqlSession.selectOne("test.findUsersByName", name);
        System.out.println(list);
        // 關(guān)閉資源
        sqlSession.close();
        return list;
    }
?
    @Override
    public void insertUser(User user) {
        // 創(chuàng)建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
?
        // 調(diào)用SqlSession的增刪改查方法
        // 第一個參數(shù):表示statement的唯一標示
        sqlSession.insert("test.insertUser", user);
?
        System.out.println(user.getId());
        // 提交事務(wù)
        sqlSession.commit();
        // 關(guān)閉資源
        sqlSession.close();
    }
}

那么在測試類中

public class UserDaoTest {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setUp() throws Exception {
        // 讀取配置文件
        // 全局配置文件的路徑
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 創(chuàng)建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
    @Test
    public void testFindUserById() throws Exception {
        // 創(chuàng)建UserDao
        UserDao dao = new UserDaoImpl(sqlSessionFactory);
        User user = dao.findUserById(1);
        System.out.println(user);
    }
}

二、Mapper代理的開發(fā)方式

分析上面的代碼會發(fā)現(xiàn)有大量的重復(fù)的模板代碼,并且存在硬編碼【如sqlSession.insert("test.insertUser", user);】,

為了解決以上問題,故采用開發(fā)mapper接口(相當于dao接口)來進行dao的開發(fā),即通過開發(fā)mapper接口,將自動生成其代理類來進行操作。

其中Mapper代理使用的是jdk的代理策略。

如果采用Mapper代理的方式開發(fā)需要滿足如下開發(fā)規(guī)范

  • mapper接口的全限定名要和mapper映射文件的namespace值一致。
  • mapper接口的方法名稱要和mapper映射文件的statement的id一致。
  • mapper接口的方法參數(shù)類型要和mapper映射文件的statement的parameterType的值一致,而且它的參數(shù)是一個。
  • mapper接口的方法返回值類型要和mapper映射文件的statement的resultType的值一致。

首先開發(fā)mapper接口

public interface UserMapper {
    // 1、 根據(jù)用戶ID查詢用戶信息
    public User findUserById(int id) throws Exception;
    // 2、 添加用戶
    public void insertUser(User user) throws Exception;
}

之后創(chuàng)建User的映射文件,在config下創(chuàng)建mapper目錄然后創(chuàng)建UserMapper.xml(這是mybatis的命名規(guī)范,當然,也不是必須是這個名稱)。

由其規(guī)范可以確定其映射文件如下

(接口在包com.itheima.mybatis.mapper.UserMapper下面):

<mapper namespace="com.itheima.mybatis.mapper.UserMapper">
    <!-- 根據(jù)用戶ID查詢用戶信息 -->
    <select id="findUserById" parameterType="int" resultType="User">
        SELECT
        * FROM USER WHERE id =#{id}
    </select>
?
    <!-- 添加用戶 -->
    <insert id="insertUser" parameterType="com.itheima.mybatis.po.User">
        <selectKey keyProperty="id" resultType="int" order="AFTER">
            SELECT
            LAST_INSERT_ID()
        </selectKey>
?
        INSERT INTO USER
        (username,birthday,sex,address)
        VALUES(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

之后將映射文件加到全局配置文件即可。

然后便可以進行測試

public class UserMapperTest {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void setUp() throws Exception {
        // 讀取配置文件
        // 全局配置文件的路徑
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        // 創(chuàng)建SqlSessionFactory
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }
?
    @Test
    public void testFindUserById() throws Exception {
        // 創(chuàng)建UserMapper對象
        SqlSession sqlSession = sqlSessionFactory.openSession();
?
        // 由mybatis通過sqlsession來創(chuàng)建代理對象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.findUserById(1);
        System.out.println(user);
        sqlSession.close();
    }
    @Test
    public void testInsertUser() throws Exception {
        // 創(chuàng)建UserMapper對象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 由mybatis通過sqlsession來創(chuàng)建代理對象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setUsername("東哥hm19");
        user.setAddress("寶盛西里24號樓");
        mapper.insertUser(user);
        System.out.println(user.getId());
        sqlSession.commit();
        sqlSession.close();
    }
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中常用緩存Cache機制的實現(xiàn)

    Java中常用緩存Cache機制的實現(xiàn)

    這篇文章主要介紹了Java中常用緩存Cache機制的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 老生常談反射之Class類的使用(必看篇)

    老生常談反射之Class類的使用(必看篇)

    下面小編就為大家?guī)б黄仙U劮瓷渲瓹lass類的使用(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解Spring的@Value作用與使用場景

    詳解Spring的@Value作用與使用場景

    這篇文章主要介紹了詳解Spring的@Value作用與使用場景,Spring為大家提供許多開箱即用的功能,@Value就是一個極其常用的功能,它能將配置信息注入到bean中去,需要的朋友可以參考下
    2023-05-05
  • Java foreach相關(guān)原理及用法解析

    Java foreach相關(guān)原理及用法解析

    這篇文章主要介紹了Java foreach相關(guān)原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java實現(xiàn)高并發(fā)秒殺的七種方式

    Java實現(xiàn)高并發(fā)秒殺的七種方式

    本文主要介紹了Java實現(xiàn)高并發(fā)秒殺的六種方式,包括使用緩存、數(shù)據(jù)庫樂觀鎖、數(shù)據(jù)庫悲觀鎖、分布式鎖、隊列限流、令牌桶算法和限流器,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • 解決spring boot啟動掃描不到自定義注解的問題

    解決spring boot啟動掃描不到自定義注解的問題

    這篇文章主要介紹了解決spring boot啟動掃描不到自定義注解的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java synchronized關(guān)鍵字的用法

    java synchronized關(guān)鍵字的用法

    synchronized關(guān)鍵字我們大家都知道是線程同步關(guān)鍵字.總結(jié)一下日常的使用方法,還有一個坑.
    2016-05-05
  • 詳解Java實現(xiàn)JSONArray轉(zhuǎn)Map的三種實現(xiàn)方式

    詳解Java實現(xiàn)JSONArray轉(zhuǎn)Map的三種實現(xiàn)方式

    本文主要介紹了Java實現(xiàn)JSONArray轉(zhuǎn)Map的三種實現(xiàn)方式,本文只是自己常用的三種,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 淺析Java中print、printf、println的區(qū)別

    淺析Java中print、printf、println的區(qū)別

    以下是對Java中print、printf、println的區(qū)別進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 通過實例分析java多態(tài)

    通過實例分析java多態(tài)

    這篇文章主要介紹了通過實例分析java多態(tài),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10

最新評論