MyBatis动态代理模式笔记(接口开发)

mapper动态代理方式CRUD
1.原则:约定优于配置
配置方式:
abc.xml中
myProject
硬编码方式
abc.java中
Configuration conf = new Configuration();
con.setName(“myProject”);
约定:默认值就是myProject
2.具体实现步骤
1.基础环境:mybatis.java,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类型一致(mapper标签中resultType不论查询结果一个还是多个,在mapper.xml的resultType中都写一个)
4.mapper.xml中的namespace值==接口全类名 (实现接口中的方法和Mapper.xml中SQL标签一一对应)
附上项目代码:项目下载地址

//mapper.xml中的代码
<select id="queryStudentByStuno"	parameterType="int"	 resultType="person.demo.entity.Student">
		select * from student where stuno = #{stuno}
</select>
//java接口中的代码	
	public abstract Student queryStudentByStuno(int stuno);
		匹配过程
			根据接口名的全类名->>到namespace相同的mapper文件
			根据接口的方法名->>找到mapper文件中的sql标签 (方法名==SQL标签的id值)
			(习惯:接口与mapper文件在同一个包内)

测试类

//简单查询实现
package person.demo.test;

import java.io.IOException;
import java.io.Reader;
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 person.demo.entity.Student;
import person.demo.mapper.StudentMapper;

public class Test {
	//查询一个学生
	public static void queryStudentByStuno() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		System.out.println(studentMapper.queryStudentByStuno(1).toString());
		session.close();
	}
	
	//查询全部学生
	public static void queryAllStudents() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactoty = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactoty.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		List<Student> students = studentMapper.queryAllStudents();
		System.out.println(students.toString());
		session.close();
	}
	//添加学生
	public static void addStudents() throws IOException {
		Student student = new Student(5 , "wr" , 22 , "g4");
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		studentMapper.addStudent(student);
		session.commit();
		session.close();
	}
	//删除学生
	public static void deleteStudents() throws IOException {
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		studentMapper.deleteStudentByStuno(5);
		session.commit();
		session.close();
	}
	//修改学生
	public static void updateStudents() throws IOException {
		Student student = new Student(4 , "ll" , 20 , "g4" );
		Reader reader = Resources.getResourceAsReader("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
		SqlSession session = sessionFactory.openSession();
		StudentMapper studentMapper = session.getMapper(StudentMapper.class);
		studentMapper.updateStudentByStuno(student);
		session.commit();
		session.close();
	}
	
	public static void main(String[] args) throws IOException {
		queryAllStudents();
		addStudents();
		queryAllStudents();
		updateStudents();
		deleteStudents();
		queryAllStudents();
		queryStudentByStuno();
	}
}

Mapper接口

package person.demo.mapper;


import java.util.List;

import person.demo.entity.Student;

//操作mybatis的接口
public interface StudentMapper {
	/*
	 * 1.方法名与mapper.xml文件中标签的id值相同
	 * 2.方法的输入参数与mapper.xml文件中标签的parameterType类型一致
	 * 3.方法的返回值与mapper.xml文件中标签的resultType类型一致
	 */
	//通过学号查询
	Student queryStudentByStuno(int stuno);
	
	//查询全部
	List<Student> queryAllStudents();
	
	//增加
	void addStudent(Student student);
	
	//删除
	void deleteStudentByStuno(int stuno);
	
	//修改
	void updateStudentByStuno(Student student);
	
}

mapper.xml

package person.demo.mapper;


import java.util.List;

import person.demo.entity.Student;

//操作mybatis的接口
public interface StudentMapper {
	/*
	 * 1.方法名与mapper.xml文件中标签的id值相同
	 * 2.方法的输入参数与mapper.xml文件中标签的parameterType类型一致
	 * 3.方法的返回值与mapper.xml文件中标签的resultType类型一致
	 */
	//通过学号查询
	Student queryStudentByStuno(int stuno);
	
	//查询全部
	List<Student> queryAllStudents();
	
	//增加
	void addStudent(Student student);
	
	//删除
	void deleteStudentByStuno(int stuno);
	
	//修改
	void updateStudentByStuno(Student student);
	
}

实体类Student

package person.demo.entity;

public class Student {
	private int stuNo;
	private String stuName;
	private int stuAge;
	private String graName;
	
	public Student(int stuNo, String stuName, int stuAge, String graName) {
		super();
		this.stuNo = stuNo;
		this.stuName = stuName;
		this.stuAge = stuAge;
		this.graName = graName;
	}
	public Student() {
	}
	
	public int getStuNo() {
		return stuNo;
	}
	public void setStuNo(int stuNo) {
		this.stuNo = stuNo;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public int getStuAge() {
		return stuAge;
	}
	public void setStuAge(int stuAge) {
		this.stuAge = stuAge;
	}
	public String getGraName() {
		return graName;
	}
	public void setGraName(String graName) {
		this.graName = graName;
	}
	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", stuAge=" + stuAge + ", graName=" + graName + "]";
	}
}	

优化

  1. 可将配置信息单独放入db.properties文件中,然后再动态引入
	<property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
	driver=com.mysql.cj.jdbc.Driver
	url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
	username = ***
	password = ***
  1. MyBatis全局参数设置
    再conf.xml中设置
    在configuration标签内添加例如:
    (最好不要添加修改)
<settings>
		<setting name="cacheEnabled" value="false"/>
		<setting name="***" value="***"/>
</settings>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值