Mybatis

Mybatis

ORMapping:Object Reationship Mapping对象关系映射

对象指面向对象

关系指关系型数据库

java到Mysql的映射,开发者可以用面向对象的思维来管理数据库。

简单来说,mybatis是一个实现了数据持久化的开源框架,简单理解就是对jdbc进行封装。

  • Mybatis优点

Snipaste_2023-02-13_14-30-17

  • Mybatis缺点

    Snipaste_2023-02-13_14-32-17

  • Mybatis核心的接口和类

    Snipaste_2023-02-13_14-40-31

  • Mybatis的开发方式

    1.使用原生接口

    2.Mapper代理实现自定义接口。

如何使用Mybatis?

  • 新建Maven工程,pom.xml里面添加依赖。
<?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>com.southwind</groupId>
    <artifactId>aimybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
<!--添加mybatis的依赖和mysql的驱动-->
<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.17</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.12</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<!--解决idea只能读取resource文件夹里面的配置文件。java里面的配置文件也应该被读取-->
    <build>
        <resources>
            <resource>
                <!--把java文件夹里面的所有xml文件设置为可读取状态-->
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

</project>
</dependencies>
  • 新建数据表

    CREATE TABLE t_account(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(11),
    PASSWORD VARCHAR(11),
    age INT 
    )
    
  • 新建数据表对应的实体类Account

package com.southwind.entity;

import lombok.Data;

@Data
import lombok.Data;
import lombok.NoArgsConstructor;
public class Account {
    private long id;
    private String username;
    private  String password;
    private int age;
}
  • 创建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>
    <!--配置mybatis的运行环境-->
        <!--environments可以配置多个环境environment,我们从中选一个环境即可-->
            <!--default属性代表默认的数据源名称,名称可以自己起-->
        <environments default="development">
            <environment id="development">
                <!--配置JDBC的事务管理-->
                <transactionManager type="JDBC"></transactionManager>
    
                <!--POOLED配置JDBC数据源连接池-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <!--选择与那个数据库连接-->
                  <property name="url" value="jdbc:mysql://localhost:3306/mybatis?userUnicode=true&amp;characterEncoding=UTF-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    </configuration>
    

1.使用原生接口开发

​ Mybatis框架需要开发者自定义Sql语句,写在Mapper.xml文件中,实际开发过程中,会为每个实体类创建对应的Mapper.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">
<mapper namespace="com.southwind.mapper.AccountMapper">
<!--insert标签相当于一个方法,save相当于方法名,parameterType相当于传参,传一个ACCOUNT类型的对象-->
<!--从对象中把value值取出来并通过value传给sql-->
    <insert id="save" parameterType="com.southwind.entity.Account">
        insert into t_account(username,password,age) values(#{username},#{password},#{age})
    </insert>
</mapper>
  • namespace通常设置为文件所在包加文件名的形式。
  • insert标签执行查询操作
  • id:实际调用mybatis方法时需要用到的参数
  • parameterType是调用对应方法是参数的类型。

在cpnfig.xml注册AcccountMapper.xml

  <!--注册AccountMapper.xml-->
<!--如果引用要写文件后缀的时候,前面的最好用/来表示下一级,因为文件后缀是.会和前面的.冲突-->
    <mappers>
        <mapper resource="com/southwind/mapper/AccountMapper.xml"></mapper>
    </mappers>

调用Mybatis原生接口进行调用

package com.southwind.test;

import com.southwind.entity.Account;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class Test {
    public static void main(String[] args) {
        //加载Mybatis配置文件,把配置文件config.xml以流的形式读取到类中。
        InputStream inputStream = Test.class.getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
        //sqlSessionFactoryBuilder根据对应的配置文件创建工厂对象。
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
       //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //通过获取AccountMapper.xml文件中Insert标签的位置把它与该类关联起来。
        String statement ="com.southwind.mapper.AccountMapper.save";
        Account account = new Account(1l,"zhangsan","1234",24);
        //把位置与sqlsession、关联,并把需要的对象参数也传进去
        sqlSession.insert(statement,account);
            //提交事务
            sqlSession.commit();

    }
}

posted on 2023-02-14 11:38  张铁蛋666  阅读(13)  评论(0编辑  收藏  举报

导航