MyBatis-使用XML或注解的简单实例

一.导入jar包

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.9-rc</version>
        </dependency>

  创建entity类的过程省略

二.配置myBatis的配置文件

1.首先创建jdbc.properties配置文件,将数据库连接信息写入

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/jydb?serverTimezone=UTC&useSSL=false
jdbc.username=root
jdbc.password=root

  

2.配置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>
    <!-- 引入jdbc.properties -->
    <properties resource="jdbc.properties">
    </properties>

    <!-- 可以配置多个运行环境,但是每个 SqlSessionFactory 实例只能选择一个运行环境
      一、development:开发模式
       二、work:工作模式-->
    <environments default="development">

        <!--id属性必须和上面的default一样  -->
        <environment id="development">
            <!-- 使用JDBC事务管理器 -->
            <transactionManager type="JDBC"/>
            <!--dataSource 数据源  -->
       <!-- 使用${}把jdbc.properties中的变量引入 --> <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标签用于配置myBatis的映射文件 *java类用class属性 *XML文件用source属性 这里配置了两个映射文件,下边会说明 --> <mappers> <mapper class="com.jy.mapper.UserMapper"/> <mapper resource="mapper/noticeMapper.xml"/> </mappers> </configuration>

  这里配置的两个mapper映射文件

    UserMapper是一个java接口,用于使用注解的方式操作数据库

    noticeMapper.xml就是普通的映射文件,是使用xml的方式来操作数据库

至此,项目结构如下

PS: 由于idea默认不识别resources以外目录下的xml文件,所以这里把noticeMapper.xml放在了resources目录下

三.使用注解的方式

public interface UserMapper { 
    //    当只传入1个参数时,#{}内可以填任意内容,表示占位符,如果有多个参数,则必须填参数名
    @Select("SELECT * FROM user WHERE id = #{value}")
    User queryById(Integer id);
}

  

四.使用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">

<!-- namespace是命名空间,不是文件的路径,这里自己随便写一个 -->
<mapper namespace="com.jy.noticeMapper" >
    <select id="queryById" resultType="com.jy.pojo.Notice" parameterType="int">
        SELECT
            *
        FROM
            notice
        WHERE
            id = #{value}
    </select>
</mapper>

  

五.使用Junit4分别测试两种方法

首先是@before和@after的方法

public class MyTest {

    SqlSession session =null;

    @Before
    public void init(){
        //定义mybatis全局配置文件
        String resource = "mybatis-config.xml";
        //加载 mybatis 全局配置文件
        InputStream inputStream = MyTest.class.getClassLoader().getResourceAsStream(resource);
        //构建sqlSession的工厂
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //根据 sqlSessionFactory 产生 session
        session = sessionFactory.openSession();
    }

    @After
    public void afterRun() {
        session.commit();
        session.close();
    }
}

 

1.测试注解的方式

    @Test
    public void userTest() {
        //根据session获取 UserMapper接口
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = userMapper.queryById(2);
        System.out.println(user);
    }

 运行结果如下

 

2.使用xml的方式

    @Test
    public void noticeTest() {
        String statement = "com.jy.noticeMapper.queryById";
        // 使用sqlSession的方法,传入命名空间.sql语句id的字符串和查询条件来查询数据
        Object o = session.selectOne(statement, 1);
        System.out.println(o);

    }

  运行结果如下

 

六.总结思路

  1.导入jar包,编写myBatis配置文件

  2.编写mapper文件,注解的方式用接口,xml的方式用xml文件.

  3.在配置文件的<mappers>标签中注册mapper文件

  3.通过SqlSession来执行映射文件中的SQL语句

 

注解方式和xml方式的区别:

  1.文件类型的区别

    注解方式使用: java接口

    xml方式使用:   xml文件

  2.在<mappers>标签内注册映射文件时

    注解方式:  是java类,使用class属性,用英文句号分隔 com.jy.mapper.UserMapper

    xml方式:    是xml文件,使用resource属性,用斜杠分隔 mapper/noticeMapper.xml

  3.使用时的区别

    注解方式:  使用Sqlsession的getMapper()方法,获取该Mapper接口的对象,用返回的对象直接调用方法即可

    xml方式:    使用Sqlsession的增删改查方法(比如selectOne()), 传入 "命名空间.sql文id" 和检索条件.

   4.获取sql文的方式

    注解方式:  直接调用方法即可,从方法上的注解获取sql文

    xml方式:    使用 " 命名空间.ip " 获取sql文.

在Mappers标签中注册映射文件是什么作用?

注册XML格式的mapper文件

  通过命名空间和sql的id来解析xml文件,这样就可以在使用SqlSession的CRUD方法时,通过" 命名空间.ip "获取SQL文来执行.

f

posted @ 2019-11-23 15:19  Kaneha  阅读(510)  评论(0编辑  收藏  举报