zoukankan      html  css  js  c++  java
  • 深入浅出Mybatis(二)环境搭建

    环境

    • mybatis-3.2.7.jar

    • IDEA

    • mysql数据库

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

    搭建过程

     创建mysql数据库

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

    CREATE TABLE `user` (
      `id` int(11) NOT NULL,
      `username` varchar(32) NOT NULL,
      `birthday` date DEFAULT NULL,
      `sex` char(1) DEFAULT NULL,
      `address` varchar(256) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    


    创建java工程

      创建完的效果如下:

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

     

    加入jar包

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

     

    把jar包 Add to Build Path中:

     

    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

      效果如下:

     

    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="123" />
                </dataSource>
            </environment>
        </environments>
    </configuration>
    

     

    测试JDBC连接

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

    package com.dtt.mybatis;
    import java.sql.*;
    
    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 好处t提高了数据库的性能
            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", "123");
                //定义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) {
                        e.printStackTrace();
                    }
                    if(preparedStatement!=null){
                        try {
                            preparedStatement.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                        if (connection!=null){
                            try {
                                connection.close();
                            } catch (SQLException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
        }
    }
    

     

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

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

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

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

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

    先学习到这里下一篇继续讲解入门知识

  • 相关阅读:
    java集合(5)-List集合
    String.matches()的用法
    1.在配置XML文件时出现reference file contains errors (http://www.springframework.org/schema/beans/...解决方案
    SVN教程(包括小乌龟) 全图解
    刚刚进公司不会SVN 菜鸟感觉好蛋疼-----------SVN学习记
    第二部分初始阶段 第六章 用例
    第二部分初始阶段 第五章 进化式需求
    SQL中分页与distinct冲突解决方案
    Java项目打war包的方法
    H5不能少的功能-滑动分页
  • 原文地址:https://www.cnblogs.com/mtime2004/p/9857317.html
Copyright © 2011-2022 走看看