MyBatis解决JDBC开发中的问题

来源:互联网 发布:圆谷官方奥特曼数据 编辑:程序博客网 时间:2024/06/06 07:52

         我们之前都用过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不同的是封装的不彻底,它更能适用于灵活多变的项目需求。  

         架构图:

         

         说明:

         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框架。


0 0