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)

作用: 数据访问层框架. 底层是对 JDBC 的封装.

优点之一:使用mybatis时不需要编写实现类,只需要写需要执行的sql命令

MyBatis环境搭建和使用

1.导入 jar

2.在src下新建全局配置文件

  • 没有名称和地址要求
  • 在全局配置文件中引入 DTD 或 schema
  • 如果导入dtd后没有提示,可以采用使用本地dtd
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?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>
    <!--default引用的environment的id,当前所使用的环境-->
    <environments default="mysql">
    <environment id="mysql">
    <!--使用原生JDBC事务-->
    <transactionManager type="JDBC"></transactionManager>
    <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"></property>
    <property name="url" value="jdbc:mysql://localhost:3306/ssm"></property>
    <property name="username" value="root"></property>
    <property name="password" value="kylin"></property>
    </dataSource>
    </environment>
    </environments>
    <mappers>
    <mapper resource="com/kylin/mapper/FlowerMapper.xml"></mapper>
    </mappers>
    </configuration>

注意environments标签中的default属性值可以随便取,但是下方的environment标签中的id属性值则必须于default属性值保持一致。通过mappers标签中的maper标签并设置resource属性的值为要执行的sql操作的xml的文件路径从而连接数据库进行操作

3.新建以 mapper 结尾的包,在包下新建:实体类名+Mapper.xml

  • 文件作用:编写需要执行的 SQL 命令
  • 把 xml 文件理解成实现类
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    <?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="a.b">
    <!--id:方法名
    parameterType:定义参数类型
    resultType:返回值类型

    如果方法返回值是list,在resultType中写List的泛型,因为mybatis对jdbc封装,一行一行读取数据
    -->
    <select id="selAll" resultType="com.kylin.pojo.Flower">
    select * from flower
    </select>
    <select id="selById" resultType="int">
    select count(*) from flower
    </select>

    <select id="c" resultType="com.kylin.pojo.Flower">
    select * from flower
    </select>
    </mapper>

namespace:理解成实现类的全路径(包名+类名)
id:方法名
parameterType:定义参数类型
resultType:返回值类型:如果方法返回值是list,在resultType中写List的泛型,因为mybatis对jdbc封装,一行一行读取数据
注意:namespace属性值可以随便取,但是调用实现的时候,使用的路径就是namespac+id,并且不要忘记这mybaits的配置文件中对此xml文件进行绑定


4.测试结果(只有在单独使用 mybatis 时使用,最后 ssm 整合时下面代码不需要编写.)

1
2
3
4
5
6
7
8
9
10
InputStream is = Resources.getResourceAsStream("myabtis.xml");
//使用工厂设计模式
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//生产
SqlSession SqlSession session=factory.openSession();
List<Flower> list = session.selectList("a.b.selAll");
for (Flower flower : list) {
System.out.println(flower.toString());
}
session.close();

环境搭建详解

  • type 属性可取值
    • JDBC,事务管理使用 JDBC 原生事务管理方式
    • MANAGED 把事务管理转交给其他容器.原生 JDBC 事务setAutoMapping(false);
  • type 属性
    • POOLED 使用数据库连接池
    • UNPOOLED 不实用数据库连接池,和直接使用 JDBC 一样
    • JNDI:java 命名目录接口技