MyBatis知识点复习-03Dao与Mapper代理实现

MyBatis知识点复习-03Dao与Mapper代理实现

前面我们都是在使用sqlSession的方法,比如插入时,我们调用sqlSession.insert()我们传入了User.xml里面的select标签的id值"insertUser"作为方法名传入到sqlSession.insert()里面来,那么在本章节将不再使用sqlSession的这些方法((当然在讲dao时内部还会用到),而是新的方式,具体见下面

上一篇:MyBatis知识点复习-02其他入门操作

下一篇:MyBatis知识点复习-04全局配置文件的properties和alias的讲解

一.DAO讲解

这一部分是为了过渡到Mapper讲的实际开发不会写这个(当然如果你有Web的基础本部分会十分轻松)
实际上Dao只是三层架构中的第三层,即数据访问层,另外两层是web(界面)层与service(业务逻辑层)层

1.首先创建下面的目录与文件:
在这里插入图片描述
2.下面演示一下findUserById方法的实现
UserDaoImpl.java类代码:

package dao;
import domain.User;
import org.apache.ibatis.session.SqlSession;

public class UserDaoImpl implements UserDao {
    SqlSession sqlSession;
    public UserDaoImpl(SqlSession session){
        sqlSession=session;
    }
    @Override
    public User findUserById(String funcName,int id) {
            User user = sqlSession.selectOne(funcName,id);
            return user;
    }
}

UserDao.java接口代码:

package dao;
import domain.User;

public interface UserDao {
    public User findUserById(String funcName,int id);
}

删除Tset方法里面的内容使用下面代码

     	UserDaoImpl userDao = new UserDaoImpl(sqlSession);
        User user = userDao.findUserById("findUserById", 10);
        System.out.println(user);
        sqlSession.commit();//提交事务,否则会事务回滚

其他的内容前面章节已经配置好了
在这里插入图片描述

二.DAO的Mapper代理实现

目录一我们讲解了编写dao接口UserDao,同时又手动编写了dao接口实现类UserDaoImpl类,下面的这种方式我们将不去手动实现这个接口的类,而是使用mapper代理的方式来实现
这一部分是本讲的核心内容
1.开发规范

1.mapper接口的全限定名要和mapper映射文件的namespace的值相同。
2.mapper接口的方法名称要和mapper映射文件中的statement的id相同;
3.mapper接口的方法参数只能有一个,且类型要和mapper映射文件中statement的parameterType的值保持一致。
4.mapper接口的返回值类型要和mapper映射文件中statement的resultType值或resultMap中的type值保持一致;

2.准备工作
下面红圈为新增的部分(如果你没看前面的章节你会觉得有很多多余的东西,甚至很懵逼)
首先创建下面的目录与文件:

在这里插入图片描述
然后SqlMapConfig.xml文件的<mappers>标签下面添加下面内容

<mapper resource="sqlMap/UserMapper.xml"></mapper>

UserMapper.java的内容:

package mapper;
import domain.User;
public interface UserMapper {
    //返回插入后影响的行数
    public int saveUser(User user);
}

根据上面的开发规范3我们知道saveUser的参数只可以有一个


UserMap.xml文件内容:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.UserMapper">
    <insert id="saveUser" parameterType="domain.User">
        insert into user (username,birthday,sex,address) value(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

注意事项:根据上面开发规范1,2我们知道namespace的值必须是src目录下的接口的完整目录,在insert里的id必须是接口里面的方法名即saveUser,然后没指定resultType也一样可以返回int类型(即影响的行数)。


删除Tset方法里面的内容使用下面代码

  User user = new User();
  user.setBirthday(new Date());
  user.setAddress("北京");
  user.setUsername("李成");
  user.setSex("男");
  UserMapper mapper = sqlSession.getMapper(UserMapper.class);
  mapper.saveUser(user);
  sqlSession.commit();//提交事务,否则会事务回滚

在这里插入图片描述
上一篇:MyBatis知识点复习-02其他入门操作

下一篇:MyBatis知识点复习-04全局配置文件的properties和alias的讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值