资讯详情

MyBatis系列-介绍及基本使用

MyBatis学习系列-入门

一、简介

1.什么是MyBatis

MyBatis 支持自定义的优秀持久框架 SQL、存储过程和高级映射。MyBatis 几乎所有的免除 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 通过简单 XML 或注释配置和映射原始类型 Java POJO(Plain Old Java Objects,普通老式 Java 对象)是数据库中的记录。 MyBatis 官方文档:https://mybatis.org/mybatis-3/zh/ github地址:https://github.com/mybatis/mybatis-3

2.为什么要用?MyBatis

3.JDBC

JDBC(Java Data Base Connection,java用于执行数据库连接SQL语句的Java API,一组可以统一访问各种关系数据库Java语言编写的类别和接口组成.JDBC为数据库开发人员编写数据库应用程序提供了一个基准,可以构建更先进的工具和接口

1.使用jdbc连接mysql
Connection conn = null;         PreparedStatement pstmt = null;         ResultSet rs = null;         try {             //1.定义数据库相关信息(驱动和连接信息)             String driver = "com.mysql.jdbc.Driver";             String url = "jdbc:mysql://localhost:3306/test?userSSL=false";             String username = "root";             String password = "root";              //2.加载驱动             Class.forName(driver);              //3.获取数据库连接对象             conn = DriverManager.getConnection(url,username,password);              //4.定义查询             String sql = "SELECT id,name,age FROM user WHERE name LIKE 张三%;";              //5.创建一个PreparedStatement对象操作数据库             pstmt = conn.prepareStatement(sql);              //6.执行sql,得到结果集             rs = pstmt.executeQuery();          } catch (ClassNotFoundException e) {             e.printStackTrace();         } catch (SQLException e) {             e.printStackTrace();         } finally {             try {                 if (rs != null) {                     rs.close();                 }                 if (pstmt != null) {                     pstmt.close();                 }                 if (conn != null) {                     conn.close();                 }             } catch (SQLException e) {                 e.printStackTrace();             }         } 
2.JDBC缺点
  • 数据库连接频繁,造成资源浪费;
  • 硬编码导致SQL语句与业务代码高度耦合不利于后期维护迭代;
  • 对PreparedStatement对象参数设置方便,需要设置占位符硬编码;
  • 返回结果对象ResultSet 需要通过大量硬编码赋值与业务返回对象;

4.建立第一个Mybatis项目

1.创造一个普通的maven项目
2.添加pom.xml依赖
<dependencies>         <dependency>             <groupId>org.mybatis</groupId>             <artifactId>mybatis</artifactId>             <version>3.5.4</version>         </dependency>         <dependency>             <groupId>mysql</groupId>             <artifactId>mysql-connector-java</artifactId>             <version>5.1.47</version>         </dependency>     </dependencies> 
3. 驱动与数据库版本的关系

在这里插入图片描述

4.创建 user数据表
CREATE TABLE `user` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,   `name` varchar(20) DEFAULT NULL,   `age` int(2) DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;  -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('1', '张三', '18'); INSERT INTO `user` VALUES ('2', '李四', '20'); 
5.创建与表对应的实体对象
package com.weber17.entity;  public class User {      private Long id;      private String name;      private Integer age;      public Long getId() {         return id;     }      public void setId(Long id) {         this.id = id;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public Integer getAge() {         return age;     }      public void setAge(Integer age) {         this.age = age;     } }  
6.创建User实体mapper接口类
package com.weber17.mapper;   import com.weber17.entity.User;  public interface UserMapper {      /**      * 根据id查询用户      * @param i
     * @return
     */
    User selectUser(Integer id);

    /**
     * 新增用户
     * @param user
     * @return
     */
    Integer insertUser(User user);

    /**
     * 更新用户
     * @param user
     * @return
     */
    Integer updateUser(User user);

    /**
     * 根据删除用户
     * @param id
     * @return
     */
    Integer deleteUser(Integer id);
}

6.在项目resources里面新建com/weber17/mapper目录创建User实体的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="com.weber17.mapper.UserMapper">

    <!--根据id查询Emp实体-->
    <select id="selectUser" resultType="com.weber17.entity.User">
        select * from Emp where id = #{id}
    </select>

    <insert id="insertUser">
        INSERT INTO
        `mybatis`.`emp` ( `username`)
        VALUES (#{username});
    </insert>

    <update id="updateUser">
        UPDATE EMP
        SET username=#{username}
        WHERE id=#{id}
    </update>

    <delete id="deleteUser">
        DELETE FROM emp
        WHERE id=#{id}
    </delete>

</mapper>
7.编写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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.weber17.mapper.UserMapper"></mapper>
    </mappers>
</configuration>
8.编写测试类
package com.weber17.test;


import com.weber17.entity.User;
import com.weber17.mapper.UserMapper;
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 java.io.IOException;
import java.io.InputStream;

public class MybatisTest {

    public static void main(String [] args){

        //加载mybatis-config.xml获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();

        //基于mapper.xml中的StatementId的方式去执行SQL
        SqlSession session = sqlSessionFactory.openSession();
        User userXml = session.selectOne("com.weber17.mapper.UserMapper.selectUser", 1);
        System.out.println("基于xml文件的方式执行SQL:");
        System.out.println(userXml);

        //基于接口绑定的方式
        /**
         * 步骤:
         * 1. 新建数据访问层的接口:POJOMapper(例如本文中的UserMapper)
         * 2. 添加mapper中对应的操作方法
         * 2.1 方法名要和mapper中对应的操作的节点的id要一致
         * 2.2 返回类型要和mapper中对应的操作的节点的resultType要一致
         * 2.3 mapper中对应的操作的节点的参数必须要在方法的参数中声明
         * 3. Mapper.xml 中的namespace要和接口的完整限定类名要一样
         * 4.修改mybatis全局配置文件中的mappers,采用接口绑定的方式:   <mapper class="com.weber17.mapper.UserMapper"></mapper>
         * 5. xml需要和接口放在同一级目录,就是在resources新建和接口一样的文件目录
         */
        UserMapper userMapperInterface = session.getMapper(UserMapper.class);
        User userInterface = userMapperInterface.selectUser(1);
        System.out.println("基于接口的方式执行SQL:");
        System.out.println(userInterface);

        //基于注解的方式
        UserMapper userMapperAnnotation = session.getMapper(UserMapper.class);
        User userAnnotation = userMapperAnnotation.selectUser(2);
        System.out.println("基于注解的方式执行SQL:");
        System.out.println(userAnnotation);

    }

    private static SqlSessionFactory getSqlSessionFactory() {
        // 从 XML 中构建 SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new SqlSessionFactoryBuilder().build(inputStream);
    }
}

9.运行结果

标签: weber传感器captor

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台