博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis知识点复习-03Dao与Mapper代理实现
阅读量:3959 次
发布时间:2019-05-24

本文共 2326 字,大约阅读时间需要 7 分钟。

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

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

文章目录

一.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>标签下面添加下面内容


UserMapper.java的内容:

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

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


UserMap.xml文件内容:

insert into user (username,birthday,sex,address) value(#{
username},#{
birthday},#{
sex},#{
address})

注意事项:根据上面开发规范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();//提交事务,否则会事务回滚

在这里插入图片描述

转载地址:http://dvlzi.baihongyu.com/

你可能感兴趣的文章
信安入门神级书单
查看>>
【IPFS指南】IPFS的竞争对手们(一)
查看>>
docker更换国内镜像
查看>>
CentOS 下 tree命令用法详解
查看>>
docker上传镜像至Registry时https报错解决方法
查看>>
安装 docker-compose (实测可用,妈妈再也不用担心被墙了)
查看>>
docker下删除none的images
查看>>
Linux提权获取敏感信息方法
查看>>
Ubuntu 16.04开机A start job is running for Raise network interface(5min 4s)解决方法
查看>>
Ubuntu 16.04开机隐藏菜单缩短时间
查看>>
Ubuntu 更换国内源
查看>>
Ubuntu16.04下Docker pull connection refused 解决办法
查看>>
通过 三大机制 揭秘 IPFS 工作原理
查看>>
Ubuntu 16.04卸载PostgresQL
查看>>
华为路由器交换机配置命令
查看>>
docker下运行kalilinux并配置ssh访问
查看>>
使用 Docker 容器应该避免的 10 个事情
查看>>
postgres基本操作(个人总结版)
查看>>
求数组中最长递增子序列
查看>>
用C++设计一个不能被继承的类
查看>>