本文旨在记录一个使用MyBatis动态代理扫描开发的基本例子
目录结构
这里使用idea作为开发环境
使用Navicat操纵的Mysql数据库
entity类
所谓的entity、bean、domain都是指的与数据库表对应的实体类,需要注意的是,这里的字段必须要和数据库中对应表的字段一一对应起来
package com.entity;
import org.springframework.stereotype.Component;
@Component(value = "stud")
public class student {
private String name;
private String sex;
private String grade;
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
public student(String name, String sex, String grade) {
this.name = name;
this.sex = sex;
this.grade = grade;
}
public student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", grade='" + grade + '\'' +
'}';
}
}
Dao层
有了实体类以后,我们需要对实体进行数据操纵。
这里要注意的是,以StudentDao为例,网络中StudentMapper.java实际指的就是StudentDao.java,只是一个东西的两种叫法。
本文主要为了演示大概流程,为了简单,只写最基本的增删改查
package com.dao;
import com.entity.student;
import org.springframework.stereotype.Component;
@Component
public interface StudentDao {
public int add(student stu);
public int delete(String name);
public int update(String grade);
public int insert(String name);
}
Service层与对应的Impl层
在一些简单的SSM项目中,我们可能会发现一个现象,Service层与Dao层都是接口,甚至连代码都一模一样,那为什么要这样写呢,是为了形式化、为了使用接口而写接口吗,可以直接实现Dao层接口来调用具体的服务吗?
答案当然是否定的,严格来讲,这样做的目的是为了解耦,在业务逻辑简单,操作数据也很简单的时候,比如一个service只操作一个dao,这时service与dao的代码确实是一样的,但是当操作的数据十分繁杂时(在企业开发中基本都十分繁杂),一个服务会需要调用很多个dao来实现一个服务流程,而dao中只存放了对单个表的操作。service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。
当我们在dao层进行技术选型时,我们可以直接采用Mybatis、Hibernate、JDBC等等直接进行替换,而无需修改service层的代码,对于dao层,应该只关注数据库连接执行结果封装这些事
这里为了演示流程,只实现了增加数据的方法
package com.service;
import com.entity.student