mapper和dao的不同点和相同点

接口代理方式(mapper):

使用Mapper接口的代理方式,    根据方法名和映射文件中指令ID进行绑定,动态调用相关指令信息。

指令id方式(dao):

根据mybatis将映射信息封装为:MappedStatement对象,存在Map中,将namespace和指令ID当做key,根据key获取对应MappedStatement对象,进行数据库操作。

上项目:

使用dao的项目结构

使用mapper的项目结构

 

在这两个项目中,只有UserDao,UserMapper和test目录里的文件不同,其他完全相同,

UserDao文件

package com.example.dao;

import com.example.domain.User;
import com.example.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserDao {


    //查询全部
    public List<User> selectAll() {
        SqlSession session = SqlSessionUtils.getSession();
        List<User> list = session.selectList("com.example.Mapper.UserMapper.selectAll");
        session.close();
        return list;
    }

    //根据id查询
    public User queryById(int id) {
        SqlSession session = SqlSessionUtils.getSession();
        User user = session.selectOne("com.example.Mapper.UserMapper.queryById", id);
        session.close();
        return user;
    }

    //添加
    public int addUser(User user) {
        SqlSession session = SqlSessionUtils.getSession();
        int result = session.insert("com.example.Mapper.UserMapper.addUser", user);
        //提交事务
        session.commit();
        session.close();
        return result;
    }

    //通过id更新
    public int updateUserById(User user) {
        SqlSession session = SqlSessionUtils.getSession();
        int result = session.update("com.example.Mapper.UserMapper.updateUserById", user);
        session.commit();
        session.close();
        return result;
    }

    //根据id删除
    public int deleteUserById(int id) {
        SqlSession session = SqlSessionUtils.getSession();
        int result = session.delete("com.example.Mapper.UserMapper.deleteUserById", id);
        session.commit();
        session.close();
        return result;
    }
}

UserMapper文件

package com.example.mapper;

import com.example.domain.User;

import java.util.List;

public interface UserMapper {
    /**
     * 全查询
     * @return
     */
    public List<User> selectAll();
    /**
     * 根据ID查询一个
     * @return
     */
    public User queryById(int id);
    /**
     * 添加用户
     * @return
     */
    public int addUser(User user);
    /**
     * 修改用户
     * @return
     */
    public int updateUserById(User user);

    /**
     * 删除用户
     * @return
     */
    public int deleteUserById(int id);
}

由此可见,UserDao实现了方法,而UserMapper则只是写了接口,里面内容的实现交给了MyBatis去实现。

而UserDao调用和UserMapper调用就只是细微的差距,差异点如下

UserDao的调用

package com.example.test;
import com.example.dao.UserDao;
import com.example.domain.User;
import org.junit.Test;

import java.util.Date;
import java.util.List;

public class MyBatisTest {
    private UserDao userDao = new UserDao();

    //查询全部
    @Test
    public void test1(){
        List<User> userList = userDao.selectAll();
        userList.forEach(System.out::println);
    }

    //根据id进行查询
    @Test
    public void test2(){
        User SelectUserById = userDao.queryById(2);
        System.out.println("user = "+SelectUserById);
    }

    //插入新user
    @Test
    public void test3(){
        User user = new User("0000", 22, "男", "北京", new Date(2001 - 10 - 2));
        int res = userDao.addUser(user);
        System.out.println(res);
    }

    //根据id进行修改
    @Test
    public void test4(){
//        int res2 = userDao.updateUserById(new User(8,"马化腾",55,"女","北京",new Date(2001-10-2)));
//        System.out.println(res2);
        UserDao userDao = new UserDao();
        User user = new User();
        user.setId(7);
        user.setName("王老七");
        user.setAge(52);
        user.setSex("女");
        user.setAddress("湖南");
        user.setBirth(new Date(2001-10-2));
        int rows = userDao .updateUserById(user);
        System.out.println("rows = " + rows);
    }

    //删除用户
    @Test
    public void test5(){
        int a = userDao.deleteUserById(8);
        System.out.println(a);
    }

}

 UserMapper的调用

package com.example.test;

import com.example.domain.User;
import com.example.mapper.UserMapper;
import com.example.utils.SqlSessionUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;
import java.util.List;
//增删改需要在代码后加上session.commit();
public class MyBatisTest3 {
        SqlSession sqlSession;
        @Before
        public void init() {
            // 获取SqLSession对象
            sqlSession = SqlSessionUtils.getSession();
        }

        @After
        public void destory() {
            sqlSession.commit();
            sqlSession.close();
        }

        @Test
        public void test1() {
        // 通过SqLSession获取接口的实现类对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.selectAll();
            userList.forEach(System.out::println);
        }

        //根据id查询用户
        @Test
        public void test2(){
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            User user = mapper.queryById(3);
            System.out.println(user);
        }

        //插入用户
    @Test
    public void test3(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        //user.setId(9);
        user.setName("33");
        user.setAge(55);
        user.setSex("女");
        user.setAddress("湖南");
        user.setBirth(new Date(2001-10-2));
        int rows = mapper.addUser(user);
        System.out.println("rows = " + rows);
    }

    //根据id修改用户
    @Test
    public void test4(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int res2 = mapper.updateUserById(new User(9,"马化腾",55,"男","北京",new Date(2001-10-2)));
        System.out.println("res2 = " +res2);
    }

    //根据id删除用户
    @Test
    public void test5(){
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int a = mapper.deleteUserById(7);
        System.out.println(a);
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值