设为首页 加入收藏

TOP

day02-自己实现Mybatis底层机制-01(三)
2023-07-25 21:42:18 】 浏览:89
Tags:day02- Mybatis -01
t java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @author 李 * @version 1.0 */ public class MyExecutor implements Executor { private MyConfiguration myConfiguration = new MyConfiguration(); /** * 根据sql,返回查询结果 * * @param sql * @param parameter * @param <T> * @return */ @Override public <T> T query(String sql, Object parameter) { //获取连接对象 Connection connection = getConnection(); //查询返回的结果集 ResultSet set = null; PreparedStatement pre = null; try { //构建PreparedStatement对象 pre = connection.prepareStatement(sql); //设置参数,如果参数多,可以使用数组处理 pre.setString(1, parameter.toString()); //查询返回的结果集 set = pre.executeQuery(); //把结果集的数据封装到对象中-monster //说明:这里做了简化处理,认为返回的结果就是一个monster记录,完善的写法应该使用反射机制 Monster monster = new Monster(); //遍历结果集,将数据封装到monster对象中 while (set.next()) { monster.setId(set.getInt("id")); monster.setName(set.getString("name")); monster.setEmail(set.getString("email")); monster.setAge(set.getInt("age")); monster.setGender(set.getInt("gender")); monster.setBirthday(set.getDate("birthday")); monster.setSalary(set.getDouble("salary")); } return (T) monster; } catch (Exception e) { e.printStackTrace(); } finally { try { if (set != null) { set.close(); } if (pre != null) { pre.close(); } if (connection != null) { connection.close(); } } catch (Exception e) { e.printStackTrace(); } } return null; } //编写方法,通过myConfiguration对象返回连接 private Connection getConnection() { Connection connection = myConfiguration.build("my-config.xml"); return connection; } }

(4)进行测试

@Test
public void query() {
    Executor executor = new MyExecutor();
    Monster monster =
            (Monster) executor.query("select * from monster where id = ?", 1);
    System.out.println("monster--" + monster);
}

测试结果:

image-20230223211725700

6.任务阶段3

阶段3任务:将执行器封装到SqlSession

6.1代码实现

(1)创建 MySqlSession 类,将执行器封装到SqlSession中。

package com.li.limybatis.sqlsession;

/**
 * @author 李
 * @version 1.0
 * MySqlSession:搭建Configuration(连接)和Executor之间的桥梁
 */
public class MySqlSession {
    //执行器
    private Executor executor = new MyExecutor();
    //配置
    private MyConfiguration myConfiguration = new MyConfiguration();

    //编写方法selectOne,返回一条记录
    public <T> T selectOne(String statement,Object parameter){
        return executor.query(statement, parameter);
    }
}

(2)测试

@Test
public void selectOne() {
    MySqlSession mySqlSession = new MySqlSession();
    Monster monster =
            (Monster) mySqlSession.selectOne("select * from monster where id=?", 1);
    System.out.println("monster=" + monster);
}

测试结果:

image-20230223223059776
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇如何通过Java应用程序将 PDF转为W.. 下一篇一文详解 Netty 组件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目