学习MyBatis之简单入门HelloWorld

转:https://blog.csdn.net/gaomb_1990/article/details/78299784

一、准备

Eclipse:Luna Service Release 1 (4.4.1)
MyBatis:org.mybatis.mybatis-3.2.8
JDK:1.7.0_79

二、步骤

♦搭建一个Maven工程MyBatisDemo

♦POM文件导入相关依赖

[html] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';"><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  3.     <modelVersion>4.0.0</modelVersion>  
  4.     <groupId>com.queen.mybatis</groupId>  
  5.     <artifactId>MyBatisDemo</artifactId>  
  6.     <version>0.0.1-SNAPSHOT</version>  
  7.     <packaging>war</packaging>  
  8.     <dependencies>  
  9.         <!-- 单元测试 -->  
  10.         <dependency>  
  11.             <groupId>junit</groupId>  
  12.             <artifactId>junit</artifactId>  
  13.             <version>4.10</version>  
  14.             <scope>test</scope>  
  15.         </dependency>  
  16.         <dependency>  
  17.             <groupId>org.mybatis</groupId>  
  18.             <artifactId>mybatis</artifactId>  
  19.             <version>3.2.8</version>  
  20.         </dependency>  
  21.         <!-- MySql -->  
  22.         <dependency>  
  23.             <groupId>mysql</groupId>  
  24.             <artifactId>mysql-connector-java</artifactId>  
  25.             <version>5.1.32</version>  
  26.         </dependency>  
  27.         <dependency>  
  28.             <groupId>org.slf4j</groupId>  
  29.             <artifactId>slf4j-log4j12</artifactId>  
  30.             <version>1.6.4</version>  
  31.         </dependency>  
  32.     </dependencies>  
  33. </project></span>  

♦配置MyBatis的核心文件mybatis-config.xml

[html] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';"><?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration  
  3.  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  4.  "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.     <environments default="development">  
  7.         <environment id="development">  
  8.             <transactionManager type="JDBC" />  
  9.             <dataSource type="POOLED">  
  10.                 <property name="driver" value="com.mysql.jdbc.Driver" />  
  11.                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />  
  12.                 <property name="username" value="root" />  
  13.                 <property name="password" value="root" />  
  14.             </dataSource>  
  15.         </environment>  
  16.     </environments>  
  17.     <mappers>  
  18.         <mapper resource="UserMapper.xml" />  
  19.     </mappers>  
  20. </configuration></span>  
注意:该文件中主要是连接数据库的信息,驱动,url,用户名,密码以及映射文件,将我们写好的sql映射文件(UserMapper.xml)一定要注册到全局配置文件(mybatis-config.xml)中 。

♦配置log4j.properties

[plain] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">log4j.rootLogger=DEBUG,A1  
  2. log4j.logger.com.queen = DEBUG  
  3. log4j.logger.org.mybatis = DEBUG  
  4.   
  5. log4j.appender.A1=org.apache.log4j.ConsoleAppender  
  6. log4j.appender.A1.layout=org.apache.log4j.PatternLayout  
  7. log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n</span>  
主要记录MyBatis运行过程中产生的一些日志信息。

♦编写接口类UserMapper

[html] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">/**  
  2.  * @since 2017-07-15  
  3.  * @author queen   
  4.  * 定义一个UserMapper接口  
  5.  *  
  6.  */  
  7. public interface UserMapper {  
  8.     /**  
  9.      * 根据ID查找用户  
  10.      * @param id  
  11.      * @return  
  12.      */  
  13.     public User findUserById(int id);  
  14. }</span>  

♦编写接口映射文件UserMapper.xml

[html] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';"><?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="com.queen.mybatis.mapper.UserMapper">  
  6.     <select id="findUserById" resultType="com.queen.mybatis.bean.User">  
  7.         select id, loginId, userName, role, note from t_user where id = #{id}  
  8.     </select>  
  9. </mapper></span>  

♦编写JavaBean类User

[java] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">/** 
  2.  * @since 2017-07-15 
  3.  * @author queen  
  4.  * 定义一个Java类 
  5.  * 
  6.  */  
  7. public class User {  
  8.     // ID,唯一性  
  9.     private String id;  
  10.     // 登录ID  
  11.     private String loginId;  
  12.     // 用户名  
  13.     private String userName;  
  14.     // 角色  
  15.     private String role;  
  16.     // 备注  
  17.     private String note;  
  18.   
  19.     public String getId() {  
  20.         return id;  
  21.     }  
  22.   
  23.     public void setId(String id) {  
  24.         this.id = id;  
  25.     }  
  26.   
  27.     public String getLoginId() {  
  28.         return loginId;  
  29.     }  
  30.   
  31.     public void setLoginId(String loginId) {  
  32.         this.loginId = loginId;  
  33.     }  
  34.   
  35.     public String getUserName() {  
  36.         return userName;  
  37.     }  
  38.   
  39.     public void setUserName(String userName) {  
  40.         this.userName = userName;  
  41.     }  
  42.   
  43.     public String getRole() {  
  44.         return role;  
  45.     }  
  46.   
  47.     public void setRole(String role) {  
  48.         this.role = role;  
  49.     }  
  50.   
  51.     public String getNote() {  
  52.         return note;  
  53.     }  
  54.   
  55.     public void setNote(String note) {  
  56.         this.note = note;  
  57.     }  
  58.   
  59.     @Override  
  60.     public String toString() {  
  61.         return "User [id=" + id + ", loginId=" + loginId + ", userName="  
  62.                 + userName + ", role=" + role + ", note=" + note + "]";  
  63.     }  
  64.   
  65. }</span>  

♦最后编写测试类

[java] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">/** 
  2.  * @since 2017-07-15 
  3.  * @author queen  
  4.  * 编写测试Java类 
  5.  * 
  6.  */  
  7. public class MyBatisTest {  
  8.     public SqlSessionFactory getSqlSessionFactory() throws IOException {  
  9.         String resource = "mybatis-config.xml";  
  10.         InputStream inputStream = Resources.getResourceAsStream(resource);  
  11.         return new SqlSessionFactoryBuilder().build(inputStream);  
  12.     }  
  13.   
  14.     @Test  
  15.     public void test() throws IOException {  
  16.         SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();  
  17.         SqlSession openSession = sqlSessionFactory.openSession();  
  18.         try {  
  19.             User user = openSession.selectOne(  
  20.                     "com.queen.mybatis.mapper.UserMapper.findUserById", "1");  
  21.             System.out.println(user);  
  22.         } finally {  
  23.             openSession.close();  
  24.         }  
  25.   
  26.     }  
  27.   
  28. }</span>  

♦测试运行一下,查找ID是1的数据,日志详细过程完美的打印在控制台

[sql] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">2017-07-15 16:52:43,862 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Opening JDBC Connection  
  2. 2017-07-15 16:52:44,305 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Created connection 706757729.  
  3. 2017-07-15 16:52:44,305 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a204461]  
  4. 2017-07-15 16:52:44,309 [main] [com.queen.mybatis.mapper.UserMapper.findUserById]-[DEBUG] ==>  Preparing: select id, loginId, userName, role, note from t_user where id = ?   
  5. 2017-07-15 16:52:44,372 [main] [com.queen.mybatis.mapper.UserMapper.findUserById]-[DEBUG] ==> Parameters: 1(String)  
  6. 2017-07-15 16:52:44,419 [main] [com.queen.mybatis.mapper.UserMapper.findUserById]-[DEBUG] <==      Total: 1  
  7. User [id=1, loginId=Sabot, userName=萨博, role=革命军, note=革命军的二号人物,同艾斯一样,为蒙奇·D·路飞的哥哥(义兄)。]  
  8. 2017-07-15 16:52:44,420 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a204461]  
  9. 2017-07-15 16:52:44,421 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a204461]  
  10. 2017-07-15 16:52:44,421 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Returned connection 706757729 to pool.</span>  
我们会很明显的发现这是一个完整的JDBC执行过程,打开连接,创建连接,将事务设置成false,准备SQL,SQL赋参数,执行SQL,事务提交,关闭连接,返回连接。其实MyBatis就是将这些动作封装,对于开发人员只需要关注SQL。

三、总结

MyBatis整个调用过程:
根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象有数据源一些运行环境信息
sql映射文件;配置了每一个sql,以及sql的封装规则等。
将sql映射文件注册在全局配置文件中
写代码:
①根据全局配置文件,SqlSessionFactoryBuilder得到SqlSessionFactory
[java] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">public SqlSessionFactory getSqlSessionFactory() throws IOException {  
  2.     String resource = "mybatis-config.xml";  
  3.     InputStream inputStream = Resources.getResourceAsStream(resource);  
  4.     return new SqlSessionFactoryBuilder().build(inputStream);  
  5. }</span>  
②使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
[java] view plain copy
 
  1. <span style="font-family:'KaiTi_GB2312';">SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();</span>  
③一个sqlSession就是代表和数据库的一次会话,用完关闭
④使用sql的唯一标志来告诉MyBatis执行哪个sql,sql都是保存在sql映射文件中的。


至此,我们关于MyBatis教程之简单的入门介绍完毕。只做了简单的查询动作。
原文地址:https://www.cnblogs.com/zhanglijun/p/9140781.html