【Mybatis】深入浅出Mybatis(三)——环境搭建

一、前言

      前一篇博客向大家介绍了Mybatis的架构——【Mybatis】深入浅出Mybatis(二)——Mybatis的框架,在这篇我们就开始通过一个例子来搭建一下Mybatis的环境。

二、环境要求

  • mybatis-3.2.7.jar

  • eclipse

  • mysql数据库

  • mysql数据库驱动,mysql-connector-java-5.1.7-bin.jar

      PS:mybaits的代码由github.com管理,最新版本为3.4.2,这里小编测试用的是3.2.7,下载地址:https://github.com/mybatis/mybatis-3/releases

三、搭建过程

3.1 创建mysql数据库

      这里咱们创建一个名字为mybatis的数据库,创建一个名为user的表。表的字段如下:

这里写图片描述

      在数据库中插入一些测试数据,这个过程自己处理就好,没有必要和小编相同:

这里写图片描述

3.2 创建java工程

      使用eclipse创建java工程,新建,java Project:

这里写图片描述

      创建完的效果如下:

这里写图片描述

      右击项目添加文件夹,命名为lib,用于加入mybatis核心包、依赖包、数据驱动包。效果图如下:

这里写图片描述

3.3 加入jar包

      要加入的jar包包括: mybatis核心包、依赖包、数据驱动包。如果要进行单元测试,需要添加junit.jar。这里小编用单元测试,添加了junit-4.9.jar。

这里写图片描述

      把jar包 Add to Build Path中:

这里写图片描述

3.4 log4j.properties

      mybatis默认使用log4j作为输出日志信息。右击src->new->File,新建名为log4j.properties的文件。

这里写图片描述

这里写图片描述

      在其中输入下面的代码:

log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

      效果如下:

这里写图片描述

3.5 SqlMapConfig.xml

      SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理。

      在src下创建SqlMapConfig.xml,如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>

</configuration>

      效果如下:

这里写图片描述

      好的,到这步我们的环境基本就完成了,

四、测试JDBC连接

      在src下建立一个名为cn.itcast.mybatis.test的包,在包里面建立一个名为JdbcTest的类,添加如下的代码:

package cn.itcast.mybatis.test;

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

/**
 * 通过单独的jdbc程序,总结其中的问题
 * @author Ares
 * 2017年3月6日14:43:57
 */
public class JdbcTest {

/**
*步骤
*1、 加载数据库驱动
*2、 创建并获取数据库链接
*3、 创建jdbc statement对象
*4、 设置sql语句
*5、 设置sql语句中的参数(使用preparedStatement)
*6、 通过statement执行sql并获取结果
*7、 对sql执行结果进行解析处理
*8、 释放资源(resultSet、preparedstatement、connection)*/

    public static void main(String[] args) {
        //数据库连接
        Connection connection = null;
        //预编译的Statement,好处:提高数据库性能
        PreparedStatement preparedStatement = null;
        //结果集对象
        ResultSet resultSet = null;

        try {
            //加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");

            //通过驱动管理类获取数据库链接
            connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123456");
            //定义sql语句 ?表示占位符
            String sql = "select * from user where username = ?";
            //获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "王五");
            //向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            //遍历查询结果集
            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();
                }
            }

        }

    }

}

      运行结果:

这里写图片描述

      在这个测试程序中我们使用的是最传统的与数据库交互的方式,使用preparedStatement向占位符传递参数,使用传统的JDBC的时候会有一些问题:

       1. 数据库链接创建、释放频繁造成系统资源浪费。从而影响系统性能,如果使用数据库连接池可以解决此问题。

       2. Sql语句在代码中写死了。如小编的“select * from user where username = ?”,为硬编码。造成代码不易维护,实际应用sql变化可能较大,sql变动需要改变java代码。

       3. 使用preparedStatement向占位符传递参数存在硬编码。因为sql语句的where条件不一定,可能多也可能少,修改sql还要修改代码,系统不易维护。

       4. 输出的结果集解析存在硬编码。sql变化导致解析代码变化,系统不易维护,如果将数据库揭露封装成pojo对象解析比较简单。

五、小结

      在这篇博客中向大家配置了一下环境,基本上还是比较好理解的。另外也通过传统的JDBC的方法访问了一下数据库,分析了一下传统JDBC的不足,这些就是Mybatis要完善的地方,具体怎么完善这些不足,小编会在后面的博客向大家介绍。

      下一篇博客会向大家带来“深入浅出Mybatis(四)——入门增删改查程序”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值