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.映射文件的名称必须和接口的名称一致

    作为新手小菜鸟的我,只想记录,便于温故知新,如有错误或疏忽,请留言,审查后改正,谢谢各位大佬
  • 相关阅读:
    为php5.6安装memched扩展
    关于OAM Webgate的最大链接数
    linux下tomcat-6的安装使用
    FastDFS_V5.0分布式存储(介绍、安装与使用)
    回忆过去,展望未来——写在2017年春节到来之际
    Linux下如何不停止服务,清空nohup.out文件
    Linux下LVM
    TCP/IP 三次握手-四次挥手
    weblogic.security.SecurityInitializationException: Authentication for user weblogic denied(详见下面具体报错信息)
    后台启动weblogic成功后,在web浏览器上无法访问
  • 原文地址:https://www.cnblogs.com/zhangsonglin/p/11172545.html
Copyright © 2011-2022 走看看