hz90 / diy

0 stars 0 forks source link

mybatis #3

Open hz90 opened 5 years ago

hz90 commented 5 years ago

package com.mybatis;

public interface MyExecutor { public T query(String statement); }

package com.mybatis;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;

public class MyBaseExecutor implements MyExecutor { private String url; private String user; private String password;

@Override
public <T> T query(String statement) {
    Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;

    try {
        connection = DriverManager.getConnection(url, user, password);
        String sql = statement;
        preparedStatement = connection.prepareStatement(sql);
        resultSet = preparedStatement.executeQuery();
        Student stu = null;
        if (resultSet.next()) {
            stu.setId(resultSet.getString("id"));
            stu.setName(resultSet.getString("name"));
            stu.setIdadress(resultSet.getString("Idadress"));
        }
        return (T) stu;
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}

}

package com.mybatis;

public class Student { private String id; private String name; private String idadress;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getIdadress() {
    return idadress;
}

public void setIdadress(String idadress) {
    this.idadress = idadress;
}

}

package com.mybatis;

public interface StudentMapper { public Student findStudentById(String id);

public void inserStudent(Student stu);

}

package com.mybatis;

import java.util.HashMap; import java.util.Map;

public class StudentMapperXML { public static final String namespace = "com.mybatis.StudentMapper"; private static Map<String, String> methodSQLMap = new HashMap<>(); static { methodSQLMap.put("findStudentById", "select * from student where id=%s"); } public static String getMethodSQL(String method) { return methodSQLMap.get(method); }

}

package com.mybatis;

public interface MySqlSession {

T selectOne(String var1); T getMapper(Class var1); } ------------------------------------------------------------------------------------------------------------ package com.mybatis; import java.lang.reflect.Proxy; public class MyDefaultSqlSession implements MySqlSession { private MyExecutor executor = new MyBaseExecutor(); @Override public T selectOne(String sql) { return executor.query(sql); } @Override public T getMapper(Class interfaces) { return (T) Proxy.newProxyInstance(interfaces.getClassLoader(), new Class[] { interfaces }, new MyMapperPorxy(this)); } } ----------------------------------------------------------------------------------------------- package com.mybatis; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class MyMapperPorxy implements InvocationHandler { private MySqlSession sqlsession; public MyMapperPorxy() { } public MyMapperPorxy(MySqlSession sqlsession) { this.sqlsession = sqlsession; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { String mapperclass = method.getDeclaringClass().getName(); if (StudentMapperXML.namespace.equals(mapperclass)) { String methodname = method.getName(); String originsql = StudentMapperXML.getMethodSQL(methodname); String formatedsql = String.format(originsql, String.valueOf(args[0])); return sqlsession.selectOne(formatedsql); } return null; } } ------------------------------------------------------------------------------------------------------------- package com.mybatis; public class BootStrapClass { public static void main(String[] args) { MySqlSession sqlsession = new MyDefaultSqlSession(); StudentMapper studenmapper = sqlsession.getMapper(StudentMapper.class); Student student = studenmapper.findStudentById("a"); System.out.println(student); } }