Mybatis开发之mapper代理实现自定义接口(常用)

通过mapper代理实现自定义接口

  • 自定义接口,接口里面定义定义相关的业务方法
  • 编写方法相对应的Mapper.xml、
  • 定义完接口后,Mapper会自动帮我们生成实现类和对象。

1.自定义接口

package com.southwind.repository;

import com.southwind.entity.Account;

import java.util.List;

public interface AccountRepository {
public int save(Account account);
public int update(Account account);
public int deleteById(long id);
public List<Account> findAll();
public Account findById(long id);
}

2.创建接口对应的Mapper.xml,定义接口方法中的SQL语句

Mapper.xml中的statement标签课根据Sql执行的业务选择insert,delete,update,select。

Mybatis框架会根据规则自动创建接口实现类的代理对象,不用自己手动再创建实现类。

为了方便,直接把mapper文件写在与接口相同的文件夹下。

规则:

  • Mapper.xml中namespace为接口的全类名
  • Mapper.xml中statement的id为接口中对应的方法名
  • Mapper.xml中statemnet的parameterType和接口中对应的方法的参数类型一致
  • Mapper.xml中statement的resultType和接口中的对应方法返回值基本一致。
<?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="com.southwind.repository.AccountRepository">
<insert id="save" parameterType="com.southwind.entity.Account"></insert>
<update id="update" parameterType="com.southwind.entity.Account">
update t_account set username = #{username},password=#{password},age=#{age} where id =#{id}
</update>
<delete id="delete" parameterType="long">
delete from t_account where id = #{id}
</delete>
<!--AccountRepository接口中,findAll方法没有参数不用写parameterType-->
<!--有返回值,但是列表类型的返回值只写泛型里面的类Account的类型即可-->
<select id="findAll" resultType="com.southwind.entity.Account">
select * from t_account
</select>
<select id="findById" parameterType="long" resultType="com.southwind.entity.Account">
select * from t_account where id =#{id}
</select>
</mapper>

3.在全局配置文件config.xml中注册AccountRepository.xml

    <mappers>
<!--原生接口注册-->
<mapper resource="com/southwind/mapper/AccountMapper.xml"></mapper>
<!--Mapper代理接口注册 -->
<mapper resource="com/southwind/repository/AccountMapper.xml"></mapper>
</mappers>

test

package com.southwind.test;

import com.southwind.entity.Account;
import com.southwind.repository.AccountRepository;
import com.sun.org.apache.bcel.internal.generic.ACONST_NULL;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream;
import java.sql.SQLOutput;
import java.util.List; public class Test2 {
public static void main(String[] args) {
InputStream inputStream = Test2.class.getClassLoader().getResourceAsStream("config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取接口的代理对象
AccountRepository accountRepository = sqlSession.getMapper(AccountRepository.class);
//添加对象
Account account1 = new Account(2l,"李四","123",25);
Account account2= new Account(3l,"王五","123",26);
int save = accountRepository.save(account1);
int save2 = accountRepository.save(account2);
System.out.println(save);
System.out.println(save2);
//增删改操作都需要提交事务数据库才会更新,查询不需要提交事务
sqlSession.commit();
//查询所有对象
List<Account> list = accountRepository.findAll();
for (Account account:list){
System.out.println(account);
}
//通过ID查询 Account account3 = accountRepository.findById(2);
System.out.println("查询ID为2的用户结果:"+account3);
//修改对象
Account account4 = accountRepository.findById(2);
account4.setUsername("小明");
account4.setPassword("123124");
account4.setAge(37);
accountRepository.update(account4); List<Account> list2 = accountRepository.findAll();
for (Account account:list2){
System.out.println(account);
}
//通过ID删除对象
accountRepository.deleteById(4);
sqlSession.commit();
sqlSession.close();
}
}

Mybatis开发之mapper代理实现自定义接口(常用)的更多相关文章

  1. Mybatis-Dao层开发之Mapper接口

    Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mapper接口开发 ...

  2. JavaEE开发之SpringMVC中的自定义拦截器及异常处理

    上篇博客我们聊了<JavaEE开发之SpringMVC中的路由配置及参数传递详解>,本篇博客我们就聊一下自定义拦截器的实现.以及使用ModelAndView对象将Controller的值加 ...

  3. mybatis框架(2)---mapper代理方法

    mapper代理方法 在我们在写MVC设计的时候,都会写dao层和daoimp实现层,但假如我们使用mapper代理的方法,我们就可以不用先daoimp实现类 当然这得需要遵守一些相应的规则: (1) ...

  4. dt二次开发之-url伪静态的自定义

    dt内核的方便性在于代码内核完全开源,都可以根据自身需要进行优化整改,个人在这段时间的深入研究,发现这套内核的方便性,今天继续给大家分享下DT的url伪静态如何自定义函数. url自定义文件是在api ...

  5. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  6. mybatis——使用mapper代理开发方式

    ---------------------------------------------------------------generatorConfig.xml------------------ ...

  7. Spring+SpringMVC+MyBatis深入学习及搭建(二)——MyBatis原始Dao开发和mapper代理开发

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6869133.html 前面有写到Spring+SpringMVC+MyBatis深入学习及搭建(一)——My ...

  8. 用mybatis实现dao的编写或者实现mapper代理

    一.mybatis和hibernate的区别和应用场景hibernate:是一个标准的ORM框架(对象关系映射).入门门槛较高的,不需要写sql,sql语句自动生成了.对sql语句进行优化.修改比较困 ...

  9. 【mybatis深度历险系列】深入浅出mybatis中原始dao的开发和mapper代理开发

    使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法.mybatis在进行dao开发的时候,涉及到三姐妹,分别是SqlSessionFactoryBuilder ...

  10. Mybatis学习总结(二)——Mapper代理开发

    一.概要 1.原始DAO开发中存在的问题:(1)DAO实现方法体中存在很多过程性代码.(2)调用SqlSession的方法(select/insert/update)需要指定Statement的id, ...

随机推荐

  1. Qt-FFmpeg开发-视频播放【软解码 + OpenGL显示RGB图像】(3)

    Qt-FFmpeg开发-视频播放[软解码 + OpenGL显示RGB图像] 目录 Qt-FFmpeg开发-视频播放[软解码 + OpenGL显示RGB图像] 1.概述 2.实现效果 3.FFmpeg软 ...

  2. 【HTML】HTML特殊字符大全

    使用方法:这些字符属于unicode字符集,所以,你的文档需要声明为UTF-8:下面符号列表的后面有两列编号,它们并不太一样,第一列是用于html的,你需要在前面加上&#符号:第二列可以用于C ...

  3. js获取浏览器宽度和高度值

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>请调整浏览器窗口</t ...

  4. DOM04~

    事件对象及属性 事件对象 事件流 事件委托 综合案例 事件对象 获取事件对象 事件对象常用属性 什么是事件对象? 1.1 也是个对象,这个对象里有事件触发时的相关信息 1.2 例如鼠标点击事件中,事件 ...

  5. IT之软件公司组织架构

    总结一下软件企业的组织架构,软件公司大部分都很年轻,整个行业还在调整期,一般规模都在300人以内,现在国内大型的软件产品公司都不是靠软件起家的,国内软件三强:华为.中信.海尔都是从硬件甚至是家电做起的 ...

  6. mysql数据库查看版本号

    1.在命令行登录mysql,即可看到mysql的版本号 [root@mysql02 bin]# ./mysql -uroot -pEnter password: Welcome to the MySQ ...

  7. 2022-05-23内部群每日三题-清辉PMP

    1.在项目执行过程中,职能经理识别到有关外包团队的新内部风险,职能经理要求项目经理提供一个不会对项目产生负面影响的快速解决方案.项目经理应该怎么做? A.制定风险分解结构(RBS) B.根据影响的严重 ...

  8. centos8 安装docker启动失败

    借鉴https://www.zqcnc.cn/post/71.html systemctl status docker● docker.service - Docker Application Con ...

  9. uniapp使用百度地图

    要使用第三方百度地图,首先要去百度地图官方申请一个密钥,之后引入百度地图的API文件,参考使用文档即可开发使用.而在uniapp中是没法直接引入百度地图API文件的,我们要结合uniapp中的web- ...

  10. Chrome禁用开发者工具

    在一次工作中,所做的项目要求页面中不能右击,不能打开F12.一般来说可以禁用F12的按键,但是可以通过开发者工具进入.经过个人实验,以下方法适用于谷歌浏览器.火狐浏览器,以及使用谷歌内核的浏览器(如Q ...