Mybatis 实现 Dao 的传统方式

一、持久层 Dao 实现类

session 写在 UserDaoImpl 而不是放在 MybatisCRUDTest 中是因为 session 在这里需要调用,为了调用完封装,所以就都放在这里了,没写在外面,写在了方法里,也是为了调用完然后关闭。

public class UserDaoImpl implements UserDao {
    private SqlSessionFactory factory;
    public UserDaoImpl(SqlSessionFactory factory){
        this.factory=factory;
    }

    @Override
    public List<User> findAll() {
        //1.根据factory获取SQLSession对象
        SqlSession sqlSession = factory.openSession();
        //2.调用SQLSession中的方法,实现查询列表,省略了 getMapper 的创建代理的步骤过程,直接调用需要的方法
        List<User> users = sqlSession.selectList("mybatis.dao.UserDao.findAll");
        //3.释放资源
        sqlSession.close();
        return users;
    }

    @Override
    public void saveUser(User user) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用方法实现保存
        session.insert("mybatis.dao.UserDao.saveUser",user);
        //3.提交事务
        session.commit();
        //4.释放资源
        session.close();
    }

    @Override
    public void updateUser(User user) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用方法实现更新
        session.update("mybatis.dao.UserDao.updateUser",user);
        //3.提交事务
        session.commit();
        //4.释放资源
        session.close();
    }

    @Override
    public void deleteUser(int userId) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用方法实现更新
        session.update("mybatis.dao.UserDao.deleteUser",userId);
        //3.提交事务
        session.commit();
        //4.释放资源
        session.close();
    }

    @Override
    public User findById(int userId) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession中的方法,实现查询一个
        User user = session.selectOne("mybatis.dao.UserDao.findById",userId);
        //3.释放资源
        session.close();
        return user;
    }

    @Override
    public List<User> findByName(String username) {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession中的方法,实现查询列表
        List<User> users = session.selectList("mybatis.dao.UserDao.findByName",username);
        //3.释放资源
        session.close();
        return users;
    }

    @Override
    public int findTotal() {
        //1.根据factory获取SqlSession对象
        SqlSession session = factory.openSession();
        //2.调用SqlSession中的方法,实现查询一个
        Integer count = session.selectOne("mybatis.dao.UserDao.findTotal");
        //3.释放资源
        session.close();
        return count;
    }
}

二、测试

public class MybatisCRUDTest {
    private InputStream in;
    private SqlSessionFactory factory;
    private UserDao userDao;

    @Before//测试方法执行之前执行
    public void init() throws IOException {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建 SqlSessionFactory 工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        factory = builder.build(in);
        //3.创建 Dao 接口的实现类
        userDao = new UserDaoImpl(factory);
    }

    @After//测试方法执行之后执行
    public void destroy() throws IOException {
        //释放资源
        in.close();
    }

    @Test
    public void testFindALL() {
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }

    @Test
    public void testFindOne() {
        User user = userDao.findById(56);
        System.out.println(user);
    }

    @Test
    public void testSaveUser() throws Exception {
        User user = new User();
        user.setUsername("mybatis dao user");
        //6.执行操作
        userDao.saveUser(user);
    }

    @Test
    public void testUpdateUser() throws Exception {
        //1.根据 id 查询
        User user = userDao.findById(41);
        //2.更新操作
        user.setAddress("北京市天安门");
        userDao.updateUser(user);
    }

    @Test
    public void testDeleteUser() throws Exception {
        userDao.deleteUser(56);
    }

    @Test
    public void testFindTotal() throws Exception {
        int res = userDao.findTotal();
        System.out.println(res);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南淮北安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值