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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM