美文网首页
使用getMapper()面向接口编程

使用getMapper()面向接口编程

作者: 问瑾遗 | 来源:发表于2019-04-06 16:36 被阅读0次

前言: 前面写代码时我们使用sqlSession.selectList("SQLID"),完全是在面向String字符串类型的SQLID编程,虽然能达到操作数据库的目的,但这种代码写法是不规范的。理想中规范的写法是面向接口编程。MyBatis提供了“接口-SQL映射” 的功能。
还记得使用MyBatis Generator工具操作MySQL数据库示例中生成的xxxMapper.xml与xxxMapper.java文件,两者是对应的,这就是“接口-SQL映射”
对应关系:
namespace对应包名和接口名:

//xxxMapper.xml
<mapper namespace="mapping.UserinfoMapper">
//xxxMapper.java
package mapping;
public interface UserinfoMapper {}

id对应方法名,parameterType对应参数类型:

//xxxMapper.xml
<insert id="insert" parameterType="bean.Userinfo">
//xxxMapper.java
int insert(Userinfo record);

示例:
使用MyBatis Generator工具操作MySQL数据库示例基础上操作
修改修改Test.java如下:

package test;

import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import bean.Userinfo;
import mapping.UserinfoMapper;

public class Test {

    public static void main(String[] args) {
        try {
            Userinfo userinfo=new Userinfo();
            userinfo.setUsername("张三");
            userinfo.setPassword("123456");
            userinfo.setAge(80);
            
            String resource="mybatis-config.xml";
            InputStream inputStream=Resources.getResourceAsStream(resource);
            SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
            SqlSession sqlSession=sessionFactory.openSession();
            
            //通过动态代理设计模式创建出接口UserinfoMapper.java的实现类
            UserinfoMapper userinfoMapper=sqlSession.getMapper(UserinfoMapper.class);
            System.out.println(userinfoMapper);
            
            userinfoMapper.insert(userinfo);
            
            sqlSession.commit();
            sqlSession.close();
            /*userinfo.getId()获取新插入记录在数据库中自动增长生成的值
             * 要获取到值必须将UserinfoMapper.xml中<insert id="insert" parameterType="bean.Userinfo">修改为
             * <insert id="insert" parameterType="bean.Userinfo" useGeneratedKeys="true" keyProperty="id">
             * 否则获取到null,后面的文章再详解*/
            System.out.println("createId="+userinfo.getId());
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}

OutPut:

org.apache.ibatis.binding.MapperProxy@36f6e879
createId=xxx     //数据库自动增长生成的一个整数值

这里MyBatis动态地创建出了接口UserinfoMapper.java的实现类,示例代码如下:

UserinfoMapper userinfoMapper=sqlSession.getMapper(UserinfoMapper.class);
System.out.println(userinfoMapper);

注意: 这里userinfo.getId()获取新插入记录在数据库中自动增长生成的值。想要获取到值必须将UserinfoMapper.xml中如下代码

<insert id="insert" parameterType="bean.Userinfo">

修改为

 <insert id="insert" parameterType="bean.Userinfo" useGeneratedKeys="true" keyProperty="id">

否则获取到null,关于GeneratedKeys后面的文章再详解。

相关文章

  • 使用getMapper()面向接口编程

    前言: 前面写代码时我们使用sqlSession.selectList("SQLID"),完全是在面向String...

  • MyBatis之使用注解开发

    六、使用注解开发 目录:面向接口编程、使用注解开发、CRUD、Lombok 1.面向接口编程 之前都学过面向对象编...

  • 《Oracle Java SE编程指南》15-05:面向接口编程

    内容导航: 前言 1、接口的作用 2、面向接口编程 前言 接口的核心作用是面向接口编程。 面向接口编程 是一个非常...

  • Android 面向接口编程

    关键词:Android、POP、面向接口编程 、面向过程、面向协议 一、概述 面向接口编程是面向对象编程的一种实...

  • Mybatis 注解1.0

    8、使用注解开发 8.1、面向接口编程 - 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我...

  • Android 网络框架--Retrofit2 架构分析

    面向接口编程 面向接口编程,模块化编程的必备技能,其乃实现解耦,增强扩展性的重要手段。 面向接口编程具体指的是什么...

  • 面向指针编程(一)

    面向对象编程,面向设计模式编程(亦即设计模式),面向接口编程,面向模板编程(亦即泛型编程),面向函数编程(亦即函数...

  • 8、使用注解开发

    8.1:面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 ...

  • iOS面向接口编程(面向protocol编程)

    iOS面向接口编程(面向protocol编程) 前言 面向接口编程已经是老生常谈了,但是最近在做项目重构中发现,团...

  • Mybatis面向接口编程实践与mapper代理对象生成

    一、Mybatis面向接口编程实践 (一)使用xml的方式 1.定义mapper接口 Mapper接口就是一个普通...

网友评论

      本文标题:使用getMapper()面向接口编程

      本文链接:https://www.haomeiwen.com/subject/anwriqtx.html