Mybatis学习笔记(0)---- JDBC

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

在介绍Mybatis之前需要先了解一下JDBC,才能更清楚Mybatis究竟帮我们做了什么。

JDBC

JDBC(Java Database Connectivity,Java数据库连接)是java中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

JDBC的层次结构

(jdbc是sun公司提供一套用于数据库操作的接口,java程序员只需面向这套接口编程即可。不同数据库厂商,需要针对这套接口,提供不同的实现。不同的实现的集合即为不同数据库的驱动)

jdbc接口(API)包括两个层次:

  面向应用的API:java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)

  面向数据库的API:java Driver API,供开发商开发数据库驱动使用。

JDBC程序编写步骤

获取数据库连接

  要素一:Driver接口实现类

  Driver接口介绍

  java.sql.Driver接口是所有JDBC驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

  在程序中不需要直接去访问实现了Driver接口的类,而是由驱动程序管理类(java.sql.Driveranager)去调用这些Driver实现。

  加载和注册JDBC驱动

  加载驱动:加载JDBC驱动需调用Class类的静态方法forName(),向其传递要加载的JDBC驱动的类名。Class.forName("com.mysql.jdbc.Driver")

  注册驱动:DriverManager类是驱动程序管理类,负责管理驱动程序。使用DriverManager.registerDriver类的registerDriver()方法来注册驱动了的实例,因为Driver接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用DriverManager.registerDriver()方法来注册自身的一个实例。

  要素二:URL

  JDBC URL用于标志一个被注册的驱动程序,驱动程序管理器通过这个URL选择正确的驱动程序,从而建立到数据库的连接。

  JDBC URL的标准由三部分组成,各部分用冒号分割(jdbc:子协议:子名称)【jdbc:mysql://localhost:3306/test】

public Connection getConnection(){
  //第一种
    Driver driver = com.mysql.jdbc.Driver();
  //第二种
  //Class clazz = Class.forName("com.mysql.jdbc.Driver");
  //Driver driver = (Driver)clazz.newInstance();
  String url = "jdbc:mysql://localhost:3306/test";
    Properties info = new Properties();
    info.setProperty("user", "root");
    info.setProperty("password", "123456");
    Connection connection = driver.connect(url, info);
    return connextion;
  //第三种
  //DriverManager.registerDriver(driver);//driver为第二种中的driver
  //上面注册可以不要,在Mysql的Driver实现类中,有一块静态代码块,已经实现了注册
  //return DriverManager.getConection(url, user, password);//获取到连接
}
//第四种,将基本信息放在配置文件中
public Connection getConnection(){
    //1.读取配置文件中的4个基本信息
    InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");//ClassLoader.getSystemClassLoader()
    Properties pros = new Properties();
    pro.load(is);
    String user = pros.getProperty("user");
    String password = pros.getProperty("password");
    String url = pros.getProperty("url");
    String driverClass = pros.getProperty("driverClass");
    //2.加载驱动
    Class.forName(driverClass);
    //3.获取连接
    return DriverManager.getConnection(url, user, password);
}

jdbc.properties
user=root
password=1234567
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver

使用PreparedStatement实现CRUD操作

  操作和访问数据库

  数据库连接被用于向数据库服务器发送命令和上去了语句,并接受数据库服务器返回的结果,其实一个数据库连接相当于一个socket连接。

  在java.sql包中有3个接口分别定义了对数据库的调用的不同方式:

  Statement:用于执行静态SQL语句并返回它所生成结果的对象。(弊端:需要拼写Sql语句,可能存在Sql注入问题。)

  PreparedStatement:SQL语句被预编译并存储在此对象中,可以使用此对象多次高效的执行该语句。

  CallableStatement:用于执行SQL存储过程。

 

public void testPreparedStatement(){
  //获取连接
  Connection conn = getConnnection();
  //预编译sql语句,返回PreparedStatement实例
  String sql = "insert into student(name,email) values (?,?)";
  PreparedStatement ps = conn.preparedStatement(sql) ;
  //填充占位符
  ps.setString(1, "哪吒");
  ps.setString(2, "nezha@gmail.com");
  //执行操作
  ps.execute();
  conn.close();
  ps.close();  
}
public void testQuery() {
  Connection conn = getConnection();
  String sql = "select * from student where id = ?";
  PreparedStatement ps  = conn.prepareStatement(sql);
  ResultSet resultSet = ps.executeQuery();
  if(resultSet.next()){//判断结果集中是否有数据,并指针下一
    int id = resultSet.getInt(1);
    String name = resultSet(2) ; 
  }
}

 

 

 

    

 

posted @ 2021-01-06 19:13  Carol淋  阅读(102)  评论(0编辑  收藏  举报