1.什么是Mybatis?
Mybatis是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并改名为Mybatis。
iBatis是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps 和Data Access Objects(DAO)
Mybatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。Mybatis消除了几乎所有JBDC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解配置和原始映射,将接口和java的POJOS(Plain Ordinary Java Objects,普通的java对象)映射成数据库中的记录。
2.为什么会有Mybatis?
Mybatis是和数据库打交道的,前面我们使用的是JDBC来对数据库进行增删改查等一系列操作的,而我们之所以会放弃使用JDBC,转而使用Mybatis框架,这是为什么呢?
package JDBC;
public class Person {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package JDBC;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class CRUDao {
//Mysql数据库驱动
public static String driverClass="com.mysql.jdbc.Driver";
//Mysql用户名
public static String username="root";
public static String passWord="123456";//密码
public static String url = "jdbc:mysql://localhost:3303006/test";//URL
public static Connection conn=null;//数据库连接
public static PreparedStatement ps=null; //声明数据库语句,使用预编译声明preparedStatement提高数据库执行性能
public static ResultSet rs = null;//返回结果集
/**
* 查询person表信息
* 返回person的list集合
*/
public static List<Person> readPerson() throws ClassNotFoundException, SQLException {
ArrayList<Person> list= new ArrayList<>();
//1.加载数据库驱动
Class.forName(driverClass);
//2.获取数据库连接
conn =DriverManager.getConnection(url,username,passWord);
//3.定义SQL语句,?表示占位符
String sql = "select * from person where name=?";
//4.获取预编译处理的statement
ps = conn.prepareStatement(sql);
//5.设置sql语句中的参数,第一个为sql语句中的参数?(从1开始),第二个为设置的参数值
ps.setString(1,"zy");
//6.向数据库发出sql语句查询,并返回结果集
rs = ps.executeQuery();
while (rs.next()){
Person p = new Person();
p.setId(rs.getInt(1));
p.setName(rs.getString(2));
list.add(p);
}
//7.关闭数据库连接
if(rs !=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(conn!=null){
conn.close();
}
return list;
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
System.out.println(CRUDao.readPerson());
}
}
3.JDBC的问题
- 数据库的连接使用时创建,不适用时时候关闭,对数据库频繁的开启和关闭,影响数据库的性能;解决办法:通过连接池来解决
- 将sql语句硬编码到java代码中,如果sql进行修改,需要修改java代码进行编译执行,不利于系统的维护;解决:将sql语句配置在xml文件中,就不需要修改java代码
- 从resultSet中遍历结果集数据时,存在硬编码,将获取的数据表的字段进行硬编码;解决:将查询的结果集映射为java对象。