MyBats 接口编程 - 【002】

标签: MyBatis

简介

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

接口式编程(高级使用方式)

  • 引入依赖(或加入jar包)
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
  • 在resources下创建config XML配置文件(修改数据源(可以直接设置,也可以通过配资源文件引入)、注册SQL配置文件)
<?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/qingdb"/>
                <property name="username" value="root"/>
                <property name="password" value="1213151"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
    /*注册SQL的XML文件*/
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>
  • 新建Sql配置文QingUserMapper.xml文件(命名空间为接口的全类名,select语句的id为接口方法名,MyBatis自动映射)
<?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.chase.qing.mybatis.DUserMapper">
 /*namespace:命名空间
        id:唯一标识符
        resultType:返回值类型
        */
    <select id="selectQingUser" resultType="com.chase.qing.entity.QingUser">
        select * from quser where unumber = #{unumber}
        /*如果字段名和数据库不匹配,可以使用别名的方式*/
        /*解决异常*/
        <if test="_parameter != null">
            and unumber = #{unumber}
        </if>
    </select>
</mapper>
  • 新建dao接口QingUserMapper(新建dao包) 接口中包含方法:将方法与sql绑定,(无需实现接口)自动创建代理对象,代理对象执行增删改查。
package com.chase.qing.mybatis;

import com.chase.qing.entity.QingUser;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;

public interface DUserMapper {
    QingUser selectQingUser(int id);
    int deleteQingUser(int id);
}
  • 创建一个类(获取sqlsessionfactory 获取sqlsession 获取接口的实现类(无需创建实现类)对象、注意修改XML配置文件路径)
package com.chase.qing.mybatis;

import com.chase.qing.entity.QingUser;
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.springframework.stereotype.Service;
import java.io.IOException;
import java.io.InputStream;
@Service
public class MybatisTest {
//创建SqlSessionFactory
    public SqlSessionFactory getSqlSessionFactory() throws IOException {
    //加载配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
//        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }

    public void  Test() throws IOException {
    //产生sqlsession实例
        SqlSession session = getSqlSessionFactory().openSession();
        try {
        //获取代理对象
            DUserMapper mapper = session.getMapper(DUserMapper.class);
            QingUser qingUser = mapper.selectQingUser(1);
            System.out.println(qingUser);
        } finally {
        // sqlSession相当于与数据库的一次回话,用完必须关闭,释放资源。
        // sqlSession和connection一样不是线程安全的,每次都应该获取一个新的对象。
            session.close();
        }
        }

  • 小结

这里写图片描述
这里写图片描述


  • 以上就是使用MyBatis常用的使用方式,使用接口可以直接映射到在命名空间中同名的 Mapper 类,并将已映射的 select 语句中的名字、参数和返回类型匹配成方法。
    这样有很多优势,首先它不是基于字符串常量的,就会更安全;其次,如果你的 IDE 有代码补全功能,那么你可以在有了已映射 SQL 语句的基础之上利用这个功能。


喜欢的话可以点点关注,或者添加作者微信,欢迎随时来撩!
Chase