mybatis01

mybatis是一个java持久层框架,java中操作关系型 数据库用的是jdbc,mybatis是对jdbc的一个封装。
jdk1.7.0_72
eclipse:eclipse-3.7-indigo
mysql:mysql5.1
企业开发中,根据项目大小、特点进行技术选型 ,jdbc操作数据库时效率是很高的,jdbc也是技术选型的参考。
需要数据库的驱动包:mysql-connector-java-5.1.7-bin.jar  ojdbc14-10.2.0.1.0.jar
上边是mysql的驱动,下边是oracle的驱动。

1、数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率
设想:使用数据库连接池
2、sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码。
3、通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。
设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。
4、遍历查询结果集存在硬编码(列名)。
设想:自动进行sql查询结果向java对象的映射(输出映射)。

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进。 目前mybatis在github上托管。git(分布式版本控制,当前比较流程)
MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。

纯jdbc操作:

package cn.itcast.mybatis.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JdbcTest {
    
    
    public static void main(String[] args) {
        Connection connection = null;
        //PreparedStatement是预编译的Statement,通过Statement发起数据库的操作
        //PreparedStatement防止sql注入,
        //写的sql语句是以预编译方式发过去的,sql语句在数据是要进行编译的,编译完成之后会记录到数据库缓存,
        //当第二次在发预编译的sql时发现一样就不再编译了,执行数据库效率高
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //加载数据库驱动,驱动在jar包里面
            Class.forName("com.mysql.jdbc.Driver");
            //通过驱动管理类获取数据库链接
            //数据库连接频繁的创建和关闭,缺点浪费数据库的资源,影响操作效率,设想:使用数据库连接池
            connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "mysql");
            //定义sql语句 ?表示占位符
            //sql语句是硬编码,如果需求变更需要修改sql,就需要修改java代码,需要重新编译,系统不易维护。
            //设想:将sql语句 统一配置在文件中,修改sql不需要修改java代码。
        String sql = "select * from user where username = ?" ;
            //获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            //通过preparedStatement向占位符设置参数,存在硬编码( 参数位置,参数)问题。系统不易维护。
            //设想:将sql中的占位符及对应的参数类型配置在配置文件中,能够自动输入 映射。
            preparedStatement.setString(1, "王五");
            //向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            //遍历查询结果集
            //遍历查询结果集存在硬编码(列名)。
            //设想:自动进行sql查询结果向java对象的映射(输出映射)。
            while(resultSet.next()){
                System.out.println(resultSet.getString("id")+"  "+resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //释放资源
            if(resultSet!=null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(preparedStatement!=null){
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

        }

    }

}

 

posted @ 2015-10-10 20:16  无天666  阅读(192)  评论(0编辑  收藏  举报