Mybatis开发dao的方法--原始dao篇

来源:互联网 发布:软件实施管理制度 编辑:程序博客网 时间:2024/05/16 08:18

题记

摘抄自传智播客燕青老师,下面的SqlSession使用范围
4.1 SqlSession使用范围
4.1.1 SqlSessionFactoryBuilder
通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory
将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。
在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。
4.1.2 SqlSessionFactory
通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。
将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。
4.1.3 SqlSession
SqlSession是一个面向用户(程序员)的接口。
SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。
SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。
SqlSession最佳应用场合在方法体内,定义成局部变量使用。

原始Dao开发Mybatis

ResourceDao接口

    public interface ResourceDao {        int deleteByPrimaryKey(String resourceId);        int insert(Resource record);        Resource selectByPrimaryKey(String resourceId);        int updateByPrimaryKey(Resource record);    }

ResourceDao接口实现类

public class ResourceDaoImpl implements ResourceDao {    private SqlSessionFactory sqlSessionFactory;    public ResourceDaoImpl(SqlSessionFactory sqlSessionFactory) {        this.sqlSessionFactory = sqlSessionFactory;    }    @Override    public int deleteByPrimaryKey(String resourceId) {        SqlSession sqlSession = null;        int rs = 0;        try {            sqlSession = sqlSessionFactory.openSession();            rs = sqlSession.delete("com.pingan.hdht.dao.ResourceMapper.deleteByPrimaryKey", resourceId);//第一个参数为命名空间加上statement的id            sqlSession.commit();        } catch (Exception e) {            e.printStackTrace();        } finally {            if (sqlSession != null) {                sqlSession.close();            }        }        return rs;    }    @Override    public int insert(Resource record) {        SqlSession sqlSession = null;        int rs = 0;        try {            sqlSession = sqlSessionFactory.openSession();            rs = sqlSession.insert("com.pingan.hdht.dao.ResourceMapper.insert", record);//第一个参数为命名空间加上statement的id            sqlSession.commit();        } catch (Exception e) {            e.printStackTrace();        } finally {            if (sqlSession != null) {                sqlSession.close();            }        }        return rs;    }    @Override    public Resource selectByPrimaryKey(String resourceId) {        SqlSession sqlSession = null;        Resource rs = null;        try {            sqlSession = sqlSessionFactory.openSession();            rs = sqlSession.selectOne("com.pingan.hdht.dao.ResourceMapper.selectByPrimaryKey", resourceId);//第一个参数为命名空间加上statement的id            sqlSession.commit();        } catch (Exception e) {            e.printStackTrace();        } finally {            if (sqlSession != null) {                sqlSession.close();            }        }        return rs;    }    @Override    public int updateByPrimaryKey(Resource record) {        SqlSession sqlSession = null;        int rs = 0;        try {            sqlSession = sqlSessionFactory.openSession();            rs = sqlSession.update("com.pingan.hdht.dao.ResourceMapper.insert", record);//第一个参数为命名空间加上statement的id            sqlSession.commit();        } catch (Exception e) {            e.printStackTrace();        } finally {            if (sqlSession != null) {                sqlSession.close();            }        }        return rs;    }

测试实例就以根据主键查询为实例来介绍,其他增删改类似

public class ResourceDaoImplTest {    private static SqlSessionFactory sqlSessionFactory = null;    /**     * <p>     * 行为描述:     * 状态转变:     * 定义的算法:     * 操作系统/硬件依赖:     * 允许的实现变化:     * 安全约束:     * </p>     * @param     * @return     * @throws     * @see     * @since %I%     */    @BeforeClass    public static void setUpBeforeClass() throws Exception {        //mybatis配置文件        String resource = "SqlMapConfig.xml";        //得到配置文件流        InputStream inputStream = Resources.getResourceAsStream(resource);        //创建会话工厂,传递mybatis的配置文件信息        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    }    @Test    public void testSelectByPrimaryKey() {        ResourceDao resourceDao = new ResourceDaoImpl(sqlSessionFactory);        Resource resource = resourceDao.selectByPrimaryKey("1");        System.out.println(resource.getResourceDesc());    }}

运行结果如下
这里写图片描述
以上就是Mybatis开发dao的方法–原始dao开发的方式

0 0