作为ORM的重要框架,MyBatis是iBatis的升级版。Mybatis完全将SQL语句交给编程人员掌控,这点和Hibernate的设计理念不同(至于Hibernate的理念,待我先学习学习)。
下面的教程,是一个基于STS(也可以是eclipse,需要事先安装好maven)的一个入门级教程。下文分为两个部分,第一部门为简单版教程,第二部分是step-by-step教程。
Part one
简单教程:
- 新建maven工程。
- 添加mybatis和mysql包,以及log4j的包。
- 新建或者使用现存的数据库,并准备好若干语句。例如使用mysql的默认数据库world。
- 新建mybatis-config.xml配置文件,作为mybaits的基础配置。
- 新建POJO,City。
- 新建mapper文件:city.xml,进行配置。
- 新建Interface,CityMapper,对应city.xml的方法。
- 新建Class: CityService,并implemente CityMapper,实现各种方法。
- 新建Class:MyBatisSqlSessionFactory,用户获取mybatis的session
- 新建测试文件,进行测试。
--完--
Part two
这部分对第一部分进行细化,并配以图片说明:
详细教程:
-
新建maven工程。
- 选择新建工程,选择maven项目
- 选择quickStart类型的maven:
- 输入Group Id和Artifact Id并完成工程:
-
添加mybatis和mysql包,以及log4j的包。
- 编辑pom.xml文件,添加以下包:
其中红框内的为必选,其余随意。
其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>jacob</groupId> <artifactId>mybatisdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>mybatisdemo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.27</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <scope>runtime</scope> </dependency> </dependencies> </project>
-
-
整个工程的目录如下:
-
- 新建或者使用现存的数据库,并准备好若干语句。例如使用mysql的默认数据库world。
这是个现成的数据库(懒得新建一个),本教程只用到其中的一张表,表结构如下: -
新建mybatis-config.xml配置文件,作为mybaits的基础配置。
-
在src/main/resources中新建文件: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="City" type="jacob.domain.City" /> </typeAliases> <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/world" /> <property name="username" value="root" /> <property name="password" value="111111" /> </dataSource> </environment> </environments> <mappers> <mapper resource="jacob/mapper/city.xml" /> </mappers> </configuration>
-
逐一解释:
-
-
新建POJO,City。
POJO的意思是:Plain Old Java Object,简单的说,就是一个普通的Java Bean。
该Bean的内容对应于city表。
文件如下:
1 package jacob.domain; 2 3 public class City { 4 int id; 5 String name; 6 String countryCode; 7 String district; 8 int population; 9 10 public int getId() { 11 return id; 12 } 13 14 public void setId(int id) { 15 this.id = id; 16 } 17 18 public String getName() { 19 return name; 20 } 21 22 public void setName(String name) { 23 this.name = name; 24 } 25 26 public String getCountryCode() { 27 return countryCode; 28 } 29 30 public void setCountryCode(String countryCode) { 31 this.countryCode = countryCode; 32 } 33 34 public String getDistrict() { 35 return district; 36 } 37 38 public void setDistrict(String district) { 39 this.district = district; 40 } 41 42 public int getPopulation() { 43 return population; 44 } 45 46 public void setPopulation(int population) { 47 this.population = population; 48 } 49 50 }
-
新建mapper文件:city.xml,进行配置。
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <mapper namespace="jacob.mapper.CityMapper"> 6 <resultMap type="City" id="CityResult"> 7 <id property="id" column="ID" /> 8 <result property="name" column="name" /> 9 <result property="countryCode" column="CountryCode" /> 10 <result property="district" column="District" /> 11 <result property="population" column="Population" /> 12 </resultMap> 13 <select id="selectCity" parameterType="int" resultMap="CityResult"> 14 select * 15 from city where id = #{id} 16 </select> 17 18 <select id="selectAll" resultType="City"> 19 select * from city; 20 </select> 21 22 </mapper>
解释如下:
-
新建Interface,CityMapper,对应city.xml的方法。
代码如下:
1 package jacob.mapper; 2 3 import java.util.List; 4 5 import jacob.domain.City; 6 7 public interface CityMapper { 8 City selectCity(int id); 9 10 List<City> selectAll(); 11 }
-
新建Class: CityService,并implemente CityMapper,实现各种方法。
代码如下:
1 package jacob.services; 2 3 import java.util.List; 4 5 import jacob.domain.City; 6 import jacob.mapper.CityMapper; 7 import jacob.mybatisdemo.MyBatisSqlSessionFactory; 8 9 import org.apache.ibatis.session.SqlSession; 10 import org.slf4j.Logger; 11 import org.slf4j.LoggerFactory; 12 13 public class CityService implements CityMapper { 14 private Logger logger = LoggerFactory.getLogger(getClass()); 15 16 public City selectCity(int id) { 17 SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); 18 19 try { 20 CityMapper cityMapper = sqlSession.getMapper(CityMapper.class); 21 return cityMapper.selectCity(id); 22 } finally { 23 sqlSession.close(); 24 } 25 } 26 27 public List<City> selectAll() { 28 SqlSession sqlSession = MyBatisSqlSessionFactory.openSession(); 29 30 try { 31 CityMapper cityMapper = sqlSession.getMapper(CityMapper.class); 32 return cityMapper.selectAll(); 33 } finally { 34 sqlSession.close(); 35 } 36 } 37 }
-
新建Class:MyBatisSqlSessionFactory,用户获取mybatis的session
1 package jacob.mybatisdemo; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 6 import org.apache.ibatis.io.Resources; 7 import org.apache.ibatis.session.SqlSession; 8 import org.apache.ibatis.session.SqlSessionFactory; 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 10 11 public class MyBatisSqlSessionFactory { 12 13 private static SqlSessionFactory sqlSessionFactory; 14 15 public static SqlSessionFactory getSqlSessionFactory() { 16 if (sqlSessionFactory == null) { 17 InputStream inputStream; 18 try { 19 inputStream = Resources 20 .getResourceAsStream("mybatis-config.xml"); 21 sqlSessionFactory = new SqlSessionFactoryBuilder() 22 .build(inputStream); 23 } catch (IOException e) { 24 e.printStackTrace(); 25 } 26 } 27 return sqlSessionFactory; 28 } 29 30 public static SqlSession openSession(){ 31 return getSqlSessionFactory().openSession(); 32 } 33 34 public static void main(String[] args) { 35 // TODO Auto-generated method stub 36 37 } 38 39 }
-
新建测试文件,进行测试。
1 package jacob.mybatisdemo; 2 3 import java.util.List; 4 5 import jacob.domain.City; 6 import jacob.services.CityService; 7 8 public class App { 9 public static void main(String[] args) { 10 CityService cityService = new CityService(); 11 City result = cityService.selectCity(2); 12 System.out.println(result.getName()); 13 14 List<City> list = cityService.selectAll(); 15 for (City c : list) { 16 System.out.println(c.getName()); 17 } 18 } 19 }
-
输出结果:
文章以贴代码为主。工程下载地址:https://www.dropbox.com/s/w3j5jhy3lc12hzt/mybatisdemo.zip,请继续关注。
后续将整合spring,使用mybatis-generator来生成绝大多数的代码。