环境
-
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对象解析比较简单。
先学习到这里下一篇继续讲解入门知识