ORM原理
对象-关系映射(Object/Relation Mapping,简称ORM),日常开发中我们都在用的比如Hibernate,Mybatis。
废话不多说,直接上代码
1、建表
2、建实体对应上表
public class TsRole {
private String id ;
private String code ;
private String createTime ;
private String name ;
private String note ;
private String operUsername ;
//自行补充set/get
}
3、建数据库连接
//获取数据库连接
public class GetConnection {
private static final String driverClassName = "com.mysql.jdbc.Driver";
public static Connection getConnect(){
Connection connection = null;
String url = "";
// 用户名和密码
String username = "";
String password = "";
try {
Class.forName(driverClassName);
connection = DriverManager.getConnection(url,username,password);
}catch (Exception e){
e.printStackTrace();
}
return connection;
}
}
4、查询操作
public interface QueryRunner {
//此处只是提供了一个查询列表的接口做demo
<T> List<T> queryAsList(String sql, Class<T> t);
}
上面接口的实现
public class QueryRunnerImpl implements QueryRunner {
@Override
public <T> List<T> queryAsList(String sql, Class<T> t) {
Connection connection = GetConnection.getConnect();
Field[] fields = t.getDeclaredFields(); //对象所有的属性
List<T> list = new ArrayList<>();//用于存储返回结果
try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
Object object = t.newInstance();
for (Field field : fields) {
field.setAccessible(true);
/**
* 下面对数据库中的字段和实体对象的属性做了映射,
* 实体属性是驼峰格式,表字段aa_bb格式,做匹配
*/
Object value = resultSet.getObject(field.getName().replaceAll("[A-Z]", "_$0").toLowerCase());
field.set(object, value);//给对象的属性赋值
}
list.add((T) object);
}
connection.close();
}catch (Exception e){
e.printStackTrace();
}
return list;
}
}
最后做一个测试
public class Test {
public static void main(String[] args) {
String sql = "select * from ts_role";
List<TsRole> list = new QueryRunnerImpl().queryAsList(sql,TsRole.class);
for (TsRole tsRole:list){
System.out.println(tsRole.toString());
}
}
}
结果
总结:
我们通过反射把数据库中的字段与数据字段对应起来,对应规则可以自己定义。