Mybatis框架学习(一)入门及搭建环境

MyBatis 框架 概述

  1. mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
  2. mybatis通过 xml 或注解的方式将要执行的各种statement配置起来,并通过java对象和statement 中
    sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
  3. 采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

JDBC解析Mybatis使用理由

  1. JDBC回顾
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","ro
ot", "root");
//定义 sql 语句 ?表示占位符
String sql = "select * from user where username = ?";
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","ro
ot", "root");
//定义 sql 语句 ?表示占位符
String sql = "select * from user where username = ?";
  1. 分析JDBC问题
    • 首先主要是JDBC主要是为了实现sql语句,操纵数据库的数据
    • 但是传统JDBC的操作过于繁琐,以至于会大大增加程序员的工作量
    • 所以mybatis框架就是解决这一问题,将繁琐的代码封装起来,让程序员把心思放在解决业务上。
  2. 解析JDBC
    • 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
    • Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java代码。
    • 使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。
    • 对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。

Mybatis环境搭建(IDEA)

  • 步骤:
    • 第一步:创建maven工程并导入坐标
    • 第二步:创建实体类和dao的接口
    • 第三步:创建Mybatis的主配置文件
      • SqlMapConifg.xml
    • 第四步:创建映射配置文件
      • IUserDao.xml
  • 注意事项:
    • 创建IUserDao.xml 和 IUserDao.java时名称是为了和我们之前的知识保持一致。在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper,所以:IUserDao 和 IUserMapper是一样的
    • 在idea中创建目录的时候,它和包是不一样的
      • 包(package)在创建时:com.itheima.dao它是三级结构
      • 目录(directory)在创建时:com.itheima.dao是一级目录
    • mybatis的映射配置文件位置必须和dao接口的包结构相同
    • 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
    • 映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
    • 当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
  1. 打开IDEA
    在这里插入图片描述

  2. 点击Create New Project,进入页面
    在这里插入图片描述

  3. 左边栏里找到Maven,点击后
    在这里插入图片描述

  4. 可以选择勾选create from archetype
    在这里插入图片描述

  5. 也可以不选(当作普通的JAVA工程项目),点next到下一页,上面都是自由填写
    在这里插入图片描述

  6. 一直点next
    在这里插入图片描述

  7. 通过网站mybatis依赖,找到依赖注入
    在这里插入图片描述

  8. 还需要一些其他的依赖
    在这里插入图片描述

  9. 创建实体类

public class User implements Serializable{

    private Integer id;
    private String username;
    private Date biethday;
    private String sex;
    private String address;

    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 Date getBiethday() {
        return biethday;
    }

    public void setBiethday(Date biethday) {
        this.biethday = biethday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", biethday=" + biethday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
  1. 创建Dao接口
public interface IUserDao {

    List<User> findAll();
}
  1. 创建Mybatis的主配置文件SqlMapConifg.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>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql环境-->
        <environment id="mysql">
            <!--配置事务环境-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置数据源(连接池)-->
            <dataSource type="POOLED">
                <!--连接池的基本四项信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
                <property name="username" value="root"></property>
                <property name="password" value="123456"></property>
            </dataSource>
        </environment>
    </environments>

    <!--指定映射配置文件的位置,映射配置文件指的是每个DAO独立的配置文件-->
    <mappers>
        <mapper resource="com/lwb/dao/IUserDao.xml"></mapper>
    </mappers>
</configuration>
  1. 创建映射配置文件 IUserDao.xml
<?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.lwb.dao.IUserDao">
    <!--查询所有-->
    <select id="findAll">
        SELECT * FROM USER
    </select>
</mapper>
  1. 测试案例
import com.lwb.dao.IUserDao;
import com.lwb.domain.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.InputStream;
import java.util.List;

public class test1 {

    public static void main(String[] args)throws Exception {
       // 第一步:读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConifg.xml");
       // 第二步:创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = builder.build(in);
       // 第三步:创建SqlSession
        SqlSession session = sqlSessionFactory.openSession();
       // 第四步:创建Dao接口的代理对象
        IUserDao dao = session.getMapper(IUserDao.class);
       // 第五步:执行dao中的方法
        List<User> users=  dao.findAll();
        System.out.println(users);
       // 第六步:释放资源
        session.close();
        in.close();
    }
}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41816516/article/details/106611921