做爲ORM的重要框架,MyBatis是iBatis的升級版。Mybatis徹底將SQL語句交給編程人員掌控,這點和Hibernate的設計理念不一樣(至於Hibernate的理念,待我先學習學習)。 java
下面的教程,是一個基於STS(也能夠是eclipse,須要事先安裝好maven)的一個入門級教程。下文分爲兩個部分,第一部門爲簡單版教程,第二部分是step-by-step教程。 mysql
簡單教程: spring
--完-- sql
這部分對第一部分進行細化,並配以圖片說明: 數據庫
詳細教程: apache
其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>
整個工程的目錄以下: api
<?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>
逐一解釋: session
POJO的意思是:Plain Old Java Object,簡單的說,就是一個普通的Java Bean。 mybatis
該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 }
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>
解釋以下:
代碼以下:
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 }
代碼以下:
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 }
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來生成絕大多數的代碼。