Mybatis框架笔记:基础信息

1.Mybatis介绍

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

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

摘自《百度百科》

  1. Mybatis是 ibatis的前身,属于apache基金会
  2. 2010.6转gooogle code 改名为mybatis,并做了优化
  3. spring对改名后的mybatis不再整合, mybatis自己整合了spring, 写了jar

2.为什么要用Mybatis有什么用?

(1) Mybatis的地位:

        jdbc——Spring jdbc——Mybatis——Hibernate

        手洗——搓衣板——半自动洗衣机——全自动洗衣机

        开发效率逐步增高, 执行效率逐步降低

Mybatis是中庸产品, 其比Hibernate更灵活,但比jdbc开发效率更高。

(2) 为什么要使用Mybatis?

        Mybatis封装jdbc重复代码,sql语句放在单独的xml中,程序员只关注业务,开发效率上升。

        Mybatis开发比jdbc快,但比Hibernate灵活,比Hibernate执行效率快(尤其是大批量场景)。

(3) Mybatis的优势:

         设计中庸,但灵活,且开发效率跟得上 

4.Mybatis案例搭建

github地址:

Mybatis项目:

1.创建项目,在pom.xml导包,maven管理jar包

        mybatis框架: org.mybatis 3.4.5  3.5.0

        mysql驱动: mysql.mysql-connector-java  5.0.8

<dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.5</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.0.8</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  

2.java类

         xxDao接口   xxDaoImpl实现接口   

3.入门案例|配置文件

主清单文件:configuration.xml文件  mybatis配置

<?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>
    <!--mysql连接配置文件-->
    <properties resource="conf/mysql.properties"></properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--mysql连接信息配置-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc_driverClass}"/>
                <property name="url" value="${jdbc_url}"/>
                <property name="username" value="${jdbc_userName}"/>
                <property name="password" value="${jdbc_userPassword}"/>
            </dataSource>
        </environment>
    </environments>
    <!--mybatis子清单文件-->
    <mappers>
        <mapper resource="mapper/user.xml"/>
    </mappers>
</configuration>

子清单文件:xx.xml  xxMapper.xml  业务sql

<?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="org.example.dao.UserDao">
    <!--根据id获得用户信息-->
    <select id="findUserById"
            resultType="org.example.entity.User"
            parameterType="java.lang.Integer">
        select
            id,
            user_name as name,
            user_password as password,
            address
        from t_user
        where id = #{id}
    </select>
</mapper>

其他配置文件:

mysql.properties(数据库连接)   

jdbc_driverClass=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf8
jdbc_userName=xx
jdbc_userPassword=xxxxx

log4j.properties (日志配置)

# Set The RootLogger
log4j.rootLogger=debug, console

# Direct Log Messages To Console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p %c:%L - %m%n

4.创建工具类

com.tarena.util.mybatisUtil.java:

加载总清单文件,mybatis使用连接对象sqlSession, 其等同于jdbc,用来实现连接数据库,并进行之后的数据操作。

package org.example.util;

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;

public class MybatisUtil {
    private static SqlSessionFactory sqlSessionFactory;
    static {

        try {
            String resource = "conf/configuration.xml";
            InputStream inputStream =  Resources.getResourceAsStream(resource);
            sqlSessionFactory =
                    new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 开链接
     */
    public static SqlSession getSession(){
        SqlSession sqlSession=sqlSessionFactory.openSession();
        return sqlSession;
    }
}

5.功能实现:Mybatis使用自己的api解析清单文件,api操作增删改查

6.编写单元测试进行测

5.细节

5.1清单文件|配置文件

前情提要:清单文件和配置文件、资源文件说法不同,其实是一个东西。

1.各个清单文件都包含什么?

resource/conf/配置文件

        configuration.xml文件,包含属性文件加载、数据库连接、数据库事务配置、子清单文件加载等

        mysql.properties 数据库连接配置

 resource/mapper子清单文件:xx.xml 跟业务对应的sql

        mapper 的namespace命名空间,同意个命名空间下sql语句的id不能相同

        resultType结果集:数据查询后的返回类型

        parameterType 参数类型: 用于查询的参数类型

 resource/log4j.properties:  开启log4j日志管理

2.各个清单文件都是用来做什么的?

  • 工具类根据指定路径加载总清单文件,总清单文件中指定了子清单文件、mysql连接信息
  • 工具类解析总清单文件,获取获得sqlSessionFactory(用于开启连接)
  • 注意清单文件里用/而不是.来分割路径

3.Mybatis的总配置文件:configuration.xml 配置项是有顺序的

configuration :

        properties:资源引入

        settings

        typeAliases:设置别名

        typeHandlers

        ObjectFactory

        plugins

        environments

                environment:

                        transactionManager:事务管理

                        dataSource:数据库连接信息

5.2连接数据库和之前有什么区别?

之前开链接:

//获得连接
Connection con=DriverManager.getConnection("url","username","password");
//开启事务
con.setAutoCommit(false);

现在等价于:MyBatisUtil中

Sqlsession sqlSession=sqlSessionFactory.openSession();//直接开启事务

其中sqlSessionFactory的作用:开链接,相当于事务开启

1. getSession()——>SqlSession

2. openSession()——>开链接,相当于事务开启

SqlSession sqlSession=sqlSessionFactory.openSession();

老写法: sqlMapper,现在叫sqlSession,等同于jdbc的connetion

工具类加载总清单文件——总清单文件加载子清单文件。——mybatisUtil用于获取mybatis连接对象sqlSession|sqlMapper等同于jdbc的Connection

6.设计模式:

工厂模式:SqlSessionFactory    SqlSession sqlSession=sqlSessionFactory.openSession();

构建者模式:new SqlSessionFactoryBuilder().build(inputStream);

7.补充:xml的不自动提示怎么解决?

(1)关于智能提示:指到本地dtd文件【指向本地】本地dtd文件在jar包里

"http://mybatis.org/dtd/mybatis-3-mapper.dtd"

将其替换为本地的dtd文件即可,一般在下载的mybatis jar包里有

(2)最好用maven下载,其余方式很难下载

(3)static: 静态块:只加载一次,费时,且只需加载一次多处使用的资源

(4)最快的学习方式,基于文档学习

(5)两个相关的包记录一下:

        mybatis-jpetstore-6.0.1-bundle.zip  基本用法案例包

        mybatis-spring-1.2.0-bundle.zip  自己整合spring

(6)configuration.xml中$和#的区别:

#{}用于引用properties对象的值

${}用于引用已经交给了spring管理的值

在SpringMVC主配置文件applicationContext.xml文件中${}和#{}有什么区别_applicationcontext ${}-CSDN博客

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值