MyBatis(5)MyBatis DAO接口开发

SqlSessionFactory, SqlSession范围和生命周期

《MyBatis(1)框架原理》 中提到, SqlSessionFactory的作用是加载MyBatis的配置文件并创建SqlSession,而SqlSession的作用则是操作数据库并返回相应的结果。因此:
* SqlSessionFactory
SqlSessionFactory由SqlSessionFactoryBuilder加载配置文件创建。一旦被创建就应该在应用的运行期间一直存在,不需要重复加载配置文件来重新创建它。因此,其生命周期为从应用开始直至应用停止。
* SqlSession
SqlSession的实例在MyBatis中不是线程安全的,因此在每一次请求时,都需要新建一个SqlSession来响应请求。其生命周期为方法范围内。但是在每一次请求结束后,都需要关闭此SqlSession。

DAO接口开发

以下程序是在《 MyBatis(4)MyBatis入门程序 》 的基础上修改而来的。如果你没有从前面博客看过来,可以去《 MyBatis(4)MyBatis入门程序 》 中下载代码然后对照修改即可。

需求分析

对数据库中的用户表进行按ID查询、按用户名模糊查询、插入新用户、按ID删除用户、更新指定用户信息。

需求设计

《 MyBatis(4)MyBatis入门程序 》 中,我们已经完成了以上需求的简单设计。在此,直接设计DAO接口以及实现DAO接口。

DAO接口
public interface UserDao {
    public List<UserPojo> selectUser () throws Exception;

    public UserPojo selectUserByID (int id) throws Exception;

    public List<UserPojo> selectUserByName (String name) throws Exception;

    public int insertUser (UserPojo user) throws Exception;

    public void delUserByID (int id) throws Exception;

    public void updateUser (UserPojo user) throws Exception;
}
DAO接口实现
1、注入SqlSessionFactory
public class UserDaoImpl implements UserDao {
    private SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
}
2、根据ID查询用户
@Override
public UserPojo selectUserByID(int id) throws Exception {
    //创建SqlSession
    SqlSession sqlSession = null;

    try {
        sqlSession = sqlSessionFactory.openSession();

        //通过sqlSession操作数据库
        return sqlSession.selectOne("mybatisDemo1.selectUserByID", id);
    } finally {
        if (null != sqlSession) {
            //释放资源
            sqlSession.close();
        }
    }
}
3、根据用户名模糊查找
@Override
public List<UserPojo> selectUserByName(String name) throws Exception {
    //创建SqlSession
    SqlSession sqlSession = null;

    try {
        sqlSession = sqlSessionFactory.openSession();

        //通过sqlSession操作数据库
        return sqlSession.selectList("mybatisDemo1.selectUserByName", name);
    } finally {
        if (null != sqlSession) {
            //释放资源
            sqlSession.close();
        }
    }
}
4、新增加用户
@Override
public int insertUser(UserPojo user) throws Exception {
    //创建SqlSession
    SqlSession sqlSession = null;

    try {
        sqlSession = sqlSessionFactory.openSession();
        //通过sqlSession操作数据库
        sqlSession.insert("mybatisDemo1.insertUser", user);

        sqlSession.commit();

        return user.getId();
    } finally {
        if (null != sqlSession) {
            //释放资源
            sqlSession.close();
        }
    }
}
5、按ID删除用户
@Override
public void delUserByID(int id) throws Exception {
    //创建SqlSession
    SqlSession sqlSession = null;

    try {
        sqlSession = sqlSessionFactory.openSession();

        //通过sqlSession操作数据库
        sqlSession.delete("mybatisDemo1.delUserByID", id);

        sqlSession.commit();
    } finally {
        if (null != sqlSession) {
            //释放资源
            sqlSession.close();
        }
    }
}
6、更新指定用户信息
@Override
public void updateUser(UserPojo user) throws Exception {
    //创建SqlSession
    SqlSession sqlSession = null;

    try {
        sqlSession = sqlSessionFactory.openSession();
        sqlSession.update("mybatisDemo1.updateUser", user);

        sqlSession.commit();
    } finally {
        if (null != sqlSession) {
            //释放资源
            sqlSession.close();
        }
    }
}
测试

见代码(代码地址在最下面)

DAO接口开发总结

1、在每一个需求设计的过程中,可以看到有很多的模板代码。如:

sqlSession = sqlSessionFactory.openSession();
sqlSession.commit();

if (null != sqlSession) {
   //释放资源
   sqlSession.close();
}

2、在SqlSession调用各个方法操作数据库时,由于MyBatis是采用泛型的设计,在传入参数时,如果类型与SQL映射语句中的参数类型不一致,在编译阶段也不会有提示错误,一定要等到运行阶段。

代码

1、git@code.csdn.net:xl890727/mybatisdemo.git
2、https://code.csdn.net/xl890727/mybatisdemo.git
中得dao分支

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值