MyBatis学习(一)

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射;
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作;
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

首先按照以往使用JDBC的方式来访问数据库:

JDBC实现数据库操作

   public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

        try {
            //1.加载数据库驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取数据库连接
            DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8",
                    "root", "root");
            //3.定义sql语句
            String sql = "select * from user where username = ?";
            //4.获取预处理对象
            preparedStatement = connection.prepareStatement(sql);
            //5.设置参数
            preparedStatement.setString(1, "王五");
            //6.查询数据库
            resultSet = preparedStatement.executeQuery();
            //7.遍历查询的结果集
            while (resultSet.next()) {
                System.out.println(resultSet.getString("id") + "--" +
                        resultSet.getString("username"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            //8.释放资源
            if (resultSet != null) {
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

虽然上述未经封装的JDBC代码可实现查询数据库记录的操作,但是分析上述代码可发现以下问题:

针对上述存在的问题,可采用下述办法进行解决:

而本次学习的MyBatis即可实现上述操作。

pom.xml

    <dependencies>
        <dependency>
            <groupid>org.mybatis</groupid>
            <artifactid>mybatis</artifactid>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupid>junit</groupid>
            <artifactid>junit</artifactid>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupid>mysql</groupid>
            <artifactid>mysql-connector-java</artifactid>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupid>log4j</groupid>
            <artifactid>log4j</artifactid>
            <version>1.2.12</version>
        </dependency>
    </dependencies>

User.java

public class User implements Serializable {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", " +
                "sex=" + sex + ", address=" + address + "]";
    }
}

UserDao.java

public interface UserDao {
    List<user> findAll();
}
</user>

UserDao.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.dcyl.dao.UserDao">
    <select id="findAll" resulttype="com.dcyl.domain.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>
    <!-- 配置mybatis的环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境 -->
        <environment id="mysql">
            <!-- 配置事务的类型 -->
            <transactionmanager type="JDBC"></transactionmanager>
            <!-- 配置连接数据库的信息:用的是数据源(连接池) -->
            <datasource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver">
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis">
                <property name="username" value="root">
                <property name="password" value="root">
            </property></property></property></property></datasource>
        </environment>
    </environments>
    <!-- 告知mybatis映射配置的位置 -->
    <mappers>
        <mapper resource="com/dcyl/dao/UserDao.xml">
    </mapper></mappers>
</configuration>

MyBatisTest.java

public class MybatisTest {
    public static void main(String[] args) throws Exception {
        //1.&#x8BFB;&#x53D6;&#x914D;&#x7F6E;&#x6587;&#x4EF6;
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.&#x521B;&#x5EFA;SqlSessionFactory&#x7684;&#x6784;&#x5EFA;&#x8005;&#x5BF9;&#x8C61;
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        //3.&#x4F7F;&#x7528;&#x6784;&#x5EFA;&#x8005;&#x521B;&#x5EFA;&#x5DE5;&#x5382;&#x5BF9;&#x8C61;SqlSessionFactory
        SqlSessionFactory factory = builder.build(in);
        //4.&#x4F7F;&#x7528;SqlSessionFactory&#x751F;&#x4EA7;SqlSession&#x5BF9;&#x8C61;
        SqlSession session = factory.openSession();
        //5.&#x4F7F;&#x7528;SqlSession&#x521B;&#x5EFA;dao&#x63A5;&#x53E3;&#x7684;&#x4EE3;&#x7406;&#x5BF9;&#x8C61;
        UserDao userDao = session.getMapper(UserDao.class);
        //6.&#x4F7F;&#x7528;&#x4EE3;&#x7406;&#x5BF9;&#x8C61;&#x6267;&#x884C;&#x67E5;&#x8BE2;&#x6240;&#x6709;&#x65B9;&#x6CD5;
        List<user> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        //7.&#x91CA;&#x653E;&#x8D44;&#x6E90;
        session.close();
        in.close();
    }
}
</user>

至此关于MyBatis的入门案例已经完成,接下来就是关于MyBatis的具体细节的讲解。

Original: https://www.cnblogs.com/dcyL/p/16410569.html
Author: dcyL
Title: MyBatis学习(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/713895/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • spring boot实现不同生产环境下的文件配置

    spring boot项目开发时不同开发环境,打包生成不同的文件。(避免生产环境得到开发环境时的配置文件) 配置不同生产环境 本文适用于开发环境下需要打包项目至生产环境,避免开发环…

    技术杂谈 2023年7月11日
    065
  • linux下centos7.2下安装redis 4.0.6

    一、安装 redis 第一步:下载 redis 安装包 wget http://download.redis.io/releases/redis-4.0.6.tar.gz [roo…

    技术杂谈 2023年6月21日
    0101
  • DelayQueue详解

    DelayQueue介绍 【1】DelayQueue 是一个支持延时获取元素的阻塞队列, 内部采用优先队列 PriorityQueue 存储元素,同时元素必须实现 Delayed …

    技术杂谈 2023年7月24日
    075
  • K8S持久化存储PV、PVC笔记

    Kubernetes 使用Persistent Volume和Persistent Volume Claim 两种API资源来管理存储。 PersistentVolume (简称P…

    技术杂谈 2023年5月30日
    0102
  • 技能篇:实际开发常用设计模式

    创建型 单例模式 单例对象能节约系统资源,一个对象的创建和消亡的开销可能很小。但是日常的服务接口,就算是一般小公司也有十几万的QPS吧。每一次的功能运转都创建新的对象来响应请求,十…

    技术杂谈 2023年7月25日
    074
  • XSS 防御方法总结

    1. XSS攻击原理 XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般…

    技术杂谈 2023年5月31日
    094
  • 惊呆了!SpringBoot还能开启远程调试?

    持续原创输出,点击上方蓝字关注我 前言 什么是远程调试? 为什么要远程调试? 什么是JPDA? 如何开启调试? transport server suspend address o…

    技术杂谈 2023年7月23日
    063
  • 巧用Prometheus来扩展kubernetes调度器

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月25日
    077
  • nodejs队列

    nodejs队列 创建具有指定并发性的队列对象。添加到队列的任务以并行方式处理(直到并发性限制)。如果所有的worker都在进行中,任务就会排队,直到有一个worker可用。wor…

    技术杂谈 2023年5月31日
    079
  • spring-MVC

    步骤 1.创建maven父项目 导入公共依赖 junit junit 4.12 org.springframework spring-webmvc 5.1.9.RELEASE ja…

    技术杂谈 2023年7月11日
    082
  • linux简单Socket编程-服务器端、客户端一对一连接

    一、服务器端、客户端连接示意图 注:(上述图片源于传智播客linux系统编程的视频截图); 二、服务器端、客户端代码 1、服务器端代码 #include #include #inc…

    技术杂谈 2023年7月11日
    089
  • Centos7 配置ipv6地址、静态路由

    1. 手动配置ipv6地址 1.修改配置文件, eth0换成自己的网口名称 vim /etc/sysconfig/network-scripts/ifcfg-eth0 具体配置信息…

    技术杂谈 2023年5月30日
    080
  • LDD3源码分析之poll分析

    编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/pipe.c examples/scull…

    技术杂谈 2023年5月31日
    058
  • Spring中基于注解的AOC

    AOP注意事项 切面类和目标类都需要交给IOC容器管理切面类必须通过@Aspect注解标识为一个切面在spring的配置文件中设置 * 1.在切面中,需要通过指定的注解将方法标识为…

    技术杂谈 2023年7月11日
    052
  • flask 中的endpoint有什么用?

    url到view function之间的一个中间概念,默认是view function的名字,相比于直接使用view function, 使用end point 提供了一个命名空间…

    技术杂谈 2023年7月10日
    062
  • Kubernetes中的网络

    一、引子 既然Kubernetes中将容器的联网通过插件的方式来实现,那么该如何解决这个的联网问题呢? 如果你在本地单台机器上运行docker容器的话注意到所有容器都会处在 doc…

    技术杂谈 2023年7月11日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球