zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    URAL 1993 This cheeseburger you don't need
    python获取教务管理系统的MM照片
    ZOJ 3175 Number of Containers 分块
    ZOJ 3435 Ideal Puzzle Bobble 莫比乌斯反演
    整理各种线性筛法
    SPOJ 7001 Visible Lattice Points 莫比乌斯反演
    UVA 11997 K Smallest Sums
    HDU 4768 Flyer 二分
    HDU 4135 Co-prime 容斥
    POJ 3468 A Simple Problem with Integers 线段树
  • 原文地址:https://www.cnblogs.com/jinyu59/p/11918139.html
Copyright © 2011-2022 走看看