MyBatis快速入门(一)

1、MyBatis的简介

1.1 原始jdbc操作
查询数据:

        // 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 获得连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", 
        "root", "root");
        // 获得预编译对象
        PreparedStatement pst = connection.prepareStatement(
        "select id,username,password from user");
        // 执行查询
        ResultSet resultSet = pst.executeQuery();
        // 遍历结果集
        while (resultSet.next()) {
            // 封装实体
            User user = new User();
            user.setId(resultSet.getInt("id"));
            user.setUsername(resultSet.getString("username"));
            user.setPassword(resultSet.getString("password"));
            System.out.println(user);
        }
        // 释放资源
        resultSet.close();
        pst.close();
        connection.close();

新增数据:

        // 模拟实体对象
        User user = new User();
        user.setId(2);
        user.setUsername("Tom");
        user.setPassword("abc");
        // 注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 获得连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", 
        "root", "root");
        // 获得预编译对象
        PreparedStatement pst = connection.prepareStatement(
                "insert into user(id,username,password) values (?,?,?)");
        // 设置占位符参数
        pst.setInt(1,user.getId());
        pst.setString(2,user.getUsername());
        pst.setString(3,user.getPassword());
        // 执行操作
        pst.executeUpdate();
        // 释放资源
        pst.close();
        connection.close();

1.2 原始 jdbc 操作的分析
原始 jdbc 开发存在的问题如下:
① 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
② sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变 java 代码。
③ 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到 sql 语句的占位 符位置
应对上述问题给出的解决方案:
① 使用数据库连接池初始化连接资源
② 将 sql 语句抽取到 xml 配置文件中
③ 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射

1.3 MyBatis介绍

  • mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了
    jdbc ,使开发者只需要关注 sql 语句本身,而不需要花费精力
    去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
  • mybatis 通过 xml 或注解的方式将要执行的各种 statement 配
    置起来,并通过 java 对象和 statement 中 sql 的动态参数进行
    映射生成最终执行的 sql 语句。
  • 最后 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。采
    用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了
    封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api
    打交道,就可以完成对数据库的持久化操作。

2、MyBatis的快速入门

① 添加 MyBatis 的依赖坐标

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

② 创建 user 数据表
略
③ 编写 User 实体类
略
④ 编写映射文件 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">
    <!--查询操作-->
    <select id="findAll" resultType="user">
        select * from user
    </select>
</mapper>

⑤ 编写核心文件 SqlMapConfig.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标签加载外部properties文件-->
    <properties resource="jdbc.properties"></properties>
    <!--自定义别名-->
    <typeAliases>
        <typeAlias type="com.it.demo.User" alias="user"></typeAlias>
    </typeAliases>
    <!--数据源环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>
        <mapper resource="com/it/mapper/UserMapper.xml"></mapper>
    </mappers>
</configuration>

数据源配置jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

⑥ 编写测试类

        //获得核心配置文件
        InputStream resourceAsStream = 
            Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = 
        	new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作  参数:namespace+id
        List<User> userList = 
        	sqlSession.selectList("userMapper.findAll");
        //打印数据
        System.out.println(userList);
        //释放资源
        sqlSession.close();

3、MyBatis的映射文件概述

在这里插入图片描述

4、MyBatis的增删改查操作

4.1 增加

     <insert id="save" parameterType="com.it.domain.User">
        insert into user values(#{id},#{username},#{password})
    </insert>
        //模拟user对象
        User user = new User();
        user.setUsername("xxx");
        user.setPassword("abc");

        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //执行操作  参数:namespace+id
        sqlSession.insert("userMapper.save",user);

        //mybatis执行更新操作  提交事务
        //sqlSession.commit();

        //释放资源
        sqlSession.close();

4.2 修改

    <update id="update" parameterType="com.it.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
        //模拟user对象
        User user = new User();
        user.setId(7);
        user.setUsername("lucy");
        user.setPassword("123");

        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作  参数:namespace+id
        sqlSession.update("userMapper.update",user);

        //mybatis执行更新操作  提交事务
        sqlSession.commit();

        //释放资源
        sqlSession.close();

4.3 删除

    <delete id="delete" parameterType="int">
        delete from user where id=#{id}
    </delete>
        //获得核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //获得session工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得session回话对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //执行操作  参数:namespace+id
        sqlSession.delete("userMapper.delete",8);

        //mybatis执行更新操作  提交事务
        sqlSession.commit();

        //释放资源
        sqlSession.close();

5、MyBatis的核心配置文件概述

5.1 配置文件层级关系:
在这里插入图片描述
5.2 MyBatis常用配置解析
properties
这些是外部化的,可替代的属性,一般在Java 属性配置文件中
在这里插入图片描述
在这里插入图片描述
setting
这是MyBatis中极为重要的调整设置,它们会改变MyBatis在运行时的行为。
在这里插入图片描述
在这里插入图片描述
typeAliases
类型别名是为java类型命名一个短的名字
在这里插入图片描述
typeHandlers
类型处理器被用来将获取的值以合适的方式转换成 Java 类型

environments
环境配置就是数据源的配置,MyBatis可以配置多个环境。但是每一个SqlSessionFactory的实例只能选择一个环境,即每个数据库对应一个SqlSessionFactory的实例。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200619153733552.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ppYW5jaGFuZzkx,size_16,color_FFFFFF,t_70
mappers
mapper映射器就是用来告诉MyBatis从哪里去找映射文件,进而找到这些SQL语句。
在这里插入图片描述

6、MyBatis的相应API

6.1 SqlSession工厂构建器 SqlSessionFactoryBuilder
常用 API SqlSessionFactory build( InputStream inputStream)
通过加载 mybatis 的核心文件的输入流的形式构建一个 SqlSessionFactory 对象

String resource = " mybatis /builder/mybatis config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);

其中, Resources 工具类,这个类在 org.apache.ibatis.io 包中。 Resources 类帮助你从类路径下、文件系统或 一个 web URL 中加载资源文件。

6.2 SqlSession 工厂对象 SqlSessionFactory
SqlSessionFactory 有多个个方法创建 SqlSession 实例。常用的有如下两个:
在这里插入图片描述
6.3 SqlSession 会话对象
执行语句的主要方法
T selectOne (String statement, Object parameter)
List selectList (String statement, Object parameter)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)
操作事务主要方法:
void commit()
void rollback()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值