1.SORM整体框架以及模块功能介绍
1.1核心架构:
– Query接口:负责查询(对外提供服务的核心类)
– QueryFactory类:负责根据配置信息创建query对象
– TypeConvertor接口:负责类型转换
– TableContext类: 负责获取管理数据库所有表结构和类结构的关系,并可以根据表结构生成类结构。
– DBManager类:根据配置信息,维持连接对象的管理(增加连接池功能)
工具类:
JDBCUtils封装常用JDBC操作 | StringUtils封装常用字符串操作 |
JavaFileUtils封装java文件操作 | ReflectUtils封装常用反射操作 |
1.2主要关系图
1.3核心bean,封装相关数据:
– ColumnInfo 封装表中一个字段的信息(字段类型、字段名、键类型)
– Configuration 封装配置文件信息
– TableInfo 封装一张表的信息
-JavaFieldGetSet 封装了java属性和get、set方法的源代码
2.主要代码
2.1表结构
dept
emp
2.1.先简单回忆一下加载资源类,获取连接,以及关闭连接
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class JDBCUtil {
static Properties properties=null; //可以主读取和处理资源文件中的信息
static{
//只会在这个类被加载的时候执行一次
//加载JDBCUtil类的时候调用
properties=new Properties();
try {
properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("testORM/db.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static Connection getMysqlConn(){
try {
Class.forName(properties.getProperty("mysqlDriver"));
return DriverManager.getConnection(properties.getProperty("mysqlURL"),
properties.getProperty("mysqlUser"),properties.getProperty("mysqlPwd"));
} catch (Exception e) {
System.out.println("出错了在在加载时");
return null;
}
}
public static void close(Connection connection, Statement statement, ResultSet resultSet){
try {
if (connection!=null){
connection.close();
}
if (statement!=null){
statement.close();
}
if (resultSet!=null){
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection connection){
try {
if (connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Connection connection, Statement statement){
try {
if (connection!=null){
connection.close();
}
if (statement!=null){
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.测试一下 PreparedStatement 与 ResultSet 的使用方法
使用Object[] 来封装一条数据
public static void useObject() {
Connection connection=JDBCUtil.getMysqlConn();
PreparedStatement ps=null;
ResultSet resultSet =null;
List<Object[]> list =new ArrayList<Object[]>();
try {
ps=connection.prepareStatement("select empname,salary,age from emp where id >?");
ps.setObject(1,0);
resultSet =ps.executeQuery();
while (resultSet.next()){
Object[] objects =new Object[3];
objects[0]=resultSet.getObject(1);
objects[1]=resultSet.getObject(2);
objects[2]=resultSet.getObject(3);
list.add(objects);//将数据存放在list中
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.close(connection,ps,resultSet); }
//遍历得到的数据
for (Object[] objects:list) { System.out.println(""+objects[0]+objects[1]+objects[2]); }
}
使用map来封装一条数据
public static void useMap() {
Connection connection=JDBCUtil.getMysqlConn();
PreparedStatement ps=null;
ResultSet resultSet =null;
Map<String,Map<String,Object>> maps =new HashMap();
try {
ps=connection.prepareStatement("select empname,salary,age from emp where id >?");
ps.setObject(1,0);
resultSet =ps.executeQuery();
while (resultSet.next()){
Map<String,Object> row = new HashMap<String, Object>(); //使用一个map封装一条记录
row.put("empname",resultSet.getObject(1));
row.put("salary",resultSet.getObject(2));
row.put("age",resultSet.getObject(3));
maps.put("empname",row);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.close(connection,ps,resultSet);
}
for (String empname :maps.keySet()) {
Map<String,Object> row=maps.get(empname);
for (String key:row.keySet()) {
System.out.print(key+" "+row.get(key)+"\t");
}
System.out.println();
}
}
使用javabean来封装一条数据
public static void useJavaBean() {
Connection connection=JDBCUtil.getMysqlConn();
PreparedStatement ps=null;
ResultSet resultSet =null;
List<Emp> list=new LinkedList<Emp>();
try {
ps=connection.prepareStatement("select * from emp where id >?");
ps.setObject(1,0);
resultSet =ps.executeQuery();
while (resultSet.next()){
Emp emp=new Emp(resultSet.getInt(1),resultSet.getString(2),
resultSet.getInt(5),resultSet.getDouble(3),resultSet.getDate(4),resultSet.getInt(6));
list.add(emp);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.close(connection,ps,resultSet);
}
for (Emp emp:list) {
System.out.println(emp.getId() +" "+ emp.getEmpname()+ " " + emp.getAge() + " " + emp.getSalary());
}
}
3.接下来正式进入框架环节
第一步:下载对应的jar包,因为使用的是mysql数据库
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency>
使用idea的一定要将jar包 ,双击加载到所使用的项目之中去。