这篇文章主要学习如何配置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语句,免去了一些不必要的代码,使你的代码看上去更加简洁。

 package com.tony.mapper;

 import org.apache.ibatis.annotations.Select;

 import com.tony.bean.User;

 public interface UserMapper {

     /**
* 方法名必须与映射文件中的id一致!
* 方法名上面注释的那条语句就是用注解的实例
* @param id 需要查找的id
* @return 直接返回User对象!
*/
// @Select("select * from userinfo where id=#{id}")
public User selectUserById(int id); }

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

  

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

 package com.tony.bean;

 public class User {
private String username;
private String pwd;
private String id; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public User() {
}
public User(String username, String password) {
this.username = username;
this.pwd = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + pwd + "]";
} }

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

 package com.tony.main;

 import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.tony.bean.User;
import com.tony.mapper.UserMapper; public class Mian {
public static void main(String[] args) { //加载myBatis配置文件
InputStream is=Mian.class.getClassLoader().getResourceAsStream("conf.xml"); //从配置文件中构建一个SqlSessionFactory
SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is); //打开一个Session会话
SqlSession session=factory.openSession(); //通过session获得一个mapper
UserMapper mapper=session.getMapper(UserMapper.class); //通过mapper可以直接调用接口中的方法,并且不需要强制转换!!
//这是一个与不绑定namespace配置的一个非常大的区别和优势。
User u1 = mapper.selectUserById(1);
User u2 = mapper.selectUserById(3); System.out.println(u1.toString());
System.out.println(u2.toString()); session.close(); }
}

  运行结果为:

  与表中记录吻合:

  

  

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

  

  最后有几点说明:

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

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

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

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

  相关博客:如何配置Spring MVC

学习myBatis - 如何配置myBatis的更多相关文章

  1. mybatis(2)--配置mybatis实现连接数据库查询

    1.新建项目 2.在src下创建一个xml文件 比如这xml文件名为 mybatis.xml 一下为初始xml文件代码 <?xml version="1.0" encodin ...

  2. SpringBoot学习笔记(1):配置Mybatis

    SpringBoot学习笔记(1):配置Mybatis 反思:如果自己写的笔记自己都看不懂,那就不要拿出来丢人现眼! IDEA插件 Free MyBatis Plugin插件可以让我们的MyBatis ...

  3. MyBatis Cache配置

    @(MyBatis)[Cache] MyBatis Cache配置 MyBatis提供了一级缓存和二级缓存 配置 全局配置 配置 说明 默认值 可选值 cacheEnabled 全局缓存的开关 tru ...

  4. SpringBoot 整合MyBatis 统一配置bean的别名

    所谓别名, 就是在mappper.xml配置文件中像什么resultType="xxx" 不需要写全限定类名, 只需要写类名即可. 配置方式有两种: 1. 在 applicatio ...

  5. MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql

    目录(?)[-] 一MyBatis简介与配置MyBatisSpringMySql MyBatis简介 MyBatisSpringMySql简单配置 搭建Spring环境 建立MySql数据库 搭建My ...

  6. 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置

    [转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...

  7. Mybatis学习(七)————— mybatis的逆向工程的配置详解

    一.什么是逆向工程? 简单点说,就是通过数据库中的单表,自动生成java代码. Mybatis官方提供了逆向工程,可以针对单表自动生成mybatis代码(mapper.java\mapper.xml\ ...

  8. mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构

    原文:http://blog.csdn.net/oh_mourinho/article/details/51463413 创建maven项目 <span style="font-siz ...

  9. MyBatis学习02(配置解析)

    配置解析 核心配置文件 mybatis-config.xml 系统核心配置文件 MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息. 能配置的内容如下: configur ...

随机推荐

  1. JAVA多线程和并发基础面试问答(转载)

    JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...

  2. ❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️html,js随笔。❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

    a标签本身的文字居中. a{ display:block; text-align:center; } 设置div1在另一个div2里居中,(写了左边margin 就别写右边了不然ie6有毛病,当然本身 ...

  3. python CGI编程Apache配置

    1. 编辑http.conf,添加两行,路径可以自定义 <Directory "C:/AppServ/www/cgi-bin"> AllowOverride None ...

  4. Spring中常用的连接池配置

    首先,我们准备Jdbc属性文件 jdbc.properties,用于保存连接数据库的信息,利于我们在配置文件中的使用 jdbc.driver=com.mysql.jdbc.Driver jdbc.ur ...

  5. Spring Mvc 的自定义拦截器

     spring mvc的拦截器 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户 ...

  6. 8款适合乐队、歌手和音乐家免费 WordPress 主题

    这篇文章与大家分享8款适合乐队.歌手和音乐家免费 WordPress WordPress 音乐网站主题.WordPress 作为最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许 ...

  7. 【position也可以很复杂】当弹出层遇上了鼠标定位(下)

    前言 接着昨天的内容写,为了保证内容连续性,这里还是把昨天的内容拷了过来. 请用现代浏览器测试 引出问题 有图有真相,我们来看一个智联招聘里面经常出现的图层: 他这个是没有什么问题的,我们来简单看看其 ...

  8. 记STM32F030多通道ADC DMA读取乱序问题

    问题描述通过 uint16_t ConvData[8]保存DMA搬运的ADC转换数值,但是这个数组数值的顺序总是和ADC不是顺序对应的.比如用7个通道的ADC,当设置ADC_InitStructure ...

  9. ABAP中的数据校验-备注

    通过 function module 检查日期是否合法(DDUT_INPUT_CHECK的校验会根据账户的时间设置格式)     日期校验方式一: CALL FUNCTION ‘DATE_CHECK_ ...

  10. Jquery plupload上传笔记(修改版)

    找一个好的上传插件不容易啊,最近看好一个上传插件,查了些网上质料,自己做了些改动,记录下来,来彰显自己曾经屌丝过,这插件还不错,支持多个上传和预览 首先引用,发现有的时候想学点新的东西,不过时间久了也 ...