Mybatis搭建环境和初步使用

1.下载需要的jar文件

通过MyBatis官网下载MyBatis和相应版本的jar文件。
(推荐下载mybatis-3.2.2.zip和mybatis-3-mybatis-3.2.2.zip)
其中:mybatis-3.2.2.zip文件是MyBatis的jar文件和官方使用手册等。
mybatis-3-mybatis-3.2.2.zip文件是MyBatis的源码包,存放MyBatis的源文件。

2.引入jar包

在Project Structure的Modules中引入以下jar包,其他jar包根据需要引入,兵于Problems中将问题处理掉。

jar包
(1) log4j-1.2.17.jar(负责日志输出的jar文件)
(2) mybatis-3.2.2.jar
(3) mybatis-3.2.2-sources.jar(mybatis源文件jar包)
(4) mysql-connector-java-5.1.0-bin.jar(MySql数据库驱动jar包)
并根据需求引入其他jar包(如需建立测试类,应将测试类jar包引入)

3.创建MyBatis核心配置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">
<!--是mybatis的标准根目录-->
<configuration>
    <!--获取JDBC配置文件-->
    <properties resource="db.properties"/>
    <!--将MyBatis实现方式设置为LOG4J-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--取别名方法:type为类的地址,alias为别名-->
    <typeAliases>
        <typeAlias type="cn.kgc.kb07.entity.Provider" alias="provider"/>
    </typeAliases>
    <!--配置MyBatis运行环境-->
    <environments default="dev">
        <environment id="dev">
            <!--选择JDBC事务管理方式-->
            <transactionManager type="JDBC"/>
            <!--POOLED为mybatis自带数据源,JNDI为tomcat的数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pwd}"/>
            </dataSource>
        </environment>
    </environments>
    <!--配置mapper文件-->
    <mappers>
        <mapper resource="cn/kgc/dao/ProviderMapper.xml"/>
    </mappers>
</configuration>
元素作用
configuration配置文件的根元素节点
properties从resource类型的文件中获取数据库链接配置
settings设置mybatis的一些行为
typeAliases设置元素,取别名
environments配置mybatis的多个运行环境
environmentenvironments的子节点
mappers设置映射文件
mappermappers的子节点

注意:配置文件的元素节点是有一定顺序的

4.创建持久化类和SQL映射文件(Dao层)

(1)持久化类

在应用程序中,用来实现业务问题实体的类(如,在电子商务应用程序中的Customer和Order)就是持久化类,即创建数据库对应的类,该类属性名应与数据库表中的参数名对应一致

public class Provider {
    private int id;
    private  String proCode;
    private  String proName;
    private  String proDesc;
    private  String proContact;
    private  String proPhone;
    private  String proAddress;
    private  String proFax;
    private  int createdBy;
    private Date creationDate;
    private Date modifyDate;
    private int modifyBy;
    //此处省略getter&setter&toString方法

对应的表如下:
对应的mysql表

(2)SQL映射文件

类所对应的映射文件格式为xml 命名为ProviderMapper.xml并建立ProviderMapper接口(方法名与ProviderMapper.XML中id对应)
ProviderMapper.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指定关联的接口-->
<mapper namespace="cn.kgc.kb07.dao.ProviderMapper">
    <!--id对应接口的方法名,resultType为对应方法返回值类型-->
     <select id="queryAllProvider" resultType="provider">
        select * from smbms_provider;
    </select>

ProviderMapper代码如下:

package cn.kgc.kb07.dao;

import cn.kgc.kb07.entity.Provider;

import java.util.List;

public interface ProviderMapper {
    List<Provider> queryAllProvider();
}

5.创建测试类

需在工程中加入JUnit4并自行配置JUnit4配置文件,创建测试类,并通过JUnit4方法输出日志(也可通过System.out.println在控制台打印结果)
测试类如下:

package cn.kgc.dao;

import cn.kgc.entity.User;
import cn.kgc.until.MapperConfig;
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.apache.log4j.Logger;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import static org.junit.Assert.*;

public class UserMapperTest {
    Logger logger=Logger.getLogger(UserMapperTest.class);

    @Test
    public void queryAllProvider() throws IOException {
        //1、工程队
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        //2、建工厂
        InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
        SqlSessionFactory factory=builder.build(is);
        //生产SqlSession对象
        SqlSession session=factory.openSession();
        List<Provider> providerList=session.getMapper(ProviderMapper.class).queryAllProvider();
        for (Provider provider : providerList) {
            System.out.println(provider);
        }
        session.close();
    }

6.代码优化提取方法

提取的方法如下:

package cn.kgc.until;

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 java.io.IOException;
import java.io.InputStream;

/**
 * @Author shi
 * @Date 2020/6/9
 * @Description 目的是为Mybatis中读取配置文件创建SqlSession对象时方便调用
 */

public class MapperConfig {
    private static SqlSessionFactory factory;
    //静态方法可能会导致报错,如出现错误可改为动态方法
    static{
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        try {
            InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
            factory=builder.build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static SqlSession getSession(){
        //非事物的情况下,把自动提交开启
        return factory.openSession(true);
    }

    public   static void closeSession(SqlSession session){
    //关闭方法
        if (session!=null){
            session.close();
        }
    }
}

提取方法后的测试类如下:

public class ProviderMapperTest {
    @Test
    public void queryAllProvider() {
        SqlSession session= MapperConfig.getSession();
        List<Provider> providerList=session.getMapper(ProviderMapper.class).queryAllProvider();
        for (Provider provider : providerList) {
            System.out.println(provider);
        }
        MapperConfig.close(session);
    }
}

MyBatis框架优缺点

(1)优点

1.与JDBC相比,减少了50%以上的代码量
2.最简单的持久化框架,小巧并简单易学
3.SQL代码从程序代码中彻底分离,可重用
4.提供XML标签,支持编写动态SQL
5.提供映射标签,支持对象与数据库的ORM字段映射

(2)缺点

1.SQL语句编写工作量大,对开发人员有一定要求
2.数据库移植性差

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值