zoukankan      html  css  js  c++  java
  • (三)mybatis 的使用(入门)

    目录


    mybatis 的使用 —— 准备

    下载完 mybatis 以后,将其核心包和依赖包导入工程即可 ;不过 mybatis 也依赖于 log4j 因此,需要再导入一个 log4j 的配置文件 ;


    mybatis 的使用 —— 搭建好工程结构

    1255621959

    创建一个配置包(config),在里面进行 mybatis 的配置,其中全局配置(sqlMapConfig.xml) 就放在这个包下面。

    还有一个 sqlMap 包,这里是放置 sql 的配置文件的 ;


    mybatis 的使用 —— 创建 sqlMapCnfig.xml 全局配置文件

    config 包下面创建创建全局配置文件,全局配置文件的名字是任意的,可随便取名;

    <?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>
        <!--当和 spring 整合以后,environments 配置将废除-->
        <environments default="development">
            <environment id="development">
                <!--事务管理,暂时有mybatis管-->
                <transactionManager type="JDBC"/>
                <!--数据源 暂时也由 mybatis 管理,以后都由 spring 来管理-->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql:///mybatisDay01?charset=utf-8"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
    
    </configuration>

    mybatis 的使用 —— 根据用户 id 查询用户

    1. 首先在 sqlMap 包下面,创建 映射文件

      映射文件的名字,有2种写法:一种是 xxx.xml;另一种是 xxxMap.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="test">
          <select id="selectBlog" parameterType="int" resultType="xin.ijava.pojo.User">
             select * from User where id = #{id}
          </select>
      </mapper>

      namespace :名称空间,用来隔离 sql 语句

      id :是表示映射文件中的 sql 语句,由于最后 sql 语句被封装到 mappedStatement 对象中,因此,id 也可以看做是 statement对象的 id

      #{}mybatis 中的占位符 ;

      #{id} :这里的 id 是接受输入参数的名字,当输入参数类型是 java基本类型 的时候,id 可以随便取名字。当输入参数类型是 pojo 时候,名字必须是输入参数的名字;

      parameterType :输入参数类型 ;

      resultType:输出结果类型,表示将 单条 结果映射成对应的 java对象类型 ;不管返回的多条记录还是单条记录,它只关心单条或者多条中的单条返回的是什么类型 ;


    2. sqlMapCnfig.xml 中加载映射文件

      <!--加载映射文件-->
      <mappers>
          <!--地址从src包开始写,用斜杠代替-->
          <mapper resource="xin/ijava/config/sqlmap/User.xml"/>
      </mappers>
    3. java 代码编写

      package xin.ijava.mybatis;
      
      
      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 xin.ijava.pojo.User;
      
      import java.io.IOException;
      import java.io.InputStream;
      
      /**
       * @author An
       */
      public class MybatisTest {
      
          @Test
          public void findUserByIdTest() throws IOException {
              //    1、读取全局配置文件,传入会话工厂,以便创建会话,也可以使用 mybatis 的  Resources.getResourceAsStream("") ;读取
              //    参数,都是从src开始写;
              //      InputStream inputStream = MybatisTest.class.getClassLoader().getResourceAsStream("xin/ijava/config/sqlMapConfig.xml");
      
              InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
              //    2、创建会话工厂
              SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream) ;
              //    3、创建会话
              SqlSession sqlSession = factory.openSession() ;
              //    4、操作数据库 
              //     selectOne :查询一条记录
              User user = sqlSession.selectOne("test.findUserById",1);
              //     5、关闭会话
              sqlSession.close();
              System.out.println(user);
          }
      
      }

    mybatis 的使用 —— 根据用户 name 查询用户(模糊查询 )

    1. 配置映射关系文件

          <!--模糊查询-->
          <!--
              ${value} :表示拼接字符串,它不加任何的修饰,进行拼接,会引起 sql注入攻击 ;
                    如果是接受基本类型,则里面的参数名,必须是 value ;
          -->
          <select id="findUsersByName" parameterType="java.lang.String" resultType="xin.ijava.pojo.User">
              SELECT * FROM User where name LIKE  '%${value}%'
          </select>

    2. java 测试代码

      @Test
      public void findUsersByName() throws IOException {
         InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
         SqlSession sqlSession =  factory.openSession() ;
      //       selectList :查询出多条记录 ;
         List<User> users = sqlSession.selectList("test.findUsersByName","小明") ;
         System.out.println(users);
      }
      

    mybatis 的使用 —— 插入用户

    1. 配置映射关系

      <!--插入用户-->
      
      <insert id="insertUser" parameterType="xin.ijava.pojo.User">
          --       主键返回
          --       keyProperty:表示将主键赋给 pojo 的哪一个属性
          --       order:表示该sql 相对于下面的 sql 的执行顺序
          --       resultType :返回值类型  
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
      
          INSERT into user(name,sex,birthday,address) VALUES (#{name},#{sex},#{birthday},#{address})
      
      </insert>

      这里面有个 主键返回 问题;我们一般都设置了主键自增长,这样我们插入进去的对象的 id ,我们是没有赋值的,我们需要将自增长的 id 赋给对象的 id

      mybatis 中,按照上面的方法,可以完成 主键返回 操作 ;其中 主键返回 操作,一定要放在 insert 之后 ;


    2. java 测试代码

        @Test
      public void insertUser() throws IOException {
          InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
          SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
          SqlSession sqlSession =  factory.openSession() ;
          User user = new User();
          user.setName("YAZ");
          user.setSex("1");
      //        mybatis 支持java基本类型的转换的
          user.setBirthday(new Date());
          user.setAddress("苏州 张家港");
          sqlSession.insert("test.insertUser",user) ;
      //        提交
          sqlSession.commit();
          sqlSession.close();
      
          System.out.println(user.getId());  // 主键已经被赋值给 User 对象
      }

    mybatis 的使用 —— 删除用户

    1. 配置映射关系

      <!--删除用户-->
      <delete id="deleteUserById" parameterType="java.lang.Integer">
          DELETE FROM user WHERE id = #{id}
      </delete>
      
    2. java 测试代码

      @Test
      public void deleteUser() throws IOException {
          InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
          SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
          SqlSession sqlSession =  factory.openSession() ;
      
          sqlSession.delete("test.deleteUserById",2) ;
      //        提交
          sqlSession.commit();
          sqlSession.close();
      
      }

    mybatis 的使用 —— 更新用户

    1. 配置映射关系

          <!--更新用户-->
      <update id="updateUserById" parameterType="xin.ijava.pojo.User">
          UPDATE USER SET name = #{name},sex = #{sex},birthday = #{birthday},address = #{address} WHERE id = #{id}
      </update>
    2. java 测试代码

      @Test
      public void updateUserById() throws IOException {
          InputStream inputStream = Resources.getResourceAsStream("xin/ijava/config/sqlMapConfig.xml") ;
          SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
          SqlSession sqlSession =  factory.openSession() ;
      
          User user = new User();
          user.setId(3);
          user.setName("YAZ");
          user.setSex("1");
      //        mybatis 支持java基本类型的转换的
          user.setBirthday(new Date());
          user.setAddress("苏州 吴侬软语");
      
          sqlSession.update("test.updateUserById",user) ;
      //        提交
          sqlSession.commit();
          sqlSession.close();
      
      }

    小结

    我们一路写下来,已经发现,mybatis 主要就在于 配置映射关系,自己控制 sql 语句 ;

  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
  • 原文地址:https://www.cnblogs.com/young-youth/p/11665682.html
Copyright © 2011-2022 走看看