Mybatis简介及入门

mybatis简介

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

mybatis操作对比

操作数据库:JDBC——>DbUtils(QueryRunner)——>jdbcTemplate:小工具

                    框架:整体解决方案

jdbc处理流程:

功能简单,sql写在Java代码里——>硬编码,高耦合

Hibernate:全自动ORM(Object Relation Mapping)框架:目的在于消除sql,没法操作sql(希望把sql语句交给开发人员)


Mybatis: 半自动框架,轻量级的,sql与编码分离,sql是开发人员控制

mybatis之Helloworld

按照官方文档

1、新建实体类

2、maven依赖

<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.4.5</version>
</dependency>

3、全局配置信息mybatis-config

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE configuration
        PUBLIC "-//mapper.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--配置mybatis运行环境-->
    <environments default="development">
        <environment id="development">
            <!--type=“JDBC”代表使用JDBC的提交和回滚来管理事务-->
            <transactionManager type="JDBC"/>

            <!--mybatis提供了3种数据源类型,分别是POOLED、UNPOOLED、JNDI-->
            <!--POOLED表示支持JDBC数据源连接池-->
            <!--UNPOOLED表示不支持数据源连接池-->
            <!--JNDI表示支持外部数据源连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!--注册Mapper映射文件方式-->
    <!--将sql映射文件注册到全局配置文件中-->
    <mappers>
        <!--注册方式1,一个一个的配置-->
        <mapper resource="mapper/EmployMapper.xml"/>
        <!--注册方式2,自动包内的mapper接口与配置文件-->
        <!--<package name="mapper"/>-->
    </mappers>
</configuration>

4、测试

1)根据xml全局配置文件获得sqlSessionFactoty

2)获得sqlSession对象

3)执行sql

4)关闭sqlSession

package test;

import bean.Employee;
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.testng.annotations.Test;

import java.io.IOException;
import java.io.Reader;

/**
 * @author chenpeng
 * @date 2018/5/16 11:40
 */

public class MybatisTest {
    @Test
    public void test() throws IOException {
        /**
         * 1、根据xml配置文件(全局配置文件),创建一个sqlSessionFactory对象
         */
        String resource = "mybatis-config.xml";
        Reader reader = Resources.getResourceAsReader(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);

        //2、获取sqlSession实例,能直接执行已经映射的sql语句
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            //3、两个参数分别是唯一标识和要传入的参数
            Employee employee = sqlSession.selectOne("select",1);
            System.out.println(employee);
        } finally {
            //4、关闭sqlSession
            sqlSession.close();
        }

    }
}

5、创建映射的sql文件

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE mapper
        PUBLIC "-//mapper.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="Employee">
    <!--namespace:名称空间
        id:唯一标识
        resultType:返回值类型
        #{id}:标识从传过来的参数中取出id
    -->
    <select id="select" resultType="bean.Employee">
        SELECT * FROM t_employee WHERE id = #{id}
    </select>
</mapper>

然而报错了:

目录结构:


在pom中配置:

<build>
  <resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.xml</include>
      </includes>
    </resource>
  </resources>
</build>

参考:https://blog.csdn.net/qq_23184291/article/details/78089115

mybatis接口式编程

接口式编程需要新建一个dao类:

public interface EmployeeMapper {
    EmployeeMapper getEmployeeById(Integer id );
}

mapper映射文件的变化:

namespace内容变为接口的路径,唯一标识符变为接口的方法名

@Test
public void test1() throws IOException {
    //获取sqlSession对象
    SqlSession sqlSession = getSession();
    try {
        //获取接口的实现类
     //为接口创建一个代理对象mapper
    EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);
        Employee employee =  mapper.getEmployeeById(1);
        System.out.println(employee);
    } finally {
        //关闭sqlSession对象
        sqlSession.close();
    }
通过getMapper方法获得口类的代理对象,从而调用接口的方法。


小结:

1、推荐使用接口式编程:

2、SqlSession代表和数据库一次会话,用完必须关闭

3、SqlSession和connection一样都是非线程安全的,每次使用都应该获取新的对象,不要放在共享成员变量。

4、mapper接口没有实现类,但是mybatis会生成一个代理对象。(将接口和xml映射文件进行绑定)

EmployeeMapper mapper = sqlSession.getMapper(EmployeeMapper.class);

5、两个重要的配置文件:

mybatis全局配置文件:包含数据库连接池信息,事务管理等信息,系统运行环境

sql映射文件:保存了每一个sql语句的映射信息。


posted @ 2018-05-21 18:17  惶者  阅读(176)  评论(0编辑  收藏  举报