mybatis是对原生的jdbc的封装,是一个持久层框架
那么为什么要用mybatis,首先我们来看看原生jdbc的操作
jdbc:
首先打开eclipse,创建工程
加入mysql的jar包
创建JdbcTest类
打开SQLyog,创建 数据库mybatis,创建表user
SHOW CREATE TABLE USER
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(32) NOT NULL COMMENT '用户名称',
`birthday` DATE DEFAULT NULL COMMENT '生日',
`sex` CHAR(1) DEFAULT NULL COMMENT '性别',
`address` VARCHAR(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
package com.ddd.mybatis.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author Dan
*原生态的jdbc
*/
public class JdbcTest {
public static void main(String[] args) {
//数据库连接
Connection conn=null;
//预编译(如果下次执行sql相同则不用编译,直接执行)的statement,使用它可以提高sql的执行效率
PreparedStatement ps=null;
//结果集
ResultSet rs=null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//获取数据库连接
conn=DriverManager.getConnection
("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","root", "1234");
//定义sql语句
String sql="select * from user where username=?";
//获取预处理的statement
ps=conn.prepareStatement(sql);
//设置参数,(序号,值),其中序号从1开始
ps.setString(1, "小明");
//执行结果
rs=ps.executeQuery();
//遍历结果集打印输出
while(rs.next()){
System.out.println(rs.getString("id")+rs.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{//释放资源
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
缺点总结:
1.数据库连接,使用时就创建,不使用就立即释放,对数据库频繁开启关闭数据库,造成数据库资源浪费,影响性能
解决:使用数据库连接池
2.sql是写死的(硬编码),但需求是不断变化的,代码复用度不高,不利于维护
解决:使用xml配置文件来写sql,如果sql变化了,不用对Java代码重新编译
3.设置参数ps.setString(1, “小明”);这儿是写死的
解决:把sql语句的参数占位符全部配置在xml中去
4.结果集的遍历rs.getString(“id”)+rs.getString(“username”)这儿是写死的
解决:将结果集映射成Java对象,使用对象获取属性