五一前无意间看到了一篇Java反射获取注解的文章,突发奇想,自己也尝试写个根据实体来生成sql语句的短文吧,也算是加深下自己对Java反射知识的理解。
话不多说,因为笔者用多了通用Mapper+MyBaits的敏捷开发。所以自己写的demo或多或少有通用Mapper的一些影子。
整体结构:
启动类:
public class Test {
public static void main(String [] args) throws IllegalAccessException, InstantiationException {
//todo
EmpMapper empMapper = new EmpMapper(Emp.class);
Emp emp = new Emp();
emp.setId(1);
emp.setName("Tom");
emp.setAge("18岁");
emp.setSex("男");
empMapper.insert(emp);
}
}
这里我就不执行sql了,只是把生成的sql语句打印出来就ok。
控制台打印结果:
INSERT INTO tb_emp ( t_sex, t_name, t_id, t_age) VALUES ( '男', 'Tom', 1, '18岁')
代码如下:
/**
* @Author: xiake@iyungu.com
* @Description: 模拟Table注解
* @Params:
* @Return:
* @Throws:
* @Date: Created in 2020/4/30 14:59
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
String value();
}
Column、Id注解和Table注解类似。
public class EmpMapper extends MyMapper<Emp> {
public EmpMapper() {
}
public EmpMapper(Class<Emp> clazz) {
super(clazz);
}
}
Emp实体的Mapper接口。
@Table("tb_emp")
public class Emp {
@Column("t_id")
private Integer id;
@Column("t_name")
private String name;
@Column("t_age")
private String age;
@Column("t_sex")
private String sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(Stri