zoukankan      html  css  js  c++  java
  • mybatis的入门(二)

      上篇文章首先介绍了JDBC操作数据库的相关知识,并总结了JDBC操作数据存在的一些问题,那么这篇文章我们来介绍下mybatis的相关内容

    一、mybatis的架构图

    下面对上面的架构图详细说明下:

    1.mybatis的配置

      sqlMapConfig.xml,此文件作为mybatis的核心配置文件,是mybatis的全局配置文件,配置了mybatis的运行环境等信息。

      mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句,此文件需要在SQLMapConfig.xml文件中加载。一般来说,有多少个数据库表就存在多少个mapper.xml文件。

    2.SqlSessionFactory

      通过mybatis的环境等配置信息来构建SqlSessionFactory,即会话工厂。

    3.SQLSession

      由会话工厂(SqlSessionFactory)来创建SqlSession,操作数据库需要通过SqlSession来进行。

    4.executor

      mybatis的底层自定义了executor执行器接口操作数据库,executor执行器接口由两个实现,一个是基本执行器,一个是缓存执行器。

    5.mappedStatement

      mappedStatement也是mybatis底层的封装对象,它包装了mybatis的配置信息及sql映射信息等。mapper.xml文件中的一个sql对应一个mappedStatement对象,sql的ID就是Mapped statement的ID。

    6.输入映射

      Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

    7.输出映射

      Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

    二、mybatis的入门程序开发

    2.1 业务需求

      使用mybatis实现以下功能:

        1.根据用户id查询一个用户信息

        2.根据用户名称模糊查询用户列表

        3.添加用户

        4.更新用户

        5.删除用户

    2.2 导包

      需要提前下载好mybatis的jar包,以及mybatis的依赖包,并将所有的jar包添加到 build path中:

    其中,mybatis-3.2.7.jar 是mybatis的核心包,mysql-connector-java-5.1.7-bin.jar 是mysql的数据库驱动包,其他的均为mybatis的依赖包。

    2.3 加载配置文件

      在src目录下创建SqlMapConfig.xml 文件、log4j.properties 文件:

    2.3.1 log4j.properties 文件配置信息:

    1 # Global logging configuration
    2 log4j.rootLogger=DEBUG, stdout
    3 # Console output...
    4 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    5 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    6 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    log4j.properties是日志配置文件,mybatis默认使用log4j作为输入日志信息。

    2.3.2 SqlMapConfig.xml 文件配置信息

     1 <?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   
     6 <configuration>
     7     <!--和spring整合之后,environments将被废除  -->
     8     <environments default="development">
     9         <environment id="development">
    10             <!-- 使用JDBC事物管理 -->
    11             <transactionManager type="JDBC" />
    12             <!-- 数据库连接池 -->
    13             <dataSource type="POOLED">
    14                 <property name="driver" value="com.mysql.jdbc.Driver" />
    15                 <property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy" />
    16                 <property name="username" value="root" />
    17                 <property name="password" value="root" />
    18             </dataSource>
    19         </environment>
    20       </environments>
    21 </configuration>

    SqlMapConfig.xml 文件作为mybatis的核心配置文件,配置文件为数据源和事物管理等。

    2.4 根据用户id查询一个用户信息

    2.4.1 创建pojo

      pojo类作为mybatis进行sql映射使用,po类通常与数据库表对应,pojo类如下所示:

     1 package com.lwjnicole.pojo;
     2 
     3 import java.io.Serializable;
     4 import java.util.Date;
     5 
     6 public class User implements Serializable{
     7 
     8     private static final long serialVersionUID = 1L;
     9     
    10     private int id;
    11     private String username;//用户名
    12     private String sex;//性别
    13     private Date birthday;//用户生日
    14     private String address;//地址
    15     public int getId() {
    16         return id;
    17     }
    18     public void setId(int id) {
    19         this.id = id;
    20     }
    21     public String getUsername() {
    22         return username;
    23     }
    24     public void setUsername(String username) {
    25         this.username = username;
    26     }
    27     public String getSex() {
    28         return sex;
    29     }
    30     public void setSex(String sex) {
    31         this.sex = sex;
    32     }
    33     public Date getBirthday() {
    34         return birthday;
    35     }
    36     public void setBirthday(Date birthday) {
    37         this.birthday = birthday;
    38     }
    39     public String getAddress() {
    40         return address;
    41     }
    42     public void setAddress(String address) {
    43         this.address = address;
    44     }
    45     @Override
    46     public String toString() {
    47         return "User [id=" + id + ", username=" + username + ", sex=" + sex + ", birthday=" + birthday + ", address="
    48                 + address + "]";
    49     }
    50     
    51 }

    2.4.2 创建userMapper.xml映射文件

      在src下创建sqlmap目录,然后在sqlmap目录下创建userMapper.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  <!-- namespace:命名空间,用于隔离sql,还有一个很重要的作用,后面会讲 -->
     6 <mapper namespace="user">
     7     <!-- id:statement的id 或者叫做sql的id-->
     8     <!-- parameterType:声明输入参数的类型 -->
     9     <!-- resultType:声明输出结果的类型,应该填写pojo的全路径 -->
    10     <!-- #{}:输入参数的占位符,相当于jdbc的? -->
    11     <select id="findUserById" parameterType="Integer" resultType="com.lwjnicole.pojo.User">
    12         select * from user where id = #{v}
    13     </select>
    14 </mapper>

    2.4.3 加载映射文件

      mybatis框架需要加载Mapper.xml映射文件,将userMapper.xml映射文件添加到SqlMapConfig.xml 下:

     1 <?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   
     6 <configuration>
     7     <!--和spring整合之后,environments将被废除  -->
     8     <environments default="development">
     9         <environment id="development">
    10             <!-- 使用JDBC事物管理 -->
    11             <transactionManager type="JDBC" />
    12             <!-- 数据库连接池 -->
    13             <dataSource type="POOLED">
    14                 <property name="driver" value="com.mysql.jdbc.Driver" />
    15                 <property name="url" value="jdbc:mysql://localhost:3306/mybatisstudy" />
    16                 <property name="username" value="root" />
    17                 <property name="password" value="root" />
    18             </dataSource>
    19         </environment>
    20       </environments>
    21       <!-- 加载映射文件  -->
    22       <mappers>
    23           <mapper resource="sqlmap/UserMapper.xml"/>
    24       </mappers>
    25 </configuration>

    2.4.4 编写Junit测试代码

      这里我们来实现根据id查询用户信息的功能,Junit测试代码的实现步骤如下:

        1.创建SqlSessionFactoryBuilder对象

        2.加载 SqlMapConfig.xml 配置文件

        3.创建 SqlSessionFactory 对象

        4.创建 SqlSession 对象

        5.使用SqlSession对象执行查询sql,获得结果 User 对象

        6.打印结果

        7.释放资源

    Junit测试代码如下:

     1 package mybatis_study;
     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 import org.junit.After;
    11 import org.junit.Before;
    12 
    13 import com.lwjnicole.pojo.User;
    14 
    15 public class Test {
    16     private SqlSessionFactory sqlSessionFactory = null;
    17     private SqlSession session = null;
    18     
    19     @Before
    20     public  void before(){
    21         //创建SqlSessionFactoryBuilder对象
    22         SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    23         InputStream inputStream = null;
    24         try {
    25             //加载SqlMapConfig.xml配置文件
    26             inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    27         } catch (IOException e) {
    28             e.printStackTrace();
    29         }
    30         //创建SqlSessionFactory对象
    31         this.sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    32     }
    33     
    34     @org.junit.Test
    35     public void findUserById(){
    36         //创建SqlSession对象
    37         session     = sqlSessionFactory.openSession();
    38         //使用SqlSession对象执行查询sql,获得结果
    39         User user  = session.selectOne("findUserById", 27);
    40         //打印结果
    41         System.out.println(user);
    42     }
    43     
    44     @After
    45     public void after(){
    46         //释放资源
    47         session.close();
    48     }
    49 }

    执行结果如下:

     至此,第一个业务功能就已经实现啦,剩下的功能在接下来的文章中介绍,我的项目结构为:

  • 相关阅读:
    宏定义抽取单例
    谓词基本使用
    Xcode静态分析工具--Analyze
    [转载]CocoaPods管理第三方开源框架
    @import--iOS7新关键字
    iOS手势识别
    UINavigationController
    JSON解析--原生&AFN
    UITabBarController
    iOS APP EuclidStudy Service Support
  • 原文地址:https://www.cnblogs.com/lwjnicole/p/8352767.html
Copyright © 2011-2022 走看看