Mybatis是如何封装Jdbc的?
2024-09-28 21:15:31
JDBC六个步骤
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1. 加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2. 获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC", "root", "123456");
//3. 创建PreparedStatement 【设置参数】
ps = conn.prepareStatement("select * from user");
//4. 执行sql ==》executeXxx()
rs = ps.executeQuery();
//5. 遍历结果集
while(rs.next()) {
System.out.println(rs.getString(2)); // 数据库第2列数据
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//6. 关闭连接
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
数据库连接池
问题1:频繁的建立连接释放连接,造成资源的浪费。
数据库连接池,用来解决建立与释放连接的问题。
但是数据库连接池有dbcp连接池,c3p0连接池,druid连接池,不可能为每一个连接池实现一种连接方式。所以使用DataSource实现隔离解耦。
public static ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 通过C3p0 配置数据源 DataSource,以后想要使用其它的连接池,只需改动如何获取DataSource,不需要改动连接。
public static void dataSource(){
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/qianfeng?serverTimezone=UTC");
dataSource.setUser("root");
dataSource.setPassword("123456");
dataSource.setInitialPoolSize(3);
dataSource.setMaxPoolSize(10);
dataSource.setMinPoolSize(3);
dataSource.setAcquireIncrement(3);
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
// 通过数据源,获取连接 Connection
public static Connection conn() {
Connection conn = null;
dataSource();
try {
conn = dataSource.getConnection();
//Unknown system variable 'tx_isolation' : 可能原因是数据库版本太高,mysql-connector-java版本太低
//conn.setTransactionIsolation(Connection.TRANSACTION_REPEATABLE_READ);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
在Mybatis中,配置druid数据源
<environments default="development-mysql">
<environment id="development-mysql">
<transactionManager type="JDBC"/>
<dataSource type="com.config.DruidDataSourceFactory">
<property name="url" value="${jdbc.jdbcUrl}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
Mybatis
关键技术点 SqlSession:执行Sql
String resource = "conf/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
//2. SqlSessionFactoryBuilder
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//1. 构建SqlSessionFactory
SqlSessionFactory factory = builder.build(inputStream);
//3. 构建session
SqlSession session = factory.openSession();
/** 第一种方式:以前原生的方式 */
//Student s = session.selectOne("com.shang.mybatis.mapper.StudentMapper.queryStudentById", 1);
//System.out.println(s);
/** 第二种方式:演变出来的*/
StudentMapper mapper = session.getMapper(StudentMapper.class); // mapperProxyFactory ==> mapper的代理对象
Student s = mapper.queryStudentById(1);
System.out.println(s);
MyBatis是如何封装JDBC的呢?
最新文章
- 崔用志-微信开发-java版本
- 玩转Unity资源,对象和序列化(上)
- Spring MVC 中请求返回之后的页面没法加载css、js等静态文件
- 决策树算法实现(train+test,matlab) 转
- [转] Splay Tree(伸展树)
- 假设有两个包含整数的vector对象,编写一段程序,检验其中一个vector对象是否是另一个的前缀。
- Android 交错 GridView
- IIC 概述之24c系列存储器内存分析
- sp_makewebtask
- JavaScript高级程序设计:第十章
- 用for、while、do-while循环输出10句“好好学习,天天向上!”
- Windows系统如何使用sqlmap
- 如果以一个树状的形式返回一个UIView的所有子视图
- sqlserver2008 触发器备份 20170811
- 网络协议 5 - ICMP 与 ping:投石问路的侦察兵
- lumion的物体系统5.30
- SQL 查找存在某内容的存储过程都有哪些
- C. cltt的幸运数LCAdfs
- python --判断列表重复
- WIN7 环境下搭建 PHP7(64 位)操作步骤