(三)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 语句 ;

原文地址:https://www.cnblogs.com/young-youth/p/11665682.html