zoukankan      html  css  js  c++  java
  • 学习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教程之简单的入门介绍完毕。只做了简单的查询动作。
  • 相关阅读:
    e.g.-basic-Si
    Telephone interview with Youyou Tu
    Mo2C-tag
    Usage of “symmetrical” and “symmetric”
    Xcrysden-2
    The partial charge density (1)
    利用 AWK 的数值计算功能提升工作效率(转载)
    扩展程序
    选择排序
    装饰递归函数
  • 原文地址:https://www.cnblogs.com/zhanglijun/p/9140781.html
Copyright © 2011-2022 走看看