01 MyBatis框架入门案例

目录

一、什么是MyBatis?

二、入门案例环境搭建(1-9步骤)

 三、Mybatis核心对象及工作流程

1.Mybatis核心对象

2.Mybatis工作流程


一、什么是MyBatis?

MyBatis是一个半自动的ORM框架,其本质是对JDBC的封装。使用MyBatis不需要写JDBC代码,但需要程序员编写SQL语句。之前是apache的一个开源项目iBatis2010年改名为MyBatis

二、入门案例环境搭建(1-9步骤)

1.先创建一个空项目

2.在空项目下创建一个Maven类型的Module模块

3.在pom.xml中编写依赖

4.在resource目录下创建SqlMapConfig.xml来连接数据库

5.在resource目录下创建log4j.properties日志文件

6.在java目录下创建com.itbaizhan.pojo包,并创建User实体类

7.创建持久层接口和映射文件

7.1.在java目录下的com.itbaizhan包中创建mapper映射包,并创建UserMapper持久层接口

(在持久层接口中写需要实现的功能的方法名)

public interface UserMapper {
//    查询所有数据方法
    List<User> findAll();
}

7.2.在resource目录下创建映射文件,注意要与持久层接口的包名相同:com.itbaizhan.mapper.UserMapper.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">

<!--映射文件要和持久层接口名称相同;如:UserMapper对应UserMapper.xml-->
<!--映射文件要和持久层接口的目录结构相同:如com.itbaizhan.mapper.Usermapper.xml-->
<!--映射文件中namespace属性要写持久层接口的全名(包名+接口名)如:com.itbaizhan.mapper.UserMapper-->
<!--映射文件中标签的id属性是持久层接口方法中要具体实现的那一个方法名;如findAll-->
<!--映射文件中标签的resultType属性(结果类型)是接口方法的返回值类型,如果是集合+泛型的,
返回值类型是泛型的全类名,如List<User>,返回类型是User类的全类名(包名+类名)-->
<!--映射文件中标签的parameterType属性是接口方法中参数的类型,不是方法名的返回类型-->
<!--映射文件中resultType、parameterType属性要写全类名,如果是集合类型,则写其泛型的全类名-->

<mapper namespace="com.itbaizhan.mapper.UserMapper">
<!--查询所有-->
    <select id="findAll" resultType="com.itbaizhan.pojo.User">
        select * from User
    </select>
</mapper>

  8.在SqlMapConfig.xml中注册映射文件

  <!--  注册映射文件  -->
    <mappers>
        <mapper resource="com/itbaizhan/mapper/UserMapper.xml"></mapper>
    </mappers>

 9.在test.java包中创建测试类TestUserMapper类,对方法进行测试

 三、Mybatis核心对象及工作流程

 

 

//测试findAll()方法,两种方式操作数据库
public class TestUserMapper {
    @Test
//第一种方法:通过获取代理对象Mapper操作数据库
    public void testFindAll() throws IOException {
//        (1)读取核心配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//        (2) 创建SqlSessionFactoryBuild对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//        (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(is);
//        (4)SqlSessionFactory对象获取SqlSession对象
        SqlSession session = factory.openSession();
//        (5)SqlSession对象获取代理对象
        UserMapper userMapper =  session.getMapper(UserMapper.class);
//        (6)代理对象执行方法
        List<User> all = userMapper.findAll();
        all.forEach(System.out::println);
//        (7)释放资源
        session.close();
        is.close();
    }

    @Test
//第二种方法:通过SqlSession对象直接操作数据库
    public void testFindAll2() throws IOException {
//        (1)读取核心配置文件
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
//        (2) 创建SqlSessionFactoryBuild对象
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//        (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(is);
//        (4)SqlSessionFactory对象获取SqlSession对象
        SqlSession session = factory.openSession();
//        (5)SqlSession直接操作数据库
//        这种方法比较少用,因为要填入全类名(持久层全类名+方法名),名字比较长,容易出错!
        List<User> users = session.selectList("com.itbaizhan.mapper.UserMapper.findAll");
        users.forEach(System.out::println);

//        (6)释放资源
        session.close();
        is.close();
    }
}

1.Mybatis核心对象

(1)SqlSessionFactoryBuilder:SqlSessionFactoryBuilder意思是SqlSession工厂构建者对象,它使用构造者模式创建SqlSession工厂对象

(2)SqlSessionFactory:SqlSessionFactory意思是SqlSession工厂,使用工厂模式创建SqlSession对象。

(3)SqlSession:SqlSession对象可以操作数据库,也可以使用动态代理模式创建持久层接口的代理对象操作数据库。

(4)Mapper:Mapper是持久层接口的代理对象,他具体实现了持久层接口,用来操作数据库。

2.Mybatis工作流程

(1)创建SqlSessionFactoryBuilder对象

(2)SqlSessionFactoryBuilder对象构造了SqlSessionFactory对象:构造者模式

(3)SqlSessionFactory对象生产了SqlSession对象:工厂模式

(4)SqlSession对象创建了持久层接口的代理对象:动态代理模式

(5)代理对象操作数据库

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值