MyBatics-学习笔记

文章目录

      • 1.概念介绍
      • 2.Mybatis快速入门
          • 1.创建用户表
          • 2.创建模块导入坐标
          • 3.编写配置文件
          • 4.编写sql映射文件
          • 5.编码
      • 3.Mapper代理开发
      • 4.MyBatis核心配置文件
      • 5.商品增删改查案例(重点)
      • 6.参数传递
        • 6.2 多个参数

1.概念介绍

概念
MyBatis 是一款支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架。

  • 它将 Java 对象和数据库中的数据映射起来,使得 Java 开发人员可以通过简单的 XML 或注解配置来控制 SQL 语句和映射关系,从而避免了传统的手写 JDBC 代码的繁琐和冗余。

JDBC缺点:
来源:https://www.bilibili.com/video/BV1Qf4y1T7Hx
MyBatics-学习笔记_第1张图片

Mybatis简化
MyBatics-学习笔记_第2张图片

2.Mybatis快速入门

MyBatics-学习笔记_第3张图片

1.创建用户表
drop table if exists tb_user;

create table tb_user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	gender char(1),
	addr varchar(30)
);



INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');


2.创建模块导入坐标
<dependencies>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!-- mysql 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>	

    </dependencies>
3.编写配置文件

MyBatics-学习笔记_第4张图片

<?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>

    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>

    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis_test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <!--加载sql映射文件-->
        <!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->
        <mapper resource="com/itheima/mapper/UserMapper.xml"/>



    </mappers>


</configuration>
4.编写sql映射文件

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping
MyBatics-学习笔记_第5张图片

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
namespace:名称空间
-->
<mapper namespace="test">
    <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
    </select>
</mapper>
5.编码

定义pojo类(对象类),编写用户类
MyBatics-学习笔记_第6张图片
MyBatics-学习笔记_第7张图片

public class User {
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

查询操作

SqlSessionFactory接口:
用于创建 SqlSession 对象,是 MyBatis 的关键组件之一。它是一个线程安全的对象,可以在整个应用程序的生命周期中重复使用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
namespace:名称空间
-->
<mapper namespace="test">
    <select id="selectAll" resultType="user">
        select * from tb_user;
    </select>
</mapper>
import com.itheima.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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

//快速入门代码
public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        //1.加载核心文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        List<User> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

        //4.释放资源
        sqlSession.close();




    }
}

MyBatics-学习笔记_第8张图片

3.Mapper代理开发

Mapper 代理开发是 MyBatis 框架中一种简化数据库操作的方式,通过动态代理技术将 SQL 语句与 Java接口进行绑定,实现数据库操作的简洁、灵活和类型安全。

  • 解决原生方式中的硬编码
  • 简化后期执行SQL

Mapper代理入门案例

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名
  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值 类型一致
  4. 编码
  • 通过SqISession的 getMapper方法获取Mapper接口的代理对象
  • 调用对应方法完成sql的执行

MyBatics-学习笔记_第9张图片
MyBatics-学习笔记_第10张图片

MyBatics-学习笔记_第11张图片

package com.itheima.pojo;


import com.itheima.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserDemo {
    public static void main(String[] args) throws IOException {

        //1.加载mybatis的核心配置文件,获取sqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它来执行对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        //3.1 获取用户接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();
        System.out.println(users);

        //4.释放资源
        sqlSession.close();

    }
}

MyBatics-学习笔记_第12张图片

4.MyBatis核心配置文件

MyBatics-学习笔记_第13张图片

<?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>

    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>

    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis_test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <!--加载sql映射文件-->
        <!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->
        <mapper resource="com/itheima/mapper/UserMapper.xml"/>

        <package name = "com.itheima.mapper"/>



    </mappers>


</configuration>
核心配置文件的根元素,包含了整个配置信息。
类型别名的配置,用于给 Java 类型起别名,简化 XML 配置和映射文件中的类型引用。
.
配置数据库连接环境信息,可以配置多个环境
映射器的配置,用于加载 SQL 映射文件或注册映射器接口。

5.商品增删改查案例(重点)

案例完成品牌数据的增删改查;

JDBC操作如下:https://blog.csdn.net/meini32/article/details/131981238

Mybatis操作:https://blog.csdn.net/meini32/article/details/132095237

注解操作:

//查询操作
public interface BrandMapper {
    @Select("select * from tb_brand")
    List<Brand> selectAll();

6.参数传递

6.2 多个参数

定义接口

  • 使用@Param来标记参数名称,然后再映射文件中写出对应的;
  • 使用对象来指定参数
  • 使用map来指定参数
public interface BrandMapper {

    //使用 @Param 注解来指定参数的名称
    List<Brand> selectByMutiCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
    
    //使用对象来指定参数
    List<Brand> selectByMutiCondition(Brand brand);  

   //使用map来指定参数
    List<Brand> selectByMutiCondition(HashMap map);
    

}



<mapper namespace="com.itheima.mapper.BrandMapper">

    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    resultMap>


    <select id="selectByMutiCondition" resultMap="brandResultMap">
        SELECT * FROM tb_brand
        WHERE status = #{status} AND company_name LIKE #{companyName} AND brand_name LIKE #{brandName};
    select>

mapper>

你可能感兴趣的:(学习,笔记,java,mybatis)