0.学习准备:
学习资料:
书本:《MyBatis从入门到精通》
视频:某培训班视频
资料:MyBatis官方文档本章重点
- 了解Mybtis
- 使用Maven创建一个简单的MyBatis项目
- 配置Mybatis
- 核心配置文件的解释
1.MyBatis简介
- 发展:
2001年由Clinton Begin发起,原名iBatis,2004年并入Apache,2010年改名为Mybatis。发展成了一个Java的持久层框架。 - 特点:
支持自定义SQL查询,存储过程和高级映射的存储层框架。
消除了所有JDBC代码和参数的手动设置及结果集的检索。
与其他ORM(对象关联映射)的框架不同,Mybatis没有将Java对象与数据库表关联,而是将SQL语句与Java方法关联。
ORM:Object Relation Mapping - 缓存:
MyBatis支持声明式数据缓存。
MyBatis默认提供了基于Java HashMap的缓存实现,以及用于OSCache,Ehcache,Hazelcast和Memchached连接的默认连接器。 - MyBatis官方GitHub地址:
https://github.com/MyBatis
官方文档:
http://www.mybatis.org/mybatis-3/zh/index.html
2.使用Maven创建一个项目:
1)创建项目:
- 在Eclipse中点击[File]–>[New]–>[Other]–>[Maven Project]:
勾选第一项,点击next。 - 输入组名,模块名,版本号:
点击finish创建完毕。
2)pom.xml基本配置:
- 目前的pom.xml:
<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>Mabatis</groupId> <artifactId>simple</artifactId> <version>0.0.1-SNAPSHOT</version> </project>
- 添加UTF-8编码:
<properties> <project.build.sourceEncoding> UTF-8</project.build.sourceEncoding> </properties>
- 设置编译源代码的JDK版本(1.7):
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build>
3)其他配置:
- MyBatis依赖:
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> </dependencies>
- JUnit依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
- Log4j依赖:
<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>
- Mysql驱动的依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
完整的pom.xml配置:
<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>Mabatis</groupId> <artifactId>simple</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <project.build.sourceEncoding> UTF-8 </project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </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> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build> </project>
3.准备数据库及配置MyBatis
1)准备数据库:
- 创建数据库mybatis:
CREATE DATABASE mybatis DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
- 创建表:
CREATE TABLE country( id TINYINT UNSIGNED AUTO_INCREMENT, countryname VARCHAR(255) NULL, countrycode VARCHAR(255) NULL, PRIMARY KEY(id) )CHARSET utf8;
- 插入数据:
INSERT INTO country VALUES(NULL,'中国','CN'),(NULL,'美国','US'),(NULL,'俄罗斯','RU'), (NULL,'英国','GB'),(NULL,'法国','FR');
2)配置MyBatis*(XML方式):
- 配置MyBatis的方式有很多种,其中最基础最常见的就是XML方式,还有Spring Bean方式(整合时)以及通过Java编码方式进行配置。
在srv/main/resources下面创建mybatis-config.xml(约定的名字),创建好后右键–>【Open With】–>【Xml Editor】,输入如下内容:
<?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="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://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments> <!-- 映射 --> <mappers> <mapper resource="Mybatis/simple/mapper/CountryMapper.xml"/> </mappers> </configuration>
3)以上配置的简单介绍:
<!DOCTPE>
声明这是一个MyBatis核心配置文件:
可在MyBatis官方文档–>【入门】中找到。<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
定义了一个MyBatis核心配置文件,并且会出现标签补齐。
若断网无法提示可以手动下载一个mybatis-3-config.dtd
进行如下配置:(maven仓库中就有)
点击【Windows】–>【Preferences】–>【XML-XML catalog】–>【add】–>【Catalog Entry】并进行如下配置:
然后点【OK】就可以了<settings>
配置LOG4J输出日志:
指定使用LOG4J来输出日志。<settings> <setting name="logImpl" value="LOG4J"/> </settings>
<typeAliases>
定义包的别名:
MyBatis中会经常使用类的全限定名称,这样定义了包的别名,使用Country就等于是使用”Mabatis.simple.model.Country”。暂未创建。<typeAliases> <package name="Mybatis.simple.model"/> </typeAliases>
- 配置环境:
可以配置多个环境,默认使用id为development的环境。<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://localhost:3306/mybatis"/> <property name="username" value="root"/> <property name="password" value=""/> </dataSource> </environment> </environments>
事务<transactionManager>
的type一般都指定为JDBC。
数据源<dataSource>
则是JDBC中连接数据库的操作。 <mapper>
配置映射:
CountryMapper.xml是MyBatis的SQL语句及映射文件,暂时还未创建该映射。<mappers> <mapper resource="Mybatis/simple/mapper/CountryMapper.xml"/> </mappers>
4.创建实体类及映射文件:
1)创建实体类:
- 实际应用中一个表一般都会对应一个实体,用于增删改及简单的查操作。
在src/main/java创建一个Mybatis.simple.model包,并创建实体类Country如下:
package Mybatis.simple.model; public class Country { private int id; private String countryname; private String countrycode; //get,set及toString方法 }
2)创建映射文件(Mapper.xml):
- 命名方式:
Mybatis一般习惯性的用Mapper作为映射文件和接口类名的后缀,最好这样写。
所以一般称XML为Mapper.xml文件,称接口为Mapper接口。 在src/main/resources下创建MyBatis.simple.mapper目录,再在该目录下创建country映射文件(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="Mybatis.simple.mapper.CountryMapper"> <!-- Country使用别名 --> <select id="selectAll" resultType="Country"> select * from country </select> </mapper>
3)上述映射文件的简单介绍:
- <!DOCTYPE>定义文件类型:映射文件
这段内容可在MyBatis官方文档–>【入门】中找到。<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
离线提示的方法同核心配置文件的<!DOCTYPE>。 <mapper>
是整个XML文件的根元素。
其中的namespace属性指的是这个映射文件的工作空间(即ID),整个工程内不能重复。<select>
就是定义了一个select查询语句,id是该查询语句的id,在该映射内不能重复。然后就可以通过namespace.id准确定位该条SQL语句了。
resultType属性定义了当前查询的返回值,这里就是实体类,使用了核心配置文件中的别名,不然就要一大段。- resultType也能返回其他java基本类型,MyBatis已经定义好了一套别名,就不用写类的全路径了(如:java.lang.Math):
具体内容可以在MyBatis官方文档–>【XML配置】–>【类型别名】中找到。
5.配置LOG4J日志:
1)配置log4j.properties
- Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理:
一般使用SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging
Log4j
就可以了。
有个Logback,是升级版的Log4j。 - 在src/main/resources中添加log4j.properties配置文件
只要将官方文档日志中的配置粘过来并修改MyBatis 日志配置就行。# 全局配置 log4j.rootLogger=ERROR, stdout # MyBatis 日志配置. log4j.logger.MyBatis.simple.mapper=TRACE # 控制态输出日志 log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
将log4j.logger后的路径改为映射文件包的包名。
2)书上的一些log4j简单介绍:
log4j.logger.MyBatis.simple.mapper
原本指向的是mapper包,但是可能是使用Maven的原因,创建的包会自动变为目录,所以也就指向mapper目录了。- log4j中所谓的包名实际只是XML配置中namespace的一部分而已。
- TRACE是MyBatis日志的最低级别,在这个级别下会输出SQL过程中的详细信息,非常适合在开发中使用。
6.创建测试类并测试:
1)创建测试类:
在src/test/java中创建Mybatis.simple.model包,并在该包下创建CountryMapperTest.java测试类,内容如下:
package 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 Mybatis.simple.model.Country; public class CountryMapperTest { //SqlSession工厂类 private static SqlSessionFactory sqlSessionFactory; @BeforeClass public static void init(){ try{ // 加载核心配置文件 Reader reader=Resources.getResourceAsReader("mybatis-config.xml"); //新建工厂对象,相当于JDBCconnect sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); //关闭输入流 reader.close(); }catch(IOException e){ e.printStackTrace(); } } @Test public void testSelectAll(){ //使用sqlSession实例化一个sqlSession对象,相当于使用预处理语句 SqlSession sqlSession=sqlSessionFactory.openSession(); try{ List<Country> countryList=sqlSession.selectList("Mybatis.simple.mapper.CountryMapper.selectAll"); for(Country coun:countryList){ System.out.println(coun); } }finally{ //关闭sqlSession sqlSession.close(); } } }
2)关于上述测试类的说明:
- 加载核心配置文件:
Reader reader=Resources.getResourceAsReader("mybatis-config.xml");
通过Resources工具将mybatis-config.xml
核心配置文件读入Reader。 - 新建工厂对象:
sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
通过SqlSessionFactoryBuilder
工厂建造类使用Reader
新建一个sqlSessionFactory
对象。 - 实例化一个sqlSession对象:
SqlSession sqlSession=sqlSessionFactory.openSession();
通过openSession方法创建一个sqlSession对象。 - 进行查询:
sqlSession.selectList("Mybatis.simple.mapper.CountryMapper.selectAll");
使用namespace.id(即Mybatis.simple.mapper.CountryMapper.selectAll)定位查询语句并执行。
返回值是Country的List,说明返回值是List时映射文件内的resultType要写List里面的值。 - 一定要关闭Read及sqlSession.
- 简单的描述:
获取配置文件的read对象
创建sqlSessionFactory工厂对象
获取sqlSession对象
使用sqlSession的方法进行查询
关闭sqlSession对象
3)运行测试:
- 两种运行方式:
- 项目–>右键–>【RUN AS】–>【Maven Bulider】–>输入test
- CountryMapperTest.java–>右键–>【RUN AS】–>【Junit Test】
- 测试结果:
Junit未报错且控制台输出如下信息,成功:
若测试失败,可以查看配置文件是否正确。
但是,说好的查询语句呢?怎么没有? - 修改映射文件CountryMapper.xml:
将select * from Country
改为:
再次运行,然后SQL语句就输出了。。。,很奇怪:select id,countryname,countrycode from country
最后更新: 2018年05月04日 13:43
原始链接: https://zjxkenshine.github.io/2018/03/20/MyBatis学习笔记(一):环境搭建/