MyBatis开发框架介绍、创建项目+简单示例
1. MyBatis 简介
2001 年,Clinton Begin 发起了一个名为 iBATIS 的开源项目,最初专注于密码软件研发,后来演变为基于软件的 Java 持久层框架。
2004 年,克林顿将 iBATIS 名称和源代码捐赠给 Apache 软件基金会。
2010年,核心开发团队决定离开Apache软件基金会,并将iBATIS更名为MyBatis。
MyBatis 是一个优秀的持久层框架,支持自定义 SQL 查询、存储过程和高级映射,消除了几乎所有 JDBC 代码以及手动参数设置和结果集检索。可以使用 XML 或注释来配置和映射 MyBat。 MyBatis 通过将参数与配置的 SQL 进行匹配,形成最终执行的 SQL 语句,最后将 SQL 执行的结果映射为 Java 对象并返回。
与其他 ORM(对象关系映射)框架不同,MyBatis 并不将 Java 对象与数据库表关联起来,而是将 Java 方法与 SQL 语句关联起来。
注意。只需理解上面的内容即可,因为我的风格是我不太喜欢纯粹理论和基于文本的东西。看过我之前博客的读者可能都知道这一点。我更喜欢实用的代码,比如如何使用它。一种用某段代码解决问题的新技术...
2。创建maven项目
我一直认为理解技术最好的方式就是通过一个具体的例子,比如Hello World,哈哈。
所以,首先我们需要创建一个新的Maven项目。使用IDEA新建Maven项目如下:
新建的Maven项目结构如下:
默认生成的pom.xml文件内容如下图:
<?xml version="1.0" encoding="UTF-8"?>
<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>com.zwwhnly</groupId>
<artifactId>mybatis-action</artifactId>
<version>1.0-SNAPSHOT</version>
</project>
首先我们设置源代码的编码方式为UTF-8:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
接下来我们设置编译后的源代码的JDK版本。我们现在将使用 1.6。大家可以根据自己的实际需要进行更改,比如改成1.8:
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
然后添加重要的MyBatis依赖坐标和mysql驱动依赖坐标:
<dependencies>
<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>
</dependencies>
最后添加用到的Log4j和JUnit依赖坐标。 pom.xml文件最终内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>com.zwwhnly</groupId>
<artifactId>mybatis-action</artifactId>
<version>1.0-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>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</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>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
如果IDEA中没有特殊配置,修改pom文件后需要手动导入,否则会是下图:
如何手动导入?只需点击IDEA右下角的Import Changes即可。
至此,Maven项目就创建完成了。 ?在src/main/resources目录下创建配置文件mybatis-config.xml。为了更快的创建 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>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<package name="com.zwwhnly.mybatisaction.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_action_db"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/zwwhnly/mybatisaction/mapper/CountryMapper.xml"/>
</mappers>
</configuration>
设置简单说明:属性的配置节点上指定使用LOG4J输出日志。包名称在
3.3 创建实体类和Mapper.xml文件
在src/main/java下新建一个包:com.zwwhnly.mybatisaction,然后在这个包下创建一个包:model。
在model包下创建数据库表的country表对应的实体类Country:
package com.zwwhnly.mybatisaction.model;
public class Country {
private Integer id;
private String countryname;
private String countrycode;
// 按Alt+Insert快捷键生成get和set方法
}
在src/main/resources下创建一个目录com/zwwhnly/simple/mapper,然后在该目录下创建CountryMapper.xml文件。以后为了更快的创建Mapper.xml文件,可以参考上面添加mybatis-config.xml模板的方法,这里不再赘述。
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="com.zwwhnly.mybatisaction.mapper.CountryMapper">
<select id="selectAll" resultType="Country">
SELECT id,countryname,countrycode from country
</select>
</mapper>
简单配置说明:
- mapper:XML根元素,属性namespace指定当前XML命名空间。
- 选择:A 选择我们定义的查询。
- id属性:指定当前选择请求的唯一ID。
- resultType:指定当前请求的返回值类型。它指的是State实体类。这里主要使用前面配置中提到的包名。如果不指定包名,则应写为resultType="com..zwwhnly.mybatisaction.model.Country"。
- 从国家中选择id、国家名称、国家代码:用SQL语句查询。
3.4 配置Log4j,查看MyBatis数据库运行进程
在src/main/resources中新建配置文件log4j.properties,输入以下内容:
log4j.rootLogger=ERROR, stdout
log4j.logger.com.zwwhnly.mybatisaction.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
3.5 输入测试代码 src /test /java 创建包:com.zwwhnly.mybatisaction.mapper,然后创建测试类CountryMapperTest,代码如下: package com.zwwhnly.mybatisaction.mapper;
import com.zwwhnly.mybatisaction.mapper.model.Country;
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 java.io.IOException;
import java.io.Reader;
import java.util.List;
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 e) {
e.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());
}
}
}
package com.zwwhnly.mybatisaction.mapper;
import com.zwwhnly.mybatisaction.mapper.model.Country;
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 java.io.IOException;
import java.io.Reader;
import java.util.List;
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 e) {
e.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());
}
}
}
运行测试代码,输出日志如下:
DEBUG [main] - ==> 准备工作:从国家
DEBUG [main] 中选择 id,countryname ,countrycode - ==> 参数:
TRACE [main] -
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。