码迷,mamicode.com
首页 > 其他好文 > 详细

1.1、MyBatis简介以及快速搭建实例

时间:2018-02-25 17:18:03      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:准备   map   doc   工具类   技术分享   1.7   val   odi   pid   

MyBatis简介

一个数据持久化框架

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

能讲Java的POJO映射为数据库记录

Mybatis对比其他持久化框架,优点在于SQL容易控制,方便优化

快速搭建实例

本例子用Eclipse+Maven来创建这个实例,请先掌握Maven的相关知识

1、打开Eclipse,[File]->[New]->[Other],选择Maven Project,然后下一步

技术分享图片

2、勾上简单项目选项,然后下一步

技术分享图片

3、填入相关信息,然后点击完成

技术分享图片

 4、得到的项目结构如下

技术分享图片

5、修改pom文件

技术分享图片
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>tk.mybatis</groupId>
    <artifactId>simple</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.6</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
View Code

6、准备数据库数据

技术分享图片
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
DROP TABLE IF EXISTS `country`;
CREATE TABLE `country` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `countryname` varchar(255) DEFAULT NULL,
  `countrycode` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
INSERT INTO `country` VALUES (1, 中国, CN);
INSERT INTO `country` VALUES (2, 美国, US);
INSERT INTO `country` VALUES (3, 俄罗斯, RU);
INSERT INTO `country` VALUES (4, 英国, GB);
INSERT INTO `country` VALUES (5, 法国, FR);
View Code

7、使用XML配置MyBatis

src/main/resources下创建mybatis-config.xml,注意修改MySql的ip地址和帐号密码

技术分享图片
<?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>
    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    
     <typeAliases>
        <package name="tk.mybatis.simple.model"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC">
                <property name="" value=""/>
            </transactionManager>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.16.137:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value=""/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="tk/mybatis/simple/mapper/CountryMapper.xml"/>
    </mappers>
</configuration>
View Code

<settings> 中的 logImpl 属性配置指定使用 LOG4J 输出日志

<typeAliases> 元素下面配置了一个包的别名,通常确定一个类的时候需要使用类的全限定名称,例如 tk.mybatis.simple.model.Country 。在 MyBatis 中需要频繁用到类的全限定名称,为了方便使
用,我们配置了 tk.mybatis.simple.model 包,这样配置后,在使用类的时候不需要写包名的部分,只使用 Country 即可。

<environments> 环境配置中主要配置了数据库连接,数据库的 url 为 jdbc:mysql://localhost:3306/mybatis ,使用的是本机 MySQL 中的 mybatis 数据库,后面的 username 和 password 分别是数据库
的用户名和密码(如果你的数据库用户名及密码和这里的不一样,请修改为自己数据库可用的用户名和密码)

<mappers> 中配置了一个包含完整类路径的 CountryMapper.xml ,这是一个 MyBatis 的 SQL 语句和映射配置文件

8、创建实体类

在src/main/java下创建包tk.mybatis.simple.model

然后创建一个类

技术分享图片
package tk.mybatis.simple.model;

public class Country {
    private Long id;
    private String countryname;
    private String countrycode;

    public Long getId() {
        return id;
    }

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

    public String getCountryname() {
        return countryname;
    }

    public void setCountryname(String countryname) {
        this.countryname = countryname;
    }

    public String getCountrycode() {
        return countrycode;
    }

    public void setCountrycode(String countrycode) {
        this.countrycode = countrycode;
    }

}
View Code

9、添加Mapper文件

在src/main/resources下面创建tk/mybatis/simple/mapper目录,再在该目录下面创建CountryMapper.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="tk.mybatis.simple.mapper.CountryMapper">
    <select id="selectAll" resultType="Country">
        select id,countryname,countrycode from country
    </select>
</mapper>
View Code

SQL 定义在 CountryMapper.xml 文件中,里面的配置作用如下。
<mapper>: XML 的根元素,属性 namespace 定义了当前 XML 的命名空间。
<select>元素:我们所定义的一个 SELECT 查询。
id 属性:定义了当前 SELECT 查询的唯一一个 id 。
resultType :定义了当前查询的返回值类型,此处就是指实体类 Country ,前面配置中提到的别名主要用于这里,如果没有设置别名,此处就需要写成 resultType= " tk.mybatis.simple.model.Country
"。
· select id , ... :查询 SQL 语句。

10、配置log4j

在src/main/resources中添加log4j.properties配置文件

技术分享图片
#\u5168\u5C40\u914D\u7F6E
log4j.rootLogger=ERROR, stdout

#MyBatis \u65E5\u5FD7\u914D\u7F6E
log4j.logger.tk.mybatis.simple.mapper=TRACE

#\u63A7\u5236\u53F0\u8F93\u51FA\u914D\u7F6E
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
View Code

日志注意事项!
用过 Log4j 日志组件的人可能都会知道,配置中的 log4j.logger.tk.mybatis.simple.mapper 对应的是 tk.mybatis.simple.mapper 包,但是在这个例子中, Java 目录下并没有这个包名,只在资源目录下有
mapper 目录。
在 MyBatis 的日志实现中,所谓的包名实际上是 XML 配置中的 namespace 属性值的一部分。后面章节中介绍结合接口使用的相关内容时,由于 namespace 属性值必须和接口全限定类名相同,因此
才会真正对应到 Java 中的包。当使用纯注解方式时,使用的就是纯粹的包名。
MyBatis 日志的最低级别是 TRACE ,在这个日志级别下, MyBatis 会输出执行 SQL 过程中的详细信息,这个级别特别适合在开发时使用。

11、编写测试代码

首先在 src/test/java  中创建 tk.mybatis.simple.mapper  包,然后创建 CountryMapperTest 测试类

技术分享图片
package tk.mybatis.simple.mapper;

import java.io.IOException;
import java.io.Reader;
import java.util.List;

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 org.junit.BeforeClass;
import org.junit.Test;

import tk.mybatis.simple.model.Country;

public class CountryMapperTest {
    
    private static SqlSessionFactory sqlSessionFactory;
    
    @BeforeClass
    public static void init(){
        try {
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
            reader.close();
        } catch (IOException ignore) {
            ignore.printStackTrace();
        }
    }
    
    @Test
    public void testSelectAll(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        try {
            List<Country> countryList = sqlSession.selectList("selectAll");
            printCountryList(countryList);
        } finally {
            sqlSession.close();
        }
    }
    
    private void printCountryList(List<Country> countryList){
        for(Country country : countryList){
            System.out.printf("%-4d%4s%4s\n",country.getId(), country.getCountryname(), country.getCountrycode());
        }
    }
}
View Code

对上面这段代码做一个简单的说明,具体如下。
· 通过 Resources 工具类将 mybatis-config.xml 配置文件读入 Reader 。
· 再通过 SqlSessionFactoryBuilder 建造类使用 Reader 创建 SqlSessionFactory 工厂对象。在创建 SqlSessionFactory 对象的过程中,首先解析 mybatis-config.xml 配置文件,读取配置文件中的 mappers 配置后会
读取全部的 Mapper.xml 进行具体方法的解析,在这些解析完成后, SqlSessionFactory 就包含了所有的属性配置和执行 SQL 的信息。
· 使用时通过 SqlSessionFactory 工厂对象获取一个 SqlSession 。
· 通过 SqlSession 的 selectList 方法查找到 CountryMapper.xml 中 id= " selectAll "的方法,执行 SQL 查询。
· MyBatis 底层使用 JDBC 执行 SQL ,获得查询结果集 ResultSet 后,根据 resultType 的配置将结果映射为 Country 类型的集合,返回查询结果。
· 这样就得到了最后的查询结果 countryList ,简单将结果输出到控制台。
· 最后一定不要忘记关闭 SqlSession ,否则会因为连接没有关闭导致数据库连接数过多,造成系统崩溃。

12、测试

在testSelectAll方法上,右键,[Run as]->[JUnit],即可看到输出结果

技术分享图片
DEBUG [main] - ==>  Preparing: select id,countryname,countrycode from country 
DEBUG [main] - ==> Parameters: 
TRACE [main] - <==    Columns: id, countryname, countrycode
TRACE [main] - <==        Row: 1, 中国, CN
TRACE [main] - <==        Row: 2, 美国, US
TRACE [main] - <==        Row: 3, 俄罗斯, RU
TRACE [main] - <==        Row: 4, 英国, GB
TRACE [main] - <==        Row: 5, 法国, FR
DEBUG [main] - <==      Total: 5
1     中国  CN
2     美国  US
3    俄罗斯  RU
4     英国  GB
5     法国  FR
View Code

至此,例子完成

1.1、MyBatis简介以及快速搭建实例

标签:准备   map   doc   工具类   技术分享   1.7   val   odi   pid   

原文地址:https://www.cnblogs.com/LiveYourLife/p/8469590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!