ORM框架封装(二)----策略者模式应用

  • DAO
package dao;
/**
 * 和数据库交互
 */

import domain.Student;
import orm.RowMapper;
import orm.SqlSession;

import java.sql.*;

public class StudentDao {

    private Student student ;
    private static SqlSession sqlSession = new SqlSession();
    /**
     *查询单条语句
     */
    public Student selectOne(Integer sno) {
        String sql = "select * from student where sno= ?";

        return sqlSession.selectOne(sql, new RowMapper() {
            public <T> T mapperRow(ResultSet resultSet) throws SQLException {
                student = new Student();
                student.setSno(resultSet.getInt("sno"));
                student.setSname(resultSet.getString("sname"));
                student.setSsex(resultSet.getString("ssex"));
                return (T) student;
            }
        }, sno);
       
    }

    /**
     * 增加
     * @param student
     */
    public void insert(Student student) {
        String sql = "insert into student values (?,?,?,?)";
        sqlSession.update(sql,student.getSno(),student.getSname(),student.getSsex(),student.getSage());

    }

}

  • ORM
package orm;

import java.sql.ResultSet;
import java.sql.SQLException;

public interface RowMapper {
    <T>T mapperRow(ResultSet resultSet) throws SQLException;
}

package orm;

import domain.Student;

import java.sql.*;

public class SqlSession {
    private String className = "com.mysql.cj.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/student";
    private String username = "root";
    private String password = "burst970919";

    private Connection connection = null;
    private PreparedStatement preparedStatement = null;
    private ResultSet resultSet = null;
    private Object object = null;


    public <T> T selectOne(String sql, RowMapper rowMapper, Object... values) {
        //驱动
        try {
            Class.forName(className);
            //连接
            connection = DriverManager.getConnection(url, username, password);
            //状态参数
            preparedStatement = connection.prepareStatement(sql);
            //传值
            for (int i = 0; i < values.length; i++) {
                preparedStatement.setObject(i+1,values[i]);
            }
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                object = rowMapper.mapperRow(resultSet);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

        }

        return (T)object;

    }
    public void update(String sql, Object... values) {
        try {
            Class.forName(className);
            connection = DriverManager.getConnection(url, username, password);
            preparedStatement = connection.prepareStatement(sql);
            for (int i = 0; i < values.length; i++) {
                preparedStatement.setObject(i+1,values[i]);
            }
            preparedStatement.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            //关闭
            if (preparedStatement != null) {
                try {
                   preparedStatement.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }

        }

    }
}

  • 主方法
import service.StudentService;

public class TestMain {
    public static void main(String[] args) {
        StudentService studentService = new StudentService();
        System.out.println(studentService.queryStudent(2));
        //studentService.registStudent(5,"小艺","女",16);
    }
}

  • 策略者模式执行过程
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值