MyBatis入门

2020-05-15  本文已影响0人  凡哥爱丽姐

1、MyBatis框架

    MyBatis是一个优秀的数据持久层框架,在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性要低于Hibernate(全自动化框架),性能优越,并且小巧,简单,易学,应用也越来越广泛。

    1.1、MyBatis框架的优点

    (1)MyBatis是最简单的持久化框架,简单易学。

    (2)MyBatis相当灵活,不会对应用程序或者数据库的设计有影响,SQL写在XML里,从程序代码中彻底分离,既降低耦合度,又便于统一管理与优化。

    (3)提供XML标签,支持编写动态SQL语句。

    (4)提供映射标签,支持对象与数据库的ORM字段关系映射。

    1.2、MyBatis框架的缺点

    (1)SQL语句的编写工作量大,对开发人员编写SQL语句的功底又一定的要求。

    (2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更改数据库。

2、搭建MyBatis

     以下环境的搭建和配置都是基于IDEA编辑器下的Maven项目,数据库使用的是MySql。

    2.1、在pom.xml中添加驱动的jar包(mysql.jar和mybatis.jar包)

 <dependencies>
    <dependency>
         <groupId>org.mybatis</groupId>
         <artifactId>mybatis</artifactId>
         <version>3.4.6</version>
    </dependency>
    <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.40</version>
    </dependency>    
</dependencies>

    2.2、在resources资源库中创建MyBatis的核心配置文件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 default="development">
        <environment id="development">
            <!--配置事务管理,采用JDBC的事务管理-->     
            <transactionManager type="JDBC"/>
                <!--POOLED:mybatis自带的数据源-->
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"/> <!--加载mysql驱动:com.mysql.jdbc.Driver-->
                    <property name="url" value="${url}"/><!--指定连接的数据库路径:jdbc:mysql://localhost:3306/数据库名-->
                    <property name="username" value="${username}"/><!--数据库配置时的用户名-->
                    <property name="password" value="${password}"/><!--数据库配置时的密码-->
                </dataSource>
        </environment>
    </environments>
    <!--指定mapper.xml文件的路径(maven项目是从resources源文件下找资源)-->
    <mappers>
            <mapper resource="包名/mapper文件名"></mapper>
    </mappers>
</configuration>

    2.3、创建实体类

    2.4、创建接口类

    2.5、添加mapper文件

     注:在mapper文件中保存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 表示命名空间,通常定义的格式是接口的完整路径-->
<mapper namespace="接口的完整路径">
   <!--定义sql语句,sql语句结束后不要加分号-->
   <!-- id是被调用的方法名   mapper文件中读取参数的格式:#{属性名} -->
   <insert id="方法名">
           //sql语句
    </insert>
    <!--查询语句中需添加一个结果映射属性:resultType="一般是结果类型的完整路径"-->
    <select id="方法名" resultType="查询后返回值类型">
           //sql语句
    </select>
</mapper>

    2.6、获取SqlSession,创建测试类

          //1.加载配置文件
          Reader  resourceAsReader=Resources.getResourceAsReader("mybatis-config.xml");
          //2.创建SqlSessionFactoryBuilder对象
          SqlSessionFactoryBuilder builder= new SqlSessionFactoryBuilder();
          //3.得到session工厂
          SqlSessionFactory factory=builder.build(resourceAsReader);
          //4.得到session
          SqlSession sqlSession= factory.openSession();
          //5.调取sql语句,insert("方法的完整路径"),路径=namespace+id 
          int rs=sqlSession.insert("方法的完整路径" ,e);
          //6.一般增、删、改需提交事务才可以实现数据库的更改
          sqlSession.commit();  
          //7.关闭资源(放在finally中,应该添加非空验证)
          sqlSession.close();    

3、MyBatis一个简单的实现(实现用户数据的添加)

    3.1、数据库准备

     创建一个数据库名为test,表名为users

CREATE TABLE users(
 id INT PRIMARY KEY,
 NAME VARCHAR(20),
 sex VARCHAR(20)
)

    3.2、项目整体架构

项目整体架构

    3.3、添加驱动的jar包

 <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.40</version>
        </dependency>
 </dependencies>

    3.4、MyBatis的核心配置文件mybatis-config.xml

<environments default="development">
        <environment id="development">
            <!--配置事务管理,采用JDBC的事务管理-->
            <transactionManager type="JDBC"/>
            <!--POOLED:mybatis自带的数据源-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/> <!--加载mysql驱动:com.mysql.jdbc.Driver-->
                <property name="url" value="jdbc:mysql://localhost:3306/test"/><!--指定连接的数据库路径:jdbc:mysql://localhost:3306/数据库名-->
                <property name="username" value="..."/><!--数据库配置时的用户名-->
                <property name="password" value="..."/><!--数据库配置时的密码-->
            </dataSource>
        </environment>
    </environments>
    <!--指定mapper.xml文件的路径(maven项目是从resources源文件下找资源)-->
    <mappers>
        <mapper resource="Mapper/UserDaoMapper.xml"></mapper>
    </mappers>

    3.5、User实体类

package com.fan.entity;

public class User {
    private Integer id;
    private String name;
    private String sex;

    public User() {
    }

    public User(Integer id, String name, String sex) {
        this.id = id;
        this.name = name;
        this.sex = sex;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

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

    3.6、UserDao接口类

package com.fan.dao;

import com.fan.entity.User;

public interface UserDao {
    //新增用户
    public int addUser(User user);
}

    3.7、UserMapper.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.fan.dao.UserDao">
    <insert id="addUser">
        insert into users(id,name,sex) values(#{id},#{name},#{sex})
    </insert>
</mapper>

    3.8、测试类

import com.fan.entity.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.Reader;

public class Demo1 {
    public static void main(String[] args) {
        Reader resourceAsReader=null;
        SqlSession sqlSession=null;
        try {
            User user=new User(1,"张三","男");
            resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = builder.build(resourceAsReader);
            sqlSession = factory.openSession();
            int i = sqlSession.insert("com.fan.dao.UserDao.addUser", user);
            sqlSession.commit();
            System.out.println("插入成功"+i+"条");

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
           if(sqlSession!=null){
               sqlSession.close();
           }
           if(resourceAsReader!=null){
               try {
                   resourceAsReader.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
        }

    }
}

4、下期预告

用mybatis实现CRUD
上一篇下一篇

猜你喜欢

热点阅读