Mybatis框架入门

Mybatis学习第一天

学习内容:
  1. mybatis框架介绍
  2. mybatis的快速入门
  3. mybatis的mapper代理模式

什么是mybatis?

在软件开发中,我们一般分为三层架构,dao,service,servlet。mybatis其实就是dao层的一个框架,是一个半自动化的ORM框架。

那么问题来了什么是ORM

ORM是指 Object-Relationship-Mapping,对象关系映射,通俗的讲就是将数据库中的数据取出来,以实体类的形式来存储。

在这里插入图片描述

为什么要使用mybatis,优势在哪里?

优势
1. 可以简化代码,去除重复繁琐的代码;
2. 可以自动完成对象和数据库数据的转换;
3.支持缓存机制以及动态sql
4.支持将表与表之间的关系转换为实体与实体之间的关系

mybatis框架的必要组成部分:

  1. 实体类对象
  2. mybatis的主配置文件
  3. Dao接口
  4. 映射配置文件

mybatis框架的工作流程

在这里插入图片描述

入门案例的书写(未使用Mapper代理模式)

1.准备数据库
在这里插入图片描述
2.导入mybatis框架所需要的jar包,我这里使用的是maven工程,所以只用引入坐标

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

当然,既然是dao层的框架,自然是要对数据库进行操作,所以也不要忘记导入数据库连接驱动。

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
</dependency>

//其他用得上的jar包我也一并导入了

//日志
<dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
</dependency>

//单元测试
<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
</dependency>

3.书写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>
    <!--配置环境-->
    <environments default="mysql">
        <environment id="mysql">
            <!--p配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件是每个DAO独立的配置文件-->
    <mappers>
        <mapper resource="com/qzf/UserMapper.xml"/><!--这里一定要使用反斜杠分割-->
    </mappers>
    
</configuration>

4.书写映射配置文件

<?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="s">
    <select id="test1" resultType="com.domain.MyUser">
        select * from user;
    </select>
</mapper>

5.书写测试类:

 public static void main(String[] args) throws IOException {
        //1.加载配置文件
        InputStream in = Resources.getResourceAsStream("MybatisConfig.xml");
        //2.创建sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //3.创建sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //4.执行sql语句
        List<MyUser> test1 = sqlSession.selectList("test1");
        System.out.println(test1);
    }

打印结果:

2019-10-08 21:23:01,583 0      [           main] DEBUG ache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2019-10-08 21:23:01,772 189    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,772 189    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,772 189    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,772 189    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2019-10-08 21:23:01,918 335    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
2019-10-08 21:23:02,278 695    [           main] DEBUG source.pooled.PooledDataSource  - Created connection 1234776885.
2019-10-08 21:23:02,278 695    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@49993335]
2019-10-08 21:23:02,281 698    [           main] DEBUG                        s.test1  - ==>  Preparing: select * from user; 
2019-10-08 21:23:02,308 725    [           main] DEBUG                        s.test1  - ==> Parameters: 
2019-10-08 21:23:02,360 777    [           main] DEBUG                        s.test1  - <==      Total: 6
[MyUser{id=1, username='阿水', birthday=Tue May 02 00:00:00 CST 2017, sex='女', address='山西太原'}, MyUser{id=5, username='李晓雨', birthday=Thu Dec 13 00:00:00 CST 2018, sex='男', address='山西大同'}, MyUser{id=6, username='ningque', birthday=Sun Sep 09 00:00:00 CDT 1990, sex='1', address='shanxi'}, MyUser{id=16, username='阿辉', birthday=Thu Sep 13 00:00:00 CDT 1990, sex='女', address='露露安'}, MyUser{id=17, username='zgf35310', birthday=Sun Sep 09 00:00:00 CDT 1990, sex='0', address='事实上'}, MyUser{id=19, username='zgf35310', birthday=Sun Sep 09 00:00:00 CDT 1990, sex='1', address='事实上'}]

Process finished with exit code 0

这就是一个简单的入门小案例。

重点:mybatis的Mapper代理模式:

什么是Mapper代理模式?

Mybatis作为dao层的传统开发模式(接口—实现类)
Mapper代理模式:开发人员在遵循mybatis提供的一些规范的前提下,mybatis帮我们自动生成dao接口的实现类。
规范:
1.映射文件中命名空间等于dao层接口的全路径
2.映射文件中sql语句的id是dao层接口里的方法名
3.映射文件中输入参数和输出参数的类型和dao层接口里的方法的参数和返回结果保持一致。

通过介绍我们对上述的入门案例进行修改:

1.创建一个Dao层的接口

public interface IUserDao {
    List<MyUser> findAll();
    }

2.修改映射配置文件中的命名空间

修改前:
<mapper namespace="s">
修改后
<mapper namespace="com.Dao.IUserDao">

3.修改修改映射配置文件中sql语句的id,与dao层接口的方法名一致

修改前
<select id="test1" resultType="com.domain.MyUser">

修改后
<select id="findAll" resultType="com.domain.MyUser">

//这里输出参数和返回值一致,不做修改,下节详细介绍输入和输出参数。

4.测试代码的修改

//加入两行代码

 		//4.创建dao层对象
        IUserDao dao = sqlSession.getMapper(IUserDao.class);

        //5.执行dao层方法

        List<MyUser> all = dao.findAll();

这就是Mapper代理模式的简单入门案例。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值