MyBatis的基本使用

MyBatis概述: 

  MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

MyBatis和Hibernate的比较

MyBatis:

  1、MyBatis是一个半自动的ORM框架,必须写SQL语句。

  2、事务处理,缓存都支持。

Hibernate:

  1、Hibernate是一个全自动ORM框架,可以不写SQL语句

  2、事务处理,缓存都支持,二级缓存比MyBatis更好。

配置文件的类:

  Properties(属性)、Settings(全局参数设置)、typeAliases(类型别名)、typeHandlers(类型处理器)、objectFactory(对象工厂)

  plugins(插件)、environments(环境信息集合)、environment(单个环境信息)、transactionManager(事物)、dataSource(数据源)、mappers(映射器)

映射器的主要元素

  映射器是由Java接口和XML文件(或注解)共同组成的,Java接口主要定义调用者接口,XML文件是配置映射器的核心文件,包括以下元素:

  1、select 查询语句,可以自定义参数,返回结果集;

  2、insert 插入语句,返回一个整数,表示插入的条数;

  3、update 更新语句,返回一个整数,表示更新的条数;

  4、delete 删除语句,返回一个整数,表示删除的条数;

  5、sql 允许定义一部分SQL,然后再各个地方引用;

  6、resultMap 用来描述从数据库结果集中来加载对象,还可以配置关联关系;

  7、cache 给定命名空间的缓存配置;

示例如下:

  1.创建全局配置文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.qcc</groupId>
  <artifactId>mybatis01</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <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.47</version>
  </dependency>
  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
  </dependency>
  </dependencies>
</project>

  2.定义User对象:

package com.qcc.demo;

public class User {
    private Integer id;
    private String name;
    private Integer age;
    
    public User() {
        super();
    }

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

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    
}

  3.创建映射文件

<?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 名称空间:作用是用来区分各个xml映射文件的 -->
<mapper namespace="com.qcc.demo.User">
    <select id="query" resultType="com.qcc.demo.User">
        select * from t_user 
    </select>
    <insert id="addUser" parameterType="com.qcc.demo.User">
        insert into t_user(name,age)values(#{name},#{age})
    </insert>
    
    <update id="updateUser" parameterType="com.qcc.demo.User">
        update t_user set name=#{name}  , age = #{age}  where id = #{id}
    </update>
    
    <delete id="deleteById" >
        <!-- 在传达的数据是单个是情况下吗,取值的key可以自定义 -->
        delete from t_user where id = #{id}
    </delete>
    
    <select id="queryById" resultType="com.qcc.demo.User">
        select * from t_user where id = #{ids}
    </select>
</mapper>

  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>
 
  <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://localhost:3306/sys?characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
      </dataSource>
    </environment>
  </environments>
 <mappers>
     <!-- 关联映射文件,配置映射文件 -->
    <mapper resource="com/qcc/demo/UserMapper.xml"/>
  </mappers>
</configuration>

  5.测试增、删、查、改操作:

package mybatis01;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 org.junit.Test;

import com.qcc.demo.User;

/**
 * mybatis的使用步骤
 *    1.导入mybatis和mysql的jar包
 *    2.添加mybatis的全局配置文件(设置数据库连接信息和关联映射文件)
 *    3.创建对应的映射文件(写sql语句)和pojo类
 * @throws IOException 
 */
public class MybaisTest {
    @Test
    public void query() throws Exception {
        //去加载全局配置文,去各种类加载器路径下获取配置文件
        InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
        
        // 2.获取SqlSessionFactory对象 
        //具体功能:解析了全局配置文件和映射文件并将结果保存在了Configuration中
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //获取SqlSession对象
        SqlSession session = factory.openSession();
        //执行数据库操作
        List<User> list = session.selectList("com.qcc.demo.User.query");
        for (User user : list) {
            System.out.println(user);
        }
        session.close();
    }
    
    @Test
    public void queryById()throws IOException{
        InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession session = factory.openSession();
        List<User> list = session.selectList("com.qcc.demo.User.queryById", 1);
        for (User user : list) {
            System.out.println(user);
        }
        session.close();
    }
    
    @Test
    public void addUser()throws IOException{
        InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 自动提交默认是关闭的
        SqlSession session = factory.openSession();
        User user = new User();
        user.setName("cc");
        user.setAge(22);
        int count = session.insert("com.qcc.demo.User.addUser", user);
        session.commit();
        System.out.println("增加的行数:"+count);
        session.close();
    }
    
    @Test
    public void updateUser()throws IOException{
        InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 自动提交默认是关闭的
        SqlSession session = factory.openSession();
        User user = new User();
        user.setId(3);
        user.setName("马大哈");
        user.setAge(27);
        int count = session.insert("com.qcc.demo.User.updateUser", user);
        session.commit();
        System.out.println("修改的行数:"+count);
        session.close();
    }
    
    @Test
    public void deleteUser()throws IOException{
        InputStream in = Resources.getResourceAsStream("mybatis-cfg.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        // 自动提交默认是关闭的
        SqlSession session = factory.openSession();
        
        int count = session.insert("com.qcc.demo.User.deleteById", 4);
        session.commit();
        System.out.println("删除的行数:"+count);
        session.close();
    }
}
原文地址:https://www.cnblogs.com/qinchangchuan/p/11173032.html