MyBatis(第一天环境搭建)

1、MyBatis的介绍

1.1.MyBatis前世今生

MyBatis前世今生
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
●【GitHub】
GitHub就是一个互联网上的超大SVN库,里面维护着许多开源项目的代码。任何人都可以把自己好多项目代码放上去共享,同时接受其他人的共同开发。

2.2.JDBC的问题

    在java的世界里访问数据库最底层就是用JDBC,它是原生的数据库开发。JDBC对于单机版的软件或者一个小办公室的小系统都还是可以应付的,毕竟业务简单,数据量小,程序规模都不大。修改、编译、发布都很容易。但随着业务发展这样的IT技术不能满足要求了。逐渐的暴露出一些问题。
public static void main(String[] args) {
        Connection connection = null;
        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", "root");
            //定义sql语句 ?表示占位符
            String sql = "select * from user where username = ? and age = ?";
            //获取预处理statement
            preparedStatement = connection.prepareStatement(sql);
            //设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "王五");
            preparedStatement.setInt(2, 18);
            //向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            List<User> userList = new ArrayList<User>();
            //遍历查询结果集           while(resultSet.next()){
                User user = new User();
                user.setUserId(resultSet.getInt("id"));
                user.setName(resultSet.getString("username"));
                userList.add(user);
            }
        } 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();
                }
            }
        }
    }
从上面的问题总结如下:
1.数据库连接的创建、释放频繁造成系统资源浪费,缺乏有效管理,非常影响系统性能。
如果使用数据库连接池可解决此问题。
2.程序中存在硬编码:(硬编码就是写死在程序中的固定值)
1)数据库连接字符串:换数据库就要改代码,就要重新编译发布,维护压力增大。
2)SQL定义字符串:SQL修改的可能性较大,修改SQL就要重新编译发布,维护压力增大。
3)传参数时的参数位置:参数必须按照先后顺序设置到对应的SQL条件上,十分不灵活。
4)结果集中字段名字符串:字段名变化就要改代码,就要重新编译发布,维护压力增大。

1.3.如何解决JDBC的问题

    MyBatis是一个优秀的持久层框架,发明它的目的之一就是为了解决jdbc问题,Hibernate也是如此。这些框架封装了JDBC操作的细节过程,大大简化了开发,让开发人员更好的集中精力实现业务逻辑。
    确切点说Mybatis只需开发者关注SQL怎么写。

2.MyBatis主要的内容

    MyBatis最重要的就是写好SQL,包括写好SQL语句和写好SQL映射。
    ·SQL语句就是标准的SQL语句(可以在当前选用的数据库产品下,根据需求使用该产品下的SQL函数)
    ·SQL映射包括:参数映射和返回值映射(返回值只针对查询,增删改是没有返回值的)

    ●【参数映射】(也叫做【输入映射】)
MyBatis将java对象传入给SQL语句参数的过程。
    ●【返回值映射】(也叫做【输出映射】)
MyBatis将SQL查询的结果集处理成一个java对象并返回给java程序的过程。
    ●【java对象】
如果是单个参数映射,可以是java简单类型变量:int、long、float、String、Integer、Long、Boolean、Float等。参数值可以映射给sql。
如果是多个参数映射,必须是用java bean,有一个名词叫pojo(Plain Ordinary Java Object),里面有许多属性以及它们的getter/setter方法。将多个参数封装到pojo对象里面,一起映射给sql。Java bean和pojo没有区别,就是换种叫法而已。
    ● SQL语句以及映射写在xml或注解中。

3.MyBatis访问数据库的核心构成

    MyBatis访问数据库的核心构成包括三个核心类和两种配置文件。
    三个核心类:SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession;
    两种配置文件:MyBatis核心配置文件(一个)、MyBatis映射文件(多个)。
    只要按照规范配置SQL,MyBatis就能自动的帮助我们完成具体的映射工作。

4.MyBatis开发环境搭建

这个开发环境仅仅是学习使用的,并不是真正项目中使用的开发环境。
4.1.第一步:创建数据库和表
1.创建数据库【mybatis】,编码utf-8
2.导入【资料\01.数据库\initialDB.sql】脚本。
4.2.第二步:创建工程
创建一个普通java工程。
因为这里我们只是用来学习MyBatis,所以不是实际项目中真正的开发环境,因此建立一个普通java工程就够用了。
等都后面SSM整合之后才是我们真正在实际项目中使用的开发环境。
4.3.第三步:导入jar包
这里我们用到【MyBatis的jar包】和【mysql的jar包】。
1.取得MyBatis的jar包
Mybatis的GitHub地址: https://github.com/mybatis/mybatis-3/releases
2.导入MyBatis的jar包
4.4.第四步:框架的配置文件
4.4.1.核心配置文件
创建Source Folder【config】,它作为全部关于环境的配置文件的存放目录。
在config下创建MyBatisConfig.xml(也有人叫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>
    <!-- 数据库环境的配置(临时配置) -->
    <!-- 
        environments:表示多个数据库环境的配置标签
        default:当前默认使用的数据库环境
     -->
    <environments default="dev">
        <!-- 开发数据库环境的配置 -->
        <!-- 
            environment:表示一个数据库环境配置的标签
            id:表示唯一标识一个数据库环境
         -->
        <environment id="dev">
            <!-- 事务管理的配置 -->
            <!-- 
                transactionManager:表示事务管理的配置标签
                type:表示事务管理的类型,由于MyBatis是对JDBC的封装,所以通常使用JDBC的事务
             -->
            <transactionManager type="JDBC"/>
            <!-- 数据源配置:driver, url, username, password -->
            <!-- 
                dataSource:表示数据源的配置标签
                type:表示数据源的类型,标识是否支持数据库连接池
                    POOLED:表示支持数据库连接池的数据源
                    UNPOOLED:表示不支持数据库连接池的数据源
             -->
            <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="root"/>
            </dataSource>
        </environment>
    </environments>
    </configuration>
4.4.2.SQL映射文件
    MyBatis的SQL映射文件就是用来写SQL语句和配置SQL的参数映射和返回值映射的,可以根据业务创建多个映射文件,比如关于用户信息的映射文件:UserMapper.xml,关于订单信息的映射文件:OrderMapper.xml等。

1.创建SQL映射文件(因为SQL映射文件是关于业务的,所以不要放到config里面)
    创建一个包【cn.itcast.mapper】,在其下创建UserMapper.xml映射文件:
        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE mapper
          PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
          "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
        <!-- namespace:隔离SQL映射文件的,是一个SQL映射文件的唯一标识 -->
        <mapper namespace="user">
            <!-- SQL映射 -->
        </mapper>
2.配置SQL映射文件
    在MyBatis核心配置文件中配置映射文件,目的是为了让MyBatis知道有这个映射文件。
        <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        ... ...
        <!-- 配置映射文件 -->
        <mappers>
            <!-- 通过映射文件在编译后类目录下的相对路径加载映射文件
            resource:用来指定映射文件的相对路径
             -->
            <mapper resource="cn/itcast/mapper/UserMapper.xml" />
        </mappers>
    </configuration>

5.5.第六步:测试开发环境

1.利用junit进行测试,eclipse本身包含junit的jar直接导入即可:
2.手动编写客户端测试程序
    创建Source Folder【test】用于存放测试程序的,并创建一个普通的package mybatis;

“`
package mybatis;

import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

public class MyTest {
    @Test
    public void envTest() throws Exception {
        SqlSession sqlSession = null;
        try {
            // 1. 读取配置文件(MyBatis有专门读取配置文件的工具类Resources)
            InputStream inputStream = Resources.getResourceAsStream("MyBatisCofig.xml");
            // 2. 根据主配置文件创建会话工厂
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            // 3. 根据会话工厂创建会话对象
            // 业务层通过SqlSession对象来访问数据库进行CRUD操作,每个执行方法中会话对象要私有
            sqlSession = sqlSessionFactory.openSession();
            System.out.println(sqlSession);
        } catch(Exception e) {
            e.printStackTrace();
            throw e;
        } finally {
            // 关闭会话
            sqlSession.close();
        }
    }
}
    注意:上面的核心类不是真实项目开发中需要写的,都是临时的写法。这里由于只使用了MyBatis框架,所以只能临时手动的加载核心配置文件、手动创建会话工厂以及会话对象,到真实项目中这些都不用写。这里只是做测试用的代码。大家只要知道三个核心类是什么就可以。

3.能够打印出SqlSession对象的信息说明客户端与数据库连接的会话已经建立起来了。

4.6.第七步:给MyBatis加日志输出

把【资料\04.参考案例\config\log4j.properties】拷贝到工程的config目录下。

4.7.小结

这一节主要是操作,因此记忆的东西很少,主要是课后多加练习开发环境的搭建。
搭建开发环境的目录步骤可以看目录。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值