zoukankan      html  css  js  c++  java
  • 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语句的映射信息。


  • 相关阅读:
    AppCompatActivity、ActionBarActivity、FragmentActivity和Activity的区别
    Android-Async-Http
    如何在Android studio中同时打开多个工程?
    Multi-threading Android Apps for Multi-core Processors – Part 1 of 2
    Performance Tips
    容器生态系统
    Docker生态不会重蹈Hadoop的覆辙
    Docker生态会重蹈Hadoop的覆辙吗?
    国外牛人的五个Kubernetes学习建议
    Kubernetes基本概念
  • 原文地址:https://www.cnblogs.com/huangzhe1515023110/p/9276086.html
Copyright © 2011-2022 走看看