zoukankan      html  css  js  c++  java
  • 学习myBatis

    这篇文章主要学习如何配置myBatis。

    要学习新东西要讲究方法,要从三个层面去理解它:它是什么(what),为什么要学它(why),怎么用它(how)。有了学习方法学习的效率才高。

    1、myBatis是什么(what)

      myBatis的官方用户指南上面是这样写的:MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

      说通俗一点就是myBatis可以代替原来的JDBC对数据库进行一系列操作。

    2、为什么要学myBatis(why)

      有人说我可以用JDBC实现我所有想对数据库进行的操作,为什么还要学myBatis?之所以这样说,那是因为你还没有碰见复杂的操作:当你需要从多个表中查询数据并返回一个对象,这时候你就会领悟到myBatis强大的地方。(当然myBatis有很多强大的地方,这只是简单的举一个例子。)

      另外有很多公司在招软件工程师的时候都要求能熟练使用myBatis,比如阿里巴巴、华为等。

    3、怎么使用myBatis(how)

      好了废话不多说,来一起看看怎么去使用它。

      要使用它得先知道怎么去配置它,能够让它顺利的运行起来。那么这篇文章就主要简单的说明怎么正确的配置myBatis。

      新建一个普通Java项目,项目结构如图:

      

      首先从myBatis的主要配置文件(conf.xml)说起

    <?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="User" type="com.tony.bean.User" />
        </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/webtest" />
                    <property name="username" value="root" />
                    <property name="password" value="mian.mysql" />
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!-- 映射文件实现-->
            <mapper resource="com/tony/mapper/UserMapper.xml" />
            <!-- 注解实现 -->
            <!-- <mapper class="com/tony/mapper/UserMapper.java" /> -->
        </mappers>
    </configuration>

      当sql语句比较简单的时候采用注解的方式更方便,这时候就不用再去写xml文件了:直接在接口方法上面用注解写上需要执行的sql语句。  

      然后是配置的映射文件UserMapper.xml。只为说明问题,所以就只写了一条语句。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="com.tony.mapper.UserMapper">
    
        <!-- 一条查询语句 -->
        <select id="selectUserById" parameterType="int" resultType="User">
            select * from userinfo where id = #{id}
        </select>
    
    </mapper>

      该映射文件绑定的命名空间是 com.tony.mapper.UserMapper,意味着程序可以从直接调用该接口中的方法从而返回自己想要的Java对象而不需要强制转换。

      

      接下来是UserMapper.java接口,这个接口最主要的功能就是方便程序调用映射文件中的sql语句,免去了一些不必要的代码,使你的代码看上去更加简洁。

     1 package com.tony.mapper;
     2 
     3 import org.apache.ibatis.annotations.Select;
     4 
     5 import com.tony.bean.User;
     6 
     7 public interface UserMapper {
     8     
     9     /**
    10      * 方法名必须与映射文件中的id一致!
    11      * 方法名上面注释的那条语句就是用注解的实例
    12      * @param id 需要查找的id
    13      * @return 直接返回User对象!
    14      */
    15 //  @Select("select * from userinfo where id=#{id}")
    16     public User selectUserById(int id);
    17     
    18 }

      与映射文件绑定的接口里面的方法名称必须和映射文件中的id一致,否则将会报错。另外,通过注解实现的方法我也写了,就是方法名上面的那一行代码。

      

      最后是一个自定义的User类,User类的对象对应着数据库中的一条记录,每一个属性对应着一个字段,并且只有getter和setter方法;

     1 package com.tony.bean;
     2 
     3 public class User {
     4     private String username;
     5     private String pwd;
     6     private String id;
     7     
     8 
     9     public String getId() {
    10         return id;
    11     }
    12     public void setId(String id) {
    13         this.id = id;
    14     }
    15     public User() {
    16     }
    17     public User(String username, String password) {
    18         this.username = username;
    19         this.pwd = password;
    20     }
    21     public String getUsername() {
    22         return username;
    23     }
    24     public void setUsername(String username) {
    25         this.username = username;
    26     }
    27     public String getPwd() {
    28         return pwd;
    29     }
    30     public void setPwd(String pwd) {
    31         this.pwd = pwd;
    32     }
    33     @Override
    34     public String toString() {
    35         return "User [username=" + username + ", password=" + pwd + "]";
    36     }
    37     
    38 }

      好了,现在myBatis的基本配置基本上就配好了。下面我们在Main.java中进行测试:

     1 package com.tony.main;
     2 
     3 import java.io.InputStream;
     4 import org.apache.ibatis.session.SqlSession;
     5 import org.apache.ibatis.session.SqlSessionFactory;
     6 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
     7 
     8 import com.tony.bean.User;
     9 import com.tony.mapper.UserMapper;
    10 
    11 public class Mian {
    12     public static void main(String[] args) {
    13         
    14         //加载myBatis配置文件
    15         InputStream is=Mian.class.getClassLoader().getResourceAsStream("conf.xml");
    16         
    17         //从配置文件中构建一个SqlSessionFactory
    18         SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
    19         
    20         //打开一个Session会话
    21         SqlSession session=factory.openSession();
    22         
    23         //通过session获得一个mapper
    24         UserMapper mapper=session.getMapper(UserMapper.class);
    25         
    26         //通过mapper可以直接调用接口中的方法,并且不需要强制转换!!
    27         //这是一个与不绑定namespace配置的一个非常大的区别和优势。
    28         User u1 = mapper.selectUserById(1);
    29         User u2 = mapper.selectUserById(3);
    30         
    31         System.out.println(u1.toString());
    32         System.out.println(u2.toString());
    33 
    34         session.close();
    35         
    36     }
    37 }

      运行结果为:

      与表中记录吻合:

      

      

      好了,myBatis的比较常用的配置基本上就这些:主配置文件,映射文件,与映射文件绑定的接口。

      

      最后有几点说明:

      1、这篇文章主要讲的是如何简单配置myBatis,所以就没有对配置文件中的所有配置项进行说明。如果大家需要详细了解各个配置项的作用,我推荐大家去看myBatis的官方用户指南,这里面说的很详细。

      2、因为在代码文件中的注释写的比较详细,所以在文章中就没有用过多的篇幅去重复了。

      3、这篇文章完全是笔者自己在学习myBatis时总结的经验,不免有错误和疏漏的地方,还望大家指正。

      4、本文是属于搭建Spring+Spring MVC+ myBatis(SSM)框架的一部分,会在后面持续更新。

      相关博客:如何配置Spring MVC

  • 相关阅读:
    tomcat server.xml 配置示例
    Vue学习1:实例及生命周期
    flex布局
    从输入一个URL到页面完全显示发生了什么?
    webstorm配置eslint【标记错误,修复错误】
    JavaScript实现八大内部排序算法
    es6(六):module模块(export,import)
    es6(五):class关键字(extends,super,static)
    es6(四):Symbol,Set,Map
    es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)
  • 原文地址:https://www.cnblogs.com/liuxiaomian/p/framework_mybatis_configuration.html
Copyright © 2011-2022 走看看