zoukankan      html  css  js  c++  java
  • Mybatis接口与映射文件

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

    这些都是模板化代码,都可以通过配置自动生成然后通过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.映射文件的名称必须和接口的名称一致

    作为新手小菜鸟的我,只想记录,便于温故知新,如有错误或疏忽,请留言,审查后改正,谢谢各位大佬
  • 相关阅读:
    OpenCascade Ray Tracing Rendering
    Create New Commands in Tcl
    OpenCascade Modeling Algorithms Fillets and Chamfers
    OpenCascade Modeling Algorithms Boolean Operations
    Construction of Primitives in Open Cascade
    Open Cascade Data Exchange STL
    Tcl Tk Introduction
    Open Cascade DataExchange IGES
    Netgen mesh library : nglib
    Hello Netgen
  • 原文地址:https://www.cnblogs.com/zhangsonglin/p/11172545.html
Copyright © 2011-2022 走看看