zoukankan      html  css  js  c++  java
  • MyBatis3入门

    这里对mybatis的入门介绍以官方最新MyBatis3.4.1为准,具体文档及jar包请访问:https://github.com/mybatis/mybatis-3/releases

    以前经常都在使用mybatis,但通常都是和Spring结合起来用,在配置的时候往往都是在网上或者东配置西配置然后就能用了,但是一直没有仔细的对mybatis有一个系统而全面的配置。哪怕就是单独写一个mybatis的demo都写不出来,前段时间刚好发现mybatis的一篇官方用户手册,所以想从头对mybatis有一个系统而全面的认识。同样对官方用户手册的全篇翻译也是近期的一个小目标。

    为了方便对mybatis完全不了解,不知道从何入手的新手做一个简单的讲解。想要写一个mybatis的demo不用去创建一个Java EE的Web工程,这是我以前很大很大的一个误区,以为对此类框架的使用我必须要去创建一个Web工程,创建好了一个Web工程,我又要得去写html,写一个servlet交互等等等等,一想到这儿,我就不想写了。其实大可不必,只需要创建一个普通Java工程即可写出一个mybatis的demo。

    我们首先来看看工程的包结构。mapper包是什么呢,我不知道怎么形容,映射,或者可以是dao层——对数据库的操作。pojo即是java实体类。util提供一些工具类。Main即客户端测试代码。mybatis-config.xml为mybatis的配置文件。

    我们还需要为工程引入两个jar包。

    我们首先要理解清楚mybatis的核心是什么,官方用户手册中说,每个MyBatis应用都以一个SqlSessionFactory为核心。一个SqlSessionFactory实例能够通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder能够从XML配置文件或者从配置类构建一个SqlSessionFactory实例。(Every MyBatis application centers around an instance of SqlSessionFactory. A SqlSessionFactory instance can be acquired by using the SqlSessionFactoryBuilder. SqlSessionFactoryBuilder can build a SqlSessionFactory instance from an XML configuration file, or from a custom prepared instance of the Configuration class.)

    我们对SqlSessionFactory的获取采用从XML配置文件的方式获取。首先来实现SessionFactory类。

     1 package day_8_mybatis.util;
     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 /**
    12  * 获取SqlSession实例
    13  * @author turbo
    14  *
    15  * 2016年9月11日
    16  */
    17 public class SessionFactory {
    18     public static SqlSession getSqlSession(String resource) throws IOException{
    19         InputStream inputStream = Resources.getResourceAsStream(resource);
    20         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    21         SqlSession sqlSession = sqlSessionFactory.openSession();
    22         
    23         return sqlSession;
    24     }
    25 }

    接着开始写mybatis-config.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 <configuration>
     6     <properties>
     7         <property name="driver" value="com.mysql.jdbc.Driver"/>
     8         <property name="url" value="jdbc:mysql://localhost:3306/test"/>    
     9         <property name="username" value="root"/>
    10         <property name="password" value="0000"/>
    11     </properties>
    12     <environments default="development">
    13         <environment id="development">
    14             <transactionManager type="JDBC" />
    15             <dataSource type="POOLED">
    16                 <property name="driver" value="${driver}"/>
    17                 <property name="url" value="${url}"/>
    18                 <property name="username" value="${username}"/>
    19                 <property name="password" value="${password}"/>
    20             </dataSource>            
    21         </environment>
    22     </environments> 
    23     
    24     <mappers>
    25         <mapper resource="day_8_mybatis/mapper/UserMapper.xml"/>
    26     </mappers>    
    27 </configuration>
    28  

    配置文件中的properties也可以采用外部引用的方式,及将6-11行修改为:

    1 driver=com.mysql.jdbc.Driver
    2 url=jdbc:mysql://localhost:3306/mybatis
    3 name=root
    4 password=XDP

    注:此篇MyBatis3入门不讲详细原理及各参数是什么意思,主要是对mybatis的一个demo入门程序。

    下面新建一个User pojo类,其中的变量对应数据库中user表的字段(当然这也不是必须的)。

     1 package day_8_mybatis.pojo;
     2 
     3 /**
     4  * User实体类
     5  * @author turbo
     6  *
     7  * 2016年9月11日
     8  */
     9 public class User {
    10     private int id;
    11     private String name;
    12     private String age;
    13     private String sex;
    14     public int getId() {
    15         return id;
    16     }
    17     public void setId(int id) {
    18         this.id = id;
    19     }
    20     public String getName() {
    21         return name;
    22     }
    23     public void setName(String name) {
    24         this.name = name;
    25     }
    26     public String getAge() {
    27         return age;
    28     }
    29     public void setAge(String age) {
    30         this.age = age;
    31     }
    32     public String getSex() {
    33         return sex;
    34     }
    35     public void setSex(String sex) {
    36         this.sex = sex;
    37     }
    38 }

    现在开始构建mapper包里的UserMapper.java和UserMapper.xml

    UserMapper.java就是一个对数据库的访问接口,不用去实现,因为mybatis已经为我们完成了这件事。

     1 package day_8_mybatis.mapper;
     2 
     3 import day_8_mybatis.pojo.User;
     4 
     5 /**
     6  * mapper数据库访问接口
     7  * @author turbo
     8  *
     9  * 2016年9月11日
    10  */
    11 public interface UserMapper {
    12     User getUserById(int id);
    13 }

    UserMapper.xml即是对数据库的具体的sql操作。

    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="day_8_mybatis.mapper.UserMapper">
    6     <select id="getUserById" resultType="day_8_mybatis.pojo.User">
    7         select * from user where id = #{id}
    8     </select>
    9 </mapper> 

    需要注意的地方是,第5行的namespace必须是此mapper.xml文件对应的mapper接口。第6行的id必须是mapper接口的方法名称,resultType在这里必须是User类的绝对路径(因为此处查询的是一个User类),当然你也可以以别名的方式。第7行#{id}的“id”必须是mapper接口中getUserById方法的参数名称。

    下面我们就可以写客户端类进行测试了。

     1 package day_8_mybatis;
     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 import day_8_mybatis.mapper.UserMapper;
    12 import day_8_mybatis.pojo.User;
    13 import day_8_mybatis.util.SessionFactory;
    14 
    15 /**
    16  * 客户端
    17  * @author turbo
    18  *
    19  * 2016年9月11日
    20  */
    21 public class Main {
    22 
    23     /**
    24      * @param args
    25      * @throws IOException 
    26      */
    27     public static void main(String[] args) throws Exception {
    28         String resource = "day_8_mybatis/mybatis-config.xml";        //获取mybatis配置文件路径
    29         SqlSession sqlSession = SessionFactory.getSqlSession(resource);    //通过SessionFactory工具类(此工具类为自己构造即util包中的SessionFactory)构造SqlSession
    30         
    31         UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    32         User user = userMapper.getUserById(1);
    33         
    34         System.out.println(user.getAge());
    35     }
    36 
    37 }

    至于数据库就是简单的几个字段,根据如图创建即可。

    这样我们就完成了一个mybatis的一个入门demo程序。

  • 相关阅读:
    高级映射之事务
    配置tomcat-users.xml文件
    动态SQL之标签
    性能测试
    Service
    添加 aar 或 jar 包依赖 的方式
    安卓设备 以太网代理 问题排查
    剑指offer:面试题15、链表中倒数第 K 个结点
    剑指offer:面试题14、调整数组顺序使奇数位于偶数前面
    剑指offer:面试题13、在O(1)时间删除链表结点
  • 原文地址:https://www.cnblogs.com/yulinfeng/p/5862303.html
Copyright © 2011-2022 走看看