【MyBatis】Mybatis介绍以及详细操作步骤

目录

Mybatis的介绍:

Mybatis的搭建:

Mybatis的介绍:

     mybatis属于三大框架之一(Spring,SpringMVC,mybatis),也是后期经常用到的一种技术.Mybatis是一个半ORM(对象关系映射)框架,其内部封装了开发是只需要关注的SQL语句本身,而不需要像JDBC一样加载驱动,创建连接,创建statement等繁杂的过程.而是只需要直接编写原生态SQL,可以严格控制SQL的执行性能,灵活度高.

    Mybatis可以使用XML或注解两种方式来配置和映射原生信息,将POJO(简单的Java对象,普通的JavaBean)映射成数据库中的记录,避免了几乎所有JDBC代码和手动设置参数以及获取结果集的方式.

    Mybatis通过XML或者注解模式将需要执行的各种statement配置起来,并通过java对象和statement中SQL的动态参数进行映射生成最终执行的SQL语句,最后由mybatis框架执行SQL并将结果映射为java对象并返回

优点:

  • 编程灵活,与程序代码解耦,支持动态的SQL,并且可以重用
  • 与JDBC相比,消除冗余代码
  • 兼容性强
  • 与Spring很好的集成]
  • 支持对象与数据库的ORM映射

缺点:

  • SQL语句的编写工作量大,对程序员的SQL语句功底要求严格
  • SQL语句依赖数据库,移植性差(MySQL-->Oracle需要修改部分代码)

使用场合:

  • Mybatis专注于SQL本身,是一个灵活的DAO层解决方案
  • 对性能的要求很高,或者需要变化较多的项目

Mybatis的搭建:

Mybatis的工具类:

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 MyBatisUtils {
    //全局对象 工厂对象 整个项目只需要一个就够了
    private static SqlSessionFactory sqlSessionFactory = null ;
    static{
        //初始化sqlSessionFactory对象
        try {
            InputStream is = Resources.getResourceAsStream("SqlSessionConfig.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 返回sqlSession对象
     * @return
     */
    public static SqlSession getSession(){

        return  sqlSessionFactory.openSession();
    }

    /**
     * 关闭事务
     * @param sqlSession
     */
    public static void close(SqlSession sqlSession){
        sqlSession.commit();//提交
        sqlSession.close();//关闭
    }
}

mybatis的properties配置文件(db.properties):

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///数据库名
jdbc.username=root
jdbc.password=root

主配置文件(SqlSessionConfig.xml):

主配置文件一般不需要更改,并且主配置文件的名称需要和工具类 

InputStream is =Resources.getResourceAsStream("SqlSessionConfig.xml");参数名称相同

主配置文件需要放在src文件夹下.

<?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>
    <!--配置加载数据源的配置信息-->
    <properties resource="db.properties"></properties>
    <settings>
    <setting name="lazyLoadingEnabled" value="true"></setting>
</settings>
    <!--自定义别名注册器-->
    <typeAliases>
        <!--配置别名(配置实体类名的别名为实体类名) 别名不区分大小写-->
        <package name="com.james.domain"/>
    </typeAliases>
    <!--环境   default="xxx" 默认使用哪个配置-->
    <environments default="development">
        <!--配置第一组环境  id="任意,只要唯一即可"-->
        <environment id="development">
            <!--使用jdbc的事务管理-->
            <transactionManager type="JDBC"/>
            <!--数据源配置  使用的是mybatis的默认数据源 POOLED-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--加载映射文件,使用package配置映射文件,mapper配置文件中的id不需要全限定类名(包名.包名.类名)-->
        <!--<mapper resource="映射文件.xml"/>-->
        <package name="com.james.dao"></package>
    </mappers>
</configuration>

mapper映射文件:

<?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="接口全限定类名">
    <select id="接口的方法名称" resultType="返回值类型">
      select * from tbl_user
    </select>
</mapper>

注意:如果主配置文件中mapper标签中配置的是<package name="com.james.dao"></package>,则映射文件需要建立在dao文件夹下,并且和dao文件中的类名相同

UserDao.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.james.dao.UserDao">
    <insert id="save" parameterType="user">
      insert into
      user (id,username,birthday,sex,address)
      VALUES (#{id},#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

UserDao:

package com.james.dao;
import com.james.domain.User;
import java.util.List;
public interface UserDao {
    //方法名和UserDao.xml中的id一致
    void save(User user);
}

Mybatis测试的其他步骤:

  • 引入jar包,mybatis,mysql驱动, 日志包(src文件夹下)[此步骤在配置文件之前完成]
  • 准备测试类(test)
  • 准备dao接口(例如上面的UserDao)
  • 准备User类

jar包:

链接:https://pan.baidu.com/s/18YhNAo4zGUaxyrdKvPu7Cw 
提取码:kxwz

test类:

package com.james.test;
import com.james.Utils.MybatisUtils;
import com.james.dao.UserDao;
import com.james.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.Date;
import java.util.List;

public class mybatis_test {

    //获取代理对象
    SqlSession session = MybatisUtils.getSession();
    @Test
    public void save(){
        //通过getMapper返回动态代理的实现类
        UserDao userDao = session.getMapper(UserDao.class);
        //添加数据
        User user = new User();
        user.setId(4);
        user.setUsername("James");
        user.setBirthday(new Date());
        user.setAddress("天津");
        user.setSex("男");
        //调用方法
        userDao.save(user);
        //调用关闭事务等方法
        MybatisUtils.close(session);
    }

User类:

package com.james.domain;
import java.util.Date;

public class User {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    //省略get  set  tostring 构造方法
}

样本:

                                                                

猜你喜欢

转载自blog.csdn.net/weixin_43267344/article/details/108818369