MyBatis ——入门

入门

转载:http://loveshisong.cn/mybatis/2015/01/18/MyBatis(%E4%B8%80)%E5%85%A5%E9%97%A8.html


JDBC的使用

在我看来, MyBatis 是用来进行数据库的连接和管理的包,使用 MyBatis 必须将对应的jar包添加到classpath中。
不使用 MyBatis, 通过JDBC进行数据库的操作方式如下:

数据库连接相关参数:

    // JDBC 连接所需参数
    String MYSQL_URL = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8";
    String USERNAME = "root";
    String PASSWORD = "root";
    // JDBC 对应的MySQL驱动
    String MYSQL_DRIVER = "com.mysql.jdbc.Driver";

使用 Statement 执行SQL语句

    Class.forName(MYSQL_DRIVER);
    Connection connection = DriverManager.getConnection(MYSQL_URL, USERNAME, PASSWORD);
    Statement statement = connection.createStatement();
    String SQL = "SELECT * FROM user";
    ResultSet resultSet = statement.executeQuery(SQL);

或者使用 preparedStatement,来避免一些SQL注入漏洞

    Class.forName(MYSQL_DRIVER);
    Connection connection = DriverManager.getConnection(MYSQL_URL, USERNAME, PASSWORD);
    String preparedSql = "SELECT * FROM user WHERE username = ? AND password = ?";
    PreparedStatement preparedStatement = connection.prepareStatement(preparedSql);
    preparedStatement.setString(1, "shisong"); // 第一个‘?‘的值
    preparedStatement.setString(2, "123456");  // 第二个‘?‘的值
    ResultSet resultSet = preparedStatement.executeQuery();

这样不仅需要添加 try catch,而且还要自己关闭不再使用的数据库连接。而使用MyBatis,这些工作就不需要自己管理了。


MyBatis的简单使用

MyBatis 是以 SqlSessionFactory 的实例为中心的。 SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder获得。 SqlSessionFactoryBuilder 可以从 XML 配置文件(或一个预先定制的 Configuration 的实例)构建出SqlSessionFactory 的实例。 一般在一个应用中,一个数据库只会对应一个SqlSessionFactory,所以一般我们都把SqlSessionFactory定义成单例模式,或通过Spring等进行注入。

通过 XML配置文件获得 SqlSessionFactory的方式

    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

其中的resource是mybatis配置文件,其内容稍后讲,先来看如何使用sqlSessionFactory进行数据库操作

    SqlSession session = sqlSessionFactory.openSession();
    try {
        UserMapper mapper = session.getMapper(UserMapper.class);
        User user = mapper.selectUserById(1);
    } finally {
        session.close();
    }

其中的UserMapperUser都是自己定义的类,User是与数据库中的user表对应的bean, UserMapper是一个对数据库进行操作的接口,要有一个UserMapper.xml文件与之对应, selectUserById就是接口定义的方法,其实现方式有两种,一种是在xml文件中,一种是通过注解,之后的文章会具体讲。


MyBatis项目实例

项目的文件清单

    src
    |--com.test.mybatis
    |  |--bean
    |  |  |--User.java
    |  |--mapper
    |  |  |--UserMapper.java
    |  |--TestMybatis.java
    resources
    |--mappers
    |  |--UserMapper.xml
    |--mybatis-config.xml

MyBatis配置文件: 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>
    <typeAliases>
        <typeAlias alias="User" type="com.test.mybatis.bean.User"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <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 resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

Mapper文件: mappers/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="com.test.mybatis.mapper.UserMapper">

    <select id="selectUserById" parameterType="java.lang.Integer" resultType="User">
        SELECT id, username, password
        FROM user
        where id = #{id}
    </select>

</mapper>

与数据库对应的bean:User.java

public class User {
    private Integer id;
    private String username;
    private String password;

    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 String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

对数据库的操作接口: UserMapper.java

public interface UserMapper {

    public User selectUserById(Integer id);
}

测试类: TestMybatis.java

public class TestMybatis {
    private static final Logger LOGGER = LoggerFactory.getLogger(TestMybatis.class);

    private static SqlSessionFactory sqlSessionFactory = null;

    static {
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            LOGGER.error("获取资源文件 ‘mybatis-config.xml‘ 失败", e);
        }

    }

    public static void main(String[] args) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = userMapper.selectUserById(1);
            userMapper.selectAll();
        } finally {
            session.close();
        }
    }
}

 

时间: 2024-10-13 16:21:01

MyBatis ——入门的相关文章

MyBatis1:MyBatis入门

MyBatis是什么 MyBatis是什么,MyBatis的jar包中有它的官方文档,文档是这么描述MyBatis的: MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings. MyBatis eliminates almost all of the JDBC code and manual setting of para

MyBatis入门基础(一)

一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记录于此,方便大家参考,也方便自己查阅. 话不多说,先看看原始的JDBC程序代码,看看这样的代码存在什么问题. package com.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.P

mybatis入门学习之(1)+简单例子测试

Mybatis 入门之(1)环境配置+简单例子测试 什么是MyBatis? 它是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和POJOs(Plan Old Java Objects,普通的 Java对象)映射成数据库中的记录. 其实简单一点说mybatis就是一直访问数据库的技术,它是现在比较流行的一个持久层框架,如果你对JDBC熟悉那就更容易

mybatis入门基础(二)----原始dao的开发和mapper代理开发

阅读目录 一:原始dao开发方法 二:mapper代理方法(只需要mapper接口,相当于dao接口) 承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先苦后甜嘛! 回到顶部 一:原始dao开发方法 概要:1.在上篇中搭建好的框价中编写dao接口和dao实现类 2.向dao接口实现类中注入SqlSessionFactory,在方法体内通过SqlSe

mybatis系列笔记(1)---mybatis入门

mybatis入门   MyBatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进. 目前mybatis在github上托管.  git(分布式版本控制,当前比较流程) MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费

MyBatis入门案例、增删改查

1.MyBatis是什么?(下载地址:https://github.com/mybatis/mybatis-3/releases) MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis,实质上Mybatis对ibatis进行一些改进. MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费

Mybatis入门学习篇(三)之模糊查询的两种写法

在上一讲(Mybatis入门学习篇(二)之基于注解的增删改查)中,需要用到模糊查询,比如我想查找所有含有'zjh'的Student的信息.如果是在数据库中,那么我们可以方便的使用通配符%:select * from student where name like '%zjh%' .但是如果在mybatis中直接像sql中那样,就会报错.遂百度,无果,偶然在一篇帖子中看到,遂记录下来,以备后用. 方法一: 在要查询的字符串合适位置加上%,如这里的'zjh'就应该为'%zjh%'.这是一个很管用的方

mybatis入门_mybatis基本原理以及入门程序

一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的重复性编码 二.mybatis执行流程 Mybatis基本的执行流程如下图所示: 三.mybatis入门程序 3.1 通过mybatis完成通过主键(id)查询用户(user) 3.1.1.项目环境搭建 建立的是Java项目.采用的mybatis版本为3.2.7. 需要导入mybatis核心jar包

MyBatis入门(五)---延时加载、缓存

一.创建数据库 1.1.建立数据库 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.7.9-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[email protec

MyBatis入门(二)---一对一,一对多

一.创建数据库表 1.1.创建数据表同时插入数据 /* SQLyog Enterprise v12.09 (64 bit) MySQL - 5.6.27-log : Database - mybatis ********************************************************************* */ /*!40101 SET NAMES utf8 */; /*!40101 SET SQL_MODE=''*/; /*!40014 SET @[emai