MyBatis 框架 1 - 环境搭建

1.什么是Mybatis

 1.MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 
 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

 2.iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
 iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)

 3.MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,
 是一种半自动化的ORM实现。

下载地址:https://github.com/mybatis mybatis的jar包

2.MyBatis的优点

 1. 基于SQL语法,简单易学。
 2. 能了解底层组装过程。
 3. SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。(重点)
 4. 程序调试方便。
所有sql语句,全部定义在xml(建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为mapper。

3.与jdbc区别

 1. 减少了61%的代码量
 2. 最简单的持久化框架
 3. 架构级性能增强
 4. SQL代码从程序代码中彻底分离,可重用
 5. 增强了项目中的分工
 6. 增强了移植性

4.MyBatis工作流程

1.  加载配置并初始化:加载配置文件,将SQL的配置信息加载成为一个个MappedStatement对象
    (包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。
2. 接收调用请求:调用Mybatis提供的API,传入参数:SQL的ID和传入参数对象,
    将请求传递给下层的请求处理层进行处理。
3. 处理操作请求:API接口层传递请求过来,传入参数:为SQL的ID和传入参数对
象,处理过程:
    3.1根据SQL的ID查找对应的MappedStatement对象。
    3.2根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行
    传入参数。
    3.3获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得
    到执行结果。
    3.4根据MappedStatement对象中的结果映射配置,对得到的执行结果进行转换处
    理,并得到最终的处理结果。
    3.5释放连接资源。
    3.6返回处理结果将最终的处理结果返回。

5.操作流程

1.导入 mybatis的jar包 和 与数据库相对的驱动(oracle的为ojdbc6.jar)
2.全局配置文件
2.1SqlMapConfig.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>
    <properties resource="db.properties"></properties> <!-- 关联db配置文件 -->
    <environments default="development">
    <!--可以在environments配置多个环境-->
        <environment id="development">
            <!-- 事务管理:jdbc 与 managed-->
            <!-- jdbc:直接全部使用jdbc的提交回滚功能... -->
            <!-- managed: 什么都不做 不回滚 不提交 不关闭连接 而是交给窗口处理 托管-->
            <transactionManager type="JDBC" /> 
            <dataSource type="POOLED"><!--POOLED(一般使用这个 带连接缓存池) UNPOOLED JNDI-->
                <property name="driver" value="${driver}" />
                <property name="url" value="${url}" />
                <property name="username" value="${username}" />
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="Mapper.xml" /> <!--关联文件可以多个  根据什么对象可以不同命名比如 EmpMapper.xml  -->
    </mappers>
</configuration>
2.2 db.properties文件
driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
username=scott
password=123456
3.Mapper.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">
<mapper namespace="UserInfo">
    <select id="selectUser" parameterType="int" resultType="myBatisTest.UserInfo">
    <!--resultType:输出结果映射成java对象类型 注意保证对象属性和列名一致-->
    <!--select 定义select语句同理 update....-->
        select * from userinfo where id = #{id}
        <!--#{}为占位符(语句的?) #{id}表示接收的参数名称是id 如果输入的是简单类型,参数可以任意可以为value或其他名称-->
    </select>
</mapper>
4.SqlSessionFactory、SqlSession接口
package myBatisTest;

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

public class test {
    /*该功能一般做在Dao的实现层*/
    public static void main(String[] args) throws IOException {
        /*获取SqlSessionFactory接口*/
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);

        /*获取SqlSessionFactory接口*/
        SqlSession sqlsession = sf.openSession();
        /*带参 查一条*/
        /*参数从Mapper.xml获取UserInfo的selectUser 然后插入参数为141*/
        UserInfo u= sqlsession.selectOne("UserInfo.selectUser",21);
        System.out.println(u);
        /*释放资源*/
        sqlsession.close();
    }
}
5.对象UserInfo
package myBatisTest;

public class UserInfo {
    int id;
    String userName;
    String password;
    String sex;
    String email;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }

    public UserInfo() {
        super();
    }
    public UserInfo(int id, String userName, String password, String sex, String email) {
        super();
        this.id = id;
        this.userName = userName;
        this.password = password;
        this.sex = sex;
        this.email = email;
    }
    @Override
    public String toString() {
        return "UserInfo [id=" + id + ", userName=" + userName + ", password=" + password + ", sex=" + sex + ", email="
                + email + "]";
    }
}

6.结果(数据库自行搭建)
UserInfo [id=21, userName=1234, password=1234, sex=男, eamil=null]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值