首页 > 技术文章 > Mybatis入门(一) 介绍及其第一个使用程序

carry-huang 2021-08-28 18:54 原文

Mybatis 介绍

MyBatis 是一款持久层框架。

支持定制化 SQL、存储过程以及高级映射。

避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。

MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录

 

特点

简单易学

灵活

sql写在xml里,便于统一管理和优化。
解除sql与程序代码的耦合
提供映射标签,支持对象与数据库的orm字段关系映射
提供对象关系映射标签,支持对象关系组建维护
提供xml标签,支持编写动态sql

 

 

第一个入门程序 :链接数据库,查询表单

首先使用idea创建一个maven项目

添加以下依赖 ,链接数据库,mybaties,单元测试的依赖

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

 

在数据库中创建user表,以及创建一个对应的类(该类需要属性私有,有无参构造,get/set方法,可使用@data注解),如下: 

    

 

 

 

每个 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。

SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。

SqlSessionFactoryBuilder 则可以从 XML 配置文件来构建出 SqlSessionFactory 实例。

SqlSession对象则是由SqlSessionFactory 获得的,所有的有关sql的操作语句都是由SqlSession完成。

一句话:获取Sqlseesion对象,获取代码是固定的,如下

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

 

mybatis需要配置一个核心配置的XML文件(mybatis-config.xml上面第一行代码),将需要连接的数据库驱动,数据库链接,账号以及密码写入配置

代码后面的 <mappers> </mappers> 为注册一个mapper的xml文件,该xml使用来关联一个java类或者接口,及其对方法,和在编写sql语句

<?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/school?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/hys/mybatis/dao/userDao.xml"/>
    </mappers>
</configuration>

 

com/hys/mybatis/dao/userDao.xml(上面mapper标签下文件)的代码如下,namespace为对应的类,select中id对应的是namespace类中的方法,result为查询的结果集。userDao的接口代码如下

com.hys.mybatis.pojo.user 该类为具体类,属性私有,拥有无参构造,以及get/set方法

<mapper namespace="com.hys.mybatis.dao.userDao">
    <select id="getUserList" resultType="com.hys.mybatis.pojo.user" >
        select * from school.user
    </select>
</mapper>
public interface userDao {
    public List<user> getUserList();
}

 

最后测试,请先在上面 所写的 url=jdbc:mysql://localhost:3306/school?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true

确保这个url能连上数据库,数据库有对应的表,测试代码如下:

    @Test
    public void getUser() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        userDao mapper = sqlSession.getMapper(userDao.class);
        List<user> userList = mapper.getUserList();
        for (user user : userList) {
            System.out.println(user);
        }

    }

 

推荐阅读