Mybatis接口与映射文件

在传统的MVC模式中,持久层有DAO接口和DAO实现类,DAO实现类在mybatis中就显得很鸡肋了;
1611808-20190711203302390-1339219843.png

这些都是模板化代码,都可以通过配置自动生成然后通过AOP思想动态的切入。

实际开发中就是接口和映射文件,没有实现类。

导入依赖

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.41</version>
    </dependency>
  </dependencies>

pojo

package com.zsl.pojo;

import java.util.List;

public class Emp {
    private Integer empno;
    private String ename;
    private String job;
    public Integer getEmpno() {
        return empno;
    }
    public void setEmpno(Integer empno) {
        this.empno = empno;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public String getJob() {
        return job;
    }
    public void setJob(String job) {
        this.job = job;
    }

    public Emp() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Emp(Integer empno, String ename, String job) {
        super();
        this.empno = empno;
        this.ename = ename;
        this.job = job;
    }
    @Override
    public String toString() {
        return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + "]";
    }
}

EmpMapper接口

package com.zsl.dao;

import java.io.IOException;

import com.zsl.pojo.Emp;

public interface EmpMapper {
    public Integer addEmp(Emp emp) throws IOException;
    public Integer deleteEmpById(Integer empno) throws IOException;
    public Integer updateEmprById(Emp emp) throws IOException;
    public Emp getEmpById(Integer empno) throws IOException;
}

EmpMapper.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">

<!-- 使用接口 代理的方式 namespace必须和接口的全路径名称一致 -->
<mapper namespace="com.zsl.dao.EmpMapper">

<!-- id必须和接口声明的方法一致 -->
    <insert id="addEmp" parameterType="emp">
        insert into emp(ename,job)values(#{ename},#{job})
    </insert>
    <delete id="deleteEmpById" parameterType="int"> 
        delete from emp where empno=#{empno}    
    </delete>
    <update id="updateEmprById" parameterType="emp"> 
        update emp set name = #{ename} where empno=#{empno}    
    </update>
    <select id="getEmpById" parameterType="int" resultType="emp"> 
        select empno,ename,job from emp where empno=#{empno}   
    </select>
</mapper>

测试Test

package com.zsl.test;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

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 com.zsl.dao.EmpMapper;
import com.zsl.pojo.Emp;

public class Test {
    public static void main(String[] args) throws IOException {
            
        // 1.通过Resources对象加载配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-cfg.xml");
        // 2.获取SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream );
        // 3.通过SqlSessionFactory对象获取SQLSession对象
        SqlSession session = factory.openSession();
        Emp emp = new Emp();
        emp.setEname("zslzslabc");
        emp.setJob("程序员abc");
        // emp.addEmp  是映射文件中 namespace的内容加 id的内容,定位要执行的SQL
//      int count = session.insert("com.zsl.dao.EmpMapper.addEmp", emp);
        EmpMapper empMapper = session.getMapper(EmpMapper.class);
        Integer count = empMapper.addEmp(emp);
        System.out.println("影响的行数:"+count);
        // 需要显示的提交
        session.commit();
        session.close();    
    }

}

注意:

使用mapper接口方式必须满足:

1.映射文件的namespace的值必须是接口的全路径名称 比如:com.zsl.dao.EmpMapper
2.接口中的方法名在映射文件中必须有一个id值与之对应。
3.映射文件的名称必须和接口的名称一致

转载于:https://www.cnblogs.com/zhangsonglin/p/11172545.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值