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

作为新手小菜鸟的我,只想记录,便于温故知新,如有错误或疏忽,请留言,审查后改正,谢谢各位大佬
原文地址:https://www.cnblogs.com/zhangsonglin/p/11172545.html