亲宝软件园·资讯

展开

Mybatis

蓝瑟天宇 人气:0

13:01:16

MyBatis是Apache软件基金会下的一个开源项目,前身是iBatis框架。

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射

MyBatis 采用的是 ORM(Object Relational Mapping) 对象关系映射

MyBatis 的两种映射方式:

  1. 通过XML映射

  2. 通过注解

MyBatis 的简单实现(xml 实现)

  1. 创建一个maven 模块
  2. 添加 pom 文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>mybatis01</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
        <!--mybatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!--mysql数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--日志输出 log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
    <build>
        <!--重新指定资源文件-->
        <resources>
            <!--指定src/main/java下的xml文件和properties文件作为资源文件-->
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
            <!--指定src/main/resources下的xml文件和properties文件作为资源文件-->
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

  3. 配置mybatis-config.xml

    配置 dataSource.properties(自己关联的数据库)

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/study_mybatis_01_01?useUnicode=true&characterEncoding=utf-8&useSSL=false
username=root
password=root

    配置 log4j.properties(网上百度,看看需要啥)

log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    配置mybatis-config.xml 

<?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>
    <!--定义属性文件
    resource:从类路径下面读取外部文件
    url:从一个资源定位地址来读取配置文件,很少使用,了解即可
    -->
    <properties resource="dataSource.properties"/>
    <!-- 指定使用log4j输出日志-->
    <settings>
        <setting name="logImpl" value="LOG4J"/>
     <!-- 貌似这里还可以插入一个驼峰命名--> </settings> <!-- 别名配置 --> <typeAliases> <package name="cn.ttx.pojo"/> </typeAliases> <!--mybatis环境的配置--> <environments default="default"> <environment id="default"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <!--加载映射文件--> <mappers> <package name="cn.ttx.dao" /> </mappers> </configuration>

  完整配置

  实体类编写(个人比较懒,所以用了Lombok)

package cn.ttx.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
}

  测试

  1. 通过框架提供的Resources类,加载mybatis-config.xml,得到文件输入流InputStream对象

  2. 实例化会话工厂建造类SqlSessionFactoryBuilder

  3. 通过上面的SqlSessionFactoryBuilder对象,读取核心配置文件的输入流,得到会话工厂SqlSessionFactory

  4. 使用SqlSessionFactory对象,创建SqlSession对象

    1. 它相当于JDBC中的Connection对象,提供了操作数据库的CRUD方法

    2. 它提供了一个getMapper()方法,获取接口的实现对象。

  5. 获取接口的对象UserMapper,得到接口的代理对象

  6. 执行数据库的查询操作,输出用户信息

  7. 关闭会话,释放资源

package cn.ttx.dao;

import cn.ttx.pojo.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class UserMapperTest {
    private SqlSession sqlSession;
    private UserMapper userMapper;
    @Before
    public void setUp() throws Exception {
        //1. 获取核心配置文件,得到输入流对象
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //2. 构造会话工厂建造类
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        //3. 通过建造类得到会话工厂
        SqlSessionFactory sessionFactory = factoryBuilder.build(is);
        //4. 通过会话工厂得到会话对象
        sqlSession = sessionFactory.openSession();
        //5. 通过会话对象得到UserMapper接口的代理对象
        userMapper = sqlSession.getMapper(UserMapper.class);
    }

    @After
    public void tearDown() throws Exception {
        //7. 关闭会话
        sqlSession.commit();
        sqlSession.close();
    }

    @Test
    public void findAll() {
        //6. 执行查询操作
        List<User> userList = userMapper.findAll();
        System.out.println(userList);
    }
}

  

Mybatis执行流程

在Mybatis中一个会话(SqlSession)相当于一次访问数据库的过程,一个会话对象类似于一个Connection连接对象。

  1. Resources:Mybatis提供的一个加载资源的工具类,我们也可以使用其他方式获取配置文件的InputStream。

  2. SqlSessionFactoryBuilder:会话工厂建造类,用于创建会话工厂。

  3. SqlSessionFactory:会话工厂,全局共享一个会话工厂,用于创建会话对象。

  4. SqlSession: 会话,每次访问数据库都需要创建一个会话对象,这个会话对象不能共享。访问完成以后会话需要关闭。

 

IDEA 上面有很多 mybatis 的插件 free-mybatis (可以百度了解)

 

首次写这个东西,有什么错的地方,希望大家指出,谢谢各位大佬

 

加载全部内容

相关教程
猜你喜欢
用户评论