欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mybatis学习第一天

程序员文章站 2024-03-08 16:16:34
...

Mybatis学习第一天

学习内容:

  1. mybatis框架介绍
  2. mybatis的快速入门
  3. mybatis的mapper代理模式

什么是mybatis?

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

那么问题来了什么是ORM

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

Mybatis学习第一天

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

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

mybatis框架的必要组成部分:

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

mybatis框架的工作流程

Mybatis学习第一天

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

1.准备数据库
Mybatis学习第一天
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 [aaa@qq.com]
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代理模式的简单入门案例。