MyBatis:ORM框架介绍及实战应用(1)

什么是MyBatis?
  • Apahce的一个开源项目
  • 一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。解耦
  • 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
  • 通过简单的 XML 或注解来配置和映射 Java对象 到 数据库中的记录
  • 官方地址:https://mybatis.org/mybatis-3/
MyBatis核心流程:

https://mybatis.org/mybatis-3/zh/getting-started.html

  • 每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心

  • SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得

  • SqlSessionFactoryBuilder 可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例

  • 工厂设计模式里面 需要获取SqlSession ,里面提供了在数据库执行 SQL 命令所需的所有方法
    在这里插入图片描述

MyBatis使用流程:

Step1:创建mybatis-config.xml全局的配置文件
Step2:创建XXXMapper.xml配置文件
Step3:创建SqlSessionFactory
Step4:用SqlSessionFactory创建SqlSession对象
Step5:用SqlSession执行增删改查CRUD

Step1:新建SpringBootMaven项目

在这里插入图片描述

Step2:添加maven依赖
<dependencies>
        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>

        <!-- 使用JDBC链接mysql的驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>

        <!--日志打印-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
</dependencies>
Step3: 配置mybatis-config.xml

resources目录下创建config文件夹创建xml配置文件

作用:用于配置mybatis,连接信息等
问题:在连接数据库后可能会报一个乱码错误,这是因为mysql-connection-java版本导致时区的问题。
解决方法是在Mysql中执行新增操作
SET GLOBAL time_zone = ‘+8:00’

<?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="development">
        <environment id="development">
        //事务管理
            <transactionManager type="JDBC"/>
            //数据库连接池
            <dataSource type="POOLED">
            //jdbc驱动
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                //数据库连接地址	对用用户名、密码等
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/educationapp?useUnicode=true;characterEncoding=UTF-8;serverTimezone=Asia/Shanghai"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    //一个表就对应一个mapper文件 mapper路径 	这里面放的是sql语句
    <mappers>
        <mapper resource="mapper/VideoMapper.xml"/>
    </mappers>
</configuration>
Stpe4:创建实体类
/**
 *  视频实体
 */
public class Video {

    private int id;

    private String title;

    public int getId() {
        return id;
    }

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

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
Step5:创建Dao接口-与数据库交互层

public interface VideoMapper {
    /**
     * 根据视频id查找视频对象
     * @param videoId
     * @return
     */
     //单一参数可以不写注解 多参数需要写
    Video selectById(@Param("video_id") int videoId);
}
Step6:配置**Mapper.xml
  • 注意 :取java对象的某个值,属性名大小写要一致
#{value} : 推荐使用, 是java的名称

${value} : 不推荐使用,存在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">
<!--
    namespace:名称空间,一般需要保持全局唯一
    Dao接口即Mapper接口。接口的全限名,就是映射文件中的namespace的值;
    接口的方法名,就是映射文件中Mapper的Statement的id值;接口方法内的参数,就是传递给sql的参数
    Mapper接口里的方法,是不能重载的,因为是使用 全限名+方法名 的保存和寻找策略。
    Mapper 接口的工作原理是JDK动态代理
    Mybatis运行时会使用JDK动态代理为Mapper接口生成代理对象proxy
    代理对象会拦截接口方法,转而执行MapperStatement所代表的sql,然后将sql执行结果返回
-->
<mapper namespace="net.jhclass.online_class.dao.VideoMapper">
   <!--
    statement   sql
    id:当前mapper下需要唯一
    resultType:返回映射类型
    -->
    <select id="selectById" resultType="net.jhclass.online_class.domain.pojo.Video">
    select * from video where id = #{video_id}
  </select>

</mapper>
Step7:Main方法测试
import net.jhclass.online_class.dao.VideoMapper;
import net.jhclass.online_class.domain.pojo.Video;
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;

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

        //1.加载配置文件
        String resouce = "config/mybatis-config.xml";
        //拿到对应的流
        InputStream inputStream = Resources.getResourceAsStream(resouce);

        //2.构建构建SqlSessionFactory 通过SqlSessionFactoryBuilder,就是Builder模式 工厂设计模式
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //3.获取Session 使用JDK8的语法 需要修改编译器 SqlSession是需要关闭的 JDK8的语法自动关闭
        try (SqlSession sqlSession = sqlSessionFactory.openSession()){

            //4.通过反射拿到对应的Mapper文件
            VideoMapper videoMapper = sqlSession.getMapper(VideoMapper.class);

            //5.实体对象接收结果
            Video video = videoMapper.selectById(44);

            System.out.println(video.toString());
        }

    }
}
使用注解的方法编写Sql语句

写在dao层不会和mapper.xml文件有任何关系

如果没有多表关联,简单查询的话,可以使用注解的方式

public interface VideoMapper {
    /**
     * 根据视频id查找视频对象
     * @param videoId
     * @return
     */
    Video selectById(@Param("video_id") int videoId);

    @Select("select * from video")
    List<Video> selectList();

}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值