Mybatis三种开发模式

概要

提示: Mybatis使用细节: 1、将数据源抽取到外部配置文件中(减少硬编码) 2、类型名别名配置 3、开启Mybatis日期功能 4、配置模板

Mybatis三种开发模式:
1、接口+映射文件
2、映射文件+SqlSession提供的API方法使用(了解)
3、接口+注解

整体架构流程

整体架构
在这里插入图片描述

方式一(接口+映射文件)

(接口与配置文件动态绑定。mybatis会为接口自动创建代理对象)
(注意:1.需要将namespace中的值,写成接口的全路径 2.接口方法名称跟标签id一致)
(使用接口式优点,有明确的返回值,更严格的类型检查。将规范与实现分离,可以使用不同的持久层技术,方便开发扩展以及维护。)
UserMapper.java


import com.jw.pojo.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

User.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
}

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.jw.mapper.UserMapper">
    <select id="selectAll" resultType="com.jw.pojo.User">
        select * from tb_user
    </select>
</mapper>

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2307?useUnicode=true&amp;characterEncoding=utf-8
username=root
password=root

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>
    <!--引入外部的配置文件-->
    <properties resource="db.properties"></properties>

    <!-- mybatis的环境配置。(多环境配置)  default:执行使用哪个环境 -->
    <environments default="development">
        <!-- 数据源环境的唯一标识 -->
        <environment id="development">
            <!-- mybatis的事务管理,默认使用JDBC的事务管理(未来使用Spring的事务管理) -->
            <transactionManager type="JDBC"/>
            <!-- dataSource:数据源配置    POOLED:默认使用mybatis的数据源(未来使用druid数据源) -->
            <dataSource type="POOLED">
                <!--driver:驱动类-->
                <property name="driver" value="${driver}"/>
                <!--url:协议+数据库地址-->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <!-- 映射文件可以有多个,可以使用package标签进行批量加载 -->
    <mappers>
        <!--如果使用xml配置文件的方式,那么需要去关联映射文件-->
        <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

TestMybatis.java

import com.jw.mapper.UserMapper;
import com.jw.pojo.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 org.junit.Test;

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

public class TestMybatis {

    @Test
    public void test02() throws IOException {
        final SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
        final SqlSessionFactory sf = sfb.build(Resources.getResourceAsStream("mybatis-config.xml"));
        final SqlSession sqlSession = sf.openSession();
        final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.selectAll();
        userList.forEach(System.out::println);
    }

}

方式一结果

方式二(映射文件+SqlSession提供的API方法使用)

(接口与配置文件动态绑定。mybatis会为接口自动创建代理对象)
(注意:1.需要将namespace中的值,写成接口的全路径 2.接口方法名称跟标签id一致)
(使用接口式优点,有明确的返回值,更严格的类型检查。将规范与实现分离,可以使用不同的持久层技术,方便开发扩展以及维护。)
UserMapper.java


import com.jw.pojo.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserMapper {
    List<User> selectAll();
}

User.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
}

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="UserMapper">
    <!--id:唯一标识  要与方法名对应
     resultType:返回值类型  (单一类型)
     -->
    <select id="selectAll" resultType="com.jw.pojo.User">
        select * from tb_user
    </select>
</mapper>

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2307?useUnicode=true&amp;characterEncoding=utf-8
username=root
password=root

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>
    <!--引入外部的配置文件-->
    <properties resource="db.properties"></properties>

    <!-- mybatis的环境配置。(多环境配置)  default:执行使用哪个环境 -->
    <environments default="development">
        <!-- 数据源环境的唯一标识 -->
        <environment id="development">
            <!-- mybatis的事务管理,默认使用JDBC的事务管理(未来使用Spring的事务管理) -->
            <transactionManager type="JDBC"/>
            <!-- dataSource:数据源配置    POOLED:默认使用mybatis的数据源(未来使用druid数据源) -->
            <dataSource type="POOLED">
                <!--driver:驱动类-->
                <property name="driver" value="${driver}"/>
                <!--url:协议+数据库地址-->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <!-- 映射文件可以有多个,可以使用package标签进行批量加载 -->
    <mappers>
        <!--如果使用xml配置文件的方式,那么需要去关联映射文件-->
        <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

TestMybatis.java

import com.jw.mapper.UserMapper;
import com.jw.pojo.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 org.junit.Test;

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

public class TestMybatis {
    @Test
    public void test01() throws IOException {
        final SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
        final SqlSessionFactory sf = sfb.build(Resources.getResourceAsStream("mybatis-config.xml"));
        final SqlSession sqlSession = sf.openSession();
        //通过Mybatis中的SqlSession提供的API方法
        final List<User> userList = sqlSession.selectList("UserMapper.selectAll");
        userList.forEach(System.out::println);

    }

}

方式二结果

提示:这里可以添加技术细节`

方式三(接口+注解)

(接口与配置文件动态绑定。mybatis会为接口自动创建代理对象)
(注意:1.需要将namespace中的值,写成接口的全路径 2.接口方法名称跟标签id一致)
(使用接口式优点,有明确的返回值,更严格的类型检查。将规范与实现分离,可以使用不同的持久层技术,方便开发扩展以及维护。)
UserMapper.java



import com.jw.pojo.User;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface UserMapper {
	@Select("select * from tb_user")
    List<User> selectAll();
}

User.java

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer id;
    private String username;
    private String password;
}

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.jw.mapper.UserMapper">
<!--    <select id="selectAll" resultType="com.jw.pojo.User">-->
<!--        select * from tb_user-->
<!--    </select>-->
</mapper>

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/java2307?useUnicode=true&amp;characterEncoding=utf-8
username=root
password=root

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>
    <!--引入外部的配置文件-->
    <properties resource="db.properties"></properties>

    <!-- mybatis的环境配置。(多环境配置)  default:执行使用哪个环境 -->
    <environments default="development">
        <!-- 数据源环境的唯一标识 -->
        <environment id="development">
            <!-- mybatis的事务管理,默认使用JDBC的事务管理(未来使用Spring的事务管理) -->
            <transactionManager type="JDBC"/>
            <!-- dataSource:数据源配置    POOLED:默认使用mybatis的数据源(未来使用druid数据源) -->
            <dataSource type="POOLED">
                <!--driver:驱动类-->
                <property name="driver" value="${driver}"/>
                <!--url:协议+数据库地址-->
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载映射文件 -->
    <!-- 映射文件可以有多个,可以使用package标签进行批量加载 -->
      <mappers>
        <!--如果使用注解的方式,那么需要关联Mapper接口-->
        <mapper class="com.jw.mapper.UserMapper"></mapper>
    </mappers>
</configuration>

TestMybatis.java


import com.jw.mapper.UserMapper;
import com.jw.pojo.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 org.junit.Test;

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

public class TestMybatis {

    @Test
    public void test02() throws IOException {
        final SqlSessionFactoryBuilder sfb = new SqlSessionFactoryBuilder();
        final SqlSessionFactory sf = sfb.build(Resources.getResourceAsStream("mybatis-config.xml"));
        final SqlSession sqlSession = sf.openSession();
        final UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.selectAll();
        userList.forEach(System.out::println);
    }

}

方式三结果

注意:注解使用后不能再在映射Mapper.xml文件内使用重复定义SQL语句
否则会出现以下错误,导致两文件内容冲突
在这里插入图片描述
提示:出现错误
错误翻译:org.apache.ibatis.builder.BuilderException:解析SQL Mapper配置时出现的错误。原因:java.lang.IllegalArgumentException:映射的语句集合已经包含com.jw.mapper.UserMapper.selectAll的值。请查看com/jw/mapper/UserMapper.xml和com/jw/mapper/UserMapper.java(最佳猜测)。

小 结

关注mybatis-config文件的 配置

    <!-- 加载映射文件 -->
    <!-- 映射文件可以有多个,可以使用package标签进行批量加载 -->
    <mappers>
        <!--如果使用xml配置文件的方式,那么需要去关联映射文件-->
<!--        <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>-->
        <!--如果使用注解的方式,那么需要关联Mapper接口-->
        <mapper class="com.jw.mapper.UserMapper"></mapper>
        <!--如果mapper两个包同名配置下,可以不使用注解-->
<!--        <package name="com.jw.mapper"/>-->
    </mappers>

mybatis-config.xml配置文件注意事项

1. 使用 xml 配置文件的方式,需要在  <mappers>  标签中添加  <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>  标签。 
2. 使用注解的方式,需要在  <mappers>  标签中添加  <mapper class="com.jw.mapper.UserMapper"></mapper>  标签。 
3. 如果 mapper 两个包同名配置下,可以不使用注解,只需要在  <mappers>  标签中添加  <package name="com.jw.mapper"/>  标签。 
4.<mappers>  标签中,只能使用一种方式关联映射文件或 Mapper 接口。 
5. 如果使用 xml 配置文件的方式,需要在  <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>  标签中指定映射文件的路径。 
6. 如果使用注解的方式,需要在  <mapper class="com.jw.mapper.UserMapper"></mapper>  标签中指定 Mapper 接口的类名。 
7. 如果 mapper 两个包同名配置下,需要在  <package name="com.jw.mapper"/>  标签中指定 mapper 包的名称。 
8.<mappers>  标签中,不能同时使用  <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>  标签和  <mapper class="com.jw.mapper.UserMapper"></mapper>  标签。 
9.<mappers>  标签中,不能同时使用  <mapper resource="com/jw/mapper/UserMapper.xml"></mapper>  标签和  <package name="com.jw.mapper"/>  标签。 
10.<mappers>  标签中,不能同时使用  <mapper class="com.jw.mapper.UserMapper"></mapper>  标签和  <package name="com.jw.mapper"/>  标签。


  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值