MyBatis解决JDBC开发中的问题

         我们之前都用过JDBC方式开发Java程序,那么你是否对其有什么想法呢?

         首先我们来看一段jdbc的代码:

         

package com.itcats.mybatis.jdbc;

import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.xml.transform.Result;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

/**
 * 查询jrkj中的Student信息
 * @author Y
 *
 */
public class jdbcTest {
	private static String sql="";
	public static void main(String args[]){
		Connection conn= null;
		PreparedStatement prepareStatement=null;
		Result result= null;
		
		try {
			//加载数据驱动
			Class.forName("com.mysql.jdbc.Driver");
			
			//通过驱动管理类获取数据库连接
			conn=(Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/jrkj_java?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull","root","123456");
			prepareStatement=(PreparedStatement) conn.prepareStatement(sql);
			prepareStatement.setString(1, "王五");
			result=(Result) prepareStatement.executeQuery();
			
			//遍历结果集
			while (((ResultSet) result).next()) {
				System.out.println("ok");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			//释放资源
//			注意关闭顺序
		}
		
	}
}

         那么这段代码存在什么问题呢?

         首先,将sql语句直接硬编码到Java中,不利于系统维护。

         其次,数据库连接不能重复利用,造成了资源浪费。

         再次,向statement中设置参数时,对参数的位置通过硬编码制定,也不利于系统维护。


         我们先来简单介绍一下mybatis。

         Mybatis是一个不完全的ORM框架,不同于Hibernate。mybatis也可以实现关系映射,但还需要手写sql语句。它与Hibernate不同的是封装的不彻底,它更能适用于灵活多变的项目需求。  

         架构图:

         MyBatis解决JDBC开发中的问题_第1张图片

         说明:

         SqlMapConfig.xml是Mybatis的核心配置文件,配置了数据源、连接池和事务。

         SQLSessionFactory是会话工厂,用于生产用户会话session。

         SqlSession会话是一个面向用户的门面接口,用户操作数据库。

         Executor是执行器,SQLSession就是通过Executor来执行和操作数据库的。

         Mapping Statement是Mybatis的一个封装对象,封装了sql语句、传入sql语句的参数,以及将sql查询结果映射成的Java对象。


         上面的代码是我们jdbc实现连接数据库的常用代码段,那么mybatis是怎么解决这些问题的?

         1、对于sql语句的硬编码,它将sql语句配置在了其映射文件中,如user.xml。

         2、关于数据库连接问题,我们首先想到的就是利用连接池来管理。mybatis也没有离开这一点,只是在其内部已经配置好了,在sqlMapConfig.xml中配置的运行环境,就使用了连接池技术。

         3、MyBatis能够通过一些配置,自动将Java对象的值设置到Statement中。

         在user.xml中,设置参数类型,在sql语句中通过#{ }表示占位符号,{ }表示变量名,也可以写Po的属性,完成自动将Java对象映射到sql语句中。


         关于MyBatis的具体使用,之后再为大家介绍。大家可以参考其他的实现Demo,来搭建自己的Mybatis框架。


你可能感兴趣的:(Java)