Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】

在Mybatis开发中,使用到的是代理Dao的方式实现增删改查,这样就不需要在写Dao的实现类
但是Mybatis也支持写Dao实现类!即DaoImpl
直接上DaoImpl,之前的代码可以参考前面几篇文章。

DaoImpl类
package com.itheima.dao.impl;

import com.itheima.dao.IUserDao;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;

/**
 * Created by Administrator on 2019/10/15.
 */
public class UserDaoImpl implements IUserDao {
    private SqlSessionFactory factory;

    public UserDaoImpl(SqlSessionFactory factory) {
        this.factory = factory;
    }

    @Override
    public List<User> findAll() {
//        1、根据factory获取Sqlsession对象
        SqlSession sqlSession = factory.openSession();
//        2、调用SqlSession中的方法,实现查询列表
        List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findAll");//参数就是能获取配置信息的key
        for (User use : user) {
            System.out.println(use);
        }
//        3、释放资源
        sqlSession.close();
        return user;
    }

    @Override
    public void saveUser(User user) {
        SqlSession sqlSession = factory.openSession();
        sqlSession.insert("com.itheima.dao.IUserDao.saveUser",user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void updateUser(User user) {
        SqlSession sqlSession = factory.openSession();
        sqlSession.update("com.itheima.dao.IUserDao.updateUser",user);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public void deleteUser(Integer userId) {
        SqlSession sqlSession = factory.openSession();
        sqlSession.update("com.itheima.dao.IUserDao.deleteUser",userId);
        sqlSession.commit();
        sqlSession.close();
    }

    @Override
    public User findById(Integer userId) {
        SqlSession sqlSession = factory.openSession();
        User user = sqlSession.selectOne("com.itheima.dao.IUserDao.findById", userId);
        sqlSession.commit();
        sqlSession.close();
        return user;
    }

    @Override
    public List<User> findByName(String username) {
        SqlSession sqlSession = factory.openSession();
//        2、调用SqlSession中的方法,实现查询列表
        List<User> user = sqlSession.selectList("com.itheima.dao.IUserDao.findByName",username);//参数就是能获取配置信息的key
//        3、释放资源
        sqlSession.close();
        return user;
    }

    @Override
    public int findUserCount() {
        SqlSession sqlSession = factory.openSession();
        Integer count = sqlSession.selectOne("com.itheima.dao.IUserDao.findUserCount");
        return count;
    }

    @Override
    public List<User> findUserByVo(QueryVo vo) {
        return null;
    }
}

单元测试
package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.dao.impl.UserDaoImpl;
import com.itheima.domain.QueryVo;
import com.itheima.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.Date;
import java.util.List;

/**
 * 测试Mybatis的crud操作
 */
public class mybatis {
    private InputStream in;
    private IUserDao userDao;

    @Before //用于在测试方法之前执行
    public void init() throws Exception {
        //        1、读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //        2、获取sqlSessionfactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //        3、使用工厂对象,创建dao对象
        userDao = new UserDaoImpl(factory);
    }

    @After //用于在测试方法之后执行
    public void destory() throws Exception {
        in.close();
    }

    /**
     * 测试查询所有
     */
    @Test
    public void findAll() {
        //     5、执行查询所有方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
    }

    /**
     * 测试保存操作
     */
    @Test
    public void testSave() {
        User user = new User();
        user.setUsername("张XX");
        user.setAddress("北京 海淀区");
        user.setSex("男");
        user.setBirthday(new Date());
        System.out.println("保存之前"+user);
        userDao.saveUser(user);
        System.out.println("保存之后"+user);
    }

    /**
     * 测试更新操作
     */
    @Test
    public void testUpdate() {
        User user = new User();
        user.setId(52);
        user.setUsername("张XXABC");
        user.setAddress("北京 海淀区");
        user.setSex("男");
        user.setBirthday(new Date());
        userDao.updateUser(user);
    }

    /**
     * 测试删除操作
     */
    @Test
    public void testDelete() {
        userDao.deleteUser(51);
    }

    /**
     * 测试id查询一个用户
     */
    @Test
    public void testFindById() {
        //     5、执行查询所有方法
        User user = userDao.findById(48);
        System.out.println(user.getId());
        System.out.println(user.getAddress());
        System.out.println(user.getBirthday());
        System.out.println(user.getUsername());
    }

    /**
     * 测试模糊查询
     */
    @Test
    public void testFindByName() {
        //     5、执行查询所有方法
        List<User> users = userDao.findByName("%王%");
        for (User user : users){
            System.out.println(user);
        }
    }

    /**
     * 查询用户总个数
     */
    @Test
    public void testFindUserCount(){
        int count = userDao.findUserCount();
        System.out.println(count);
    }
    @Test
    public void testFindByQueryVo(){
        QueryVo queryVo = new QueryVo();
        User user = new User();
        user.setUsername("%王%");
        queryVo.setUser(user);
        List<User> users = userDao.findUserByVo(queryVo);
        for(User use :users){
            System.out.println(use);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值