Mybatis学习系列二 mapper动态代理方式的crud(MyBatis接口开发)

徘徊边缘 提交于 2020-03-09 13:17:35

具体实现的步骤:
1. 基础环境 mybatis.jar 、 jdbc.jar  、conf.xml、 mapper.xml
2.(不同之处)
    约定的目标:省略掉statement,即根据约定 直接可以定位出SQL语句

a. 接口 ,接口中的方法 必须遵循以下约定
     * 1.方法名和mapper.xml文件中标签的id值相同
     * 2.方法的输入参数 和 mapper.xml文件中标签的parameterType一致 (如果mapper.xml的标签中没有parameterType,则说明            该方法没有输入参数)
     * 3.方法的返回值 和 mapper.xml文件中标签的resultType类型一致 (无论查询结果是一个 还是多个(student,                                      List<student>)mapper.xml标签中的resultType中 只写一个Student ; 如果没有resultType,则是void

除了以上约定, 要实现 接口中的方法 和Mapper.xml中SQL标签一一对应 还需要:
    namespace的值 就是接口的全类名 (接口-mapper.xml 一一对应)

匹配的过程:(约定的过程)
1 根据 接口名找到 mapper.xml文件 (根据的是 namespace = 接口全类名)
2 根据 接口的方法名 找到 mapper.xml 文件中的SQL标签 (方法名 = SQL标签的Id值)

以上2点可以保证:当我们调用接口中的方法时,程序能自动定位到 某一个Mapper.xml文标签件中的sql

习惯: SQL 映射文件(mapper.xml) 和接口放在一个包中 (注意修改conf.xml加载mapper文件的路径)

以上, 可以通过接口的方法->SQL语句

StudentMapper.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"> 
<mapper namespace="org.student.mapper.StudentMapper"> 
	
	<!-- 查询单个学生 -->
	<select id="queryStudentById" resultType="org.student.entity.Student" parameterType = "String" >
		select * from student where id = #{id}
	</select> 
	
	<!-- 删除学生 -->
	<delete id = "deleteStudentById"  parameterType = "String">
		delete from student where id = #{id}
	</delete>
	
	<!-- 修改学生 -->
	<update id = "updateStudentById" parameterType = "org.student.entity.Student" >
		update student set name = #{name} , age = #{age} , grade = #{grade} where id = #{id}
	</update>
	
	<!-- 增加学生 -->
	<insert id="addStudent" parameterType = "org.student.entity.Student"  >
		insert into student values (#{id} , #{name} , #{age} , #{grade})
	</insert>
	
	<!-- 查询所有学生 -->
	<select id="allStudents" resultType="org.student.entity.Student">
	</select>
	
</mapper>

StudentMapper.java接口

package org.student.mapper;

import java.util.List;

import org.student.entity.Student;

public interface StudentMapper {
	
	//查询单个学生
	Student queryStudentById(String id);
	
	//删除学生
	void deleteStudentById(String id);
	
	//修改学生
	void updateStudentById(Student student);
	
	//增加学生
	void addStudent(Student student);
	
	//查询所有学生
	List<Student> allStudents();
}

Test

package org.student.test;

import java.io.IOException;
import java.io.Reader;

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 org.student.entity.Student;
import org.student.mapper.StudentMapper;


public class Test {
	
	//查询单个学生
	public static  void queryStudentById() throws IOException{
		
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sqlSession = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sqlSession.openSession();
		
		StudentMapper mapper = session.getMapper(StudentMapper.class);
		Student student = mapper.queryStudentById("2019113151");
		System.out.println(student);
	}
	public static void main(String[] args) throws IOException {
		queryStudentById();
	}
}


 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!