【MyBatis】第一个入门例子


 在最近的项中用到了MyBatis,所以上网学习了一下相关内容。


 一、简介


     MyBatis本来是apache的一个开源项目IBatis,2010年这个项目迁移到了google code,并且该名称为MyBatis,2013年11月迁移到了Github。这就是为什么我们引用过的jar版本不同,项目中import也是不同的。老版本的是org.csource.fastdfs,而新版的标识的是GItup上面的。

    MyBatis支持普通的SQL查询,存储过程和高级查询的优秀的持久层的框架,MyBatis消除了几乎所有的JDBC代码和参数的手工设置。MyBatis使用简单的XML或注解用于配置和原始映射。将接口和POJOS映射成为数据库中的记录。

   MyBatis的最大特性在于它的动态语句功能。我们知道把SQL语句连接拼在一起,是一件特别需要细心和耐心的活,要确保不能够忘记空格或者不要再coloumns列后面省略一个逗号。MyBatis的能够通过在任何映射SQL中使用强大动态SQL语句来改进这些状况。


二、第一个查询实例


项目最终目录结构如下:



1.需要的开发环境

普通的Java项目或者JavaWeb项目都可以。


2.添加相应的jar文件


(1)mybatis  mybatis-3.1.1.jar

  (2) mysql驱动包 myslq-connector-java -5.1.7-bin.jar



3.创建数据库和表,这里使用的是msyql数据库。




4.添加mybatis的配置文件conf.xml


在src下目录创建conf.xlm文件。

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>
     <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/mybatis" />
                 <property name="username" value="root" />
                <property name="password" value="1" />
             </dataSource>
         </environment>
     </environments>
     <!-- 注册userMapping.xml文件 -->
	<mappers>
		<mapper resource="cn/mapping/userMapping.xml" />
	</mappers>
</configuration>

5.创建实体类


package cn.entity;

/**
 * 用户实体
 * @author lizhenjuan
 *
 */
public class User {

	private int id;
	private String name;
	private int age;
         //省略get和set方法
	
	@Override
	public String toString(){
		 return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
}

6、创建users表的sql映射文件uerMappint.xml文件。


useMapping.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="cn.mapping.userMapping">
<!-- 为这个mapper指定唯一的namespace,习惯上命名:包名称+sql映射文件,这样就能够保证命名空间的唯一性。 -->

<!-- 在select标签上编写查询的slq语句。id值必须唯一,不能够重复。
parameterType指明查询的参数类型
resultType查询返回的结果集类型,resultType="cn.entity.User"表示将查询的结果集封装成为一个User对象返回。
 -->
<select id="getUser" parameterType="int" resultType="cn.entity.User">
    <!-- 根据ID查询用户信息 -->
    SELECT * FROM users where id=#{id}
</select>
</mapper>

7.在conf.xml文件中注册userMapper.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>
     <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/mybatis" />
                 <property name="username" value="root" />
                <property name="password" value="1" />
             </dataSource>
         </environment>
     </environments>
     <!-- 注册userMapping.xml文件 -->
	<mappers>
		<mapper resource="cn/mapping/userMapping.xml" />
	</mappers>
</configuration>

8.创建测试方法


创建测试类,根据id查询数据库的一条记录。

package MyBaties;
import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import cn.entity.User;

public class TestMybatis {

  @Test
  public void test() throws IOException{
	  
	  //获取mybatis的映射文件
	  String resource="conf.xml";
	  //使用类加载器加载mybatis的配置文件,它也加载关联的映射文件
	 //InputStream is= TestMyBatis.TestMybatis.class.getClassLoader().getResourceAsStream(resource);
	 InputStream is= TestMybatis.class.getClassLoader().getResourceAsStream(resource);
      //构建sessionFactory
	   SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
	 //能够执行映射文件的sql的sqlSession
	 SqlSession session=sessionFactory.openSession();
	 
	 //映射sql的标识字符串
	 //其中“cn.mapping.userMapping”是UserMapping.xml文件的命名空间的值,getUser是select标签的Id值
	 //因为getUser方法唯一,所以通过id值就可以找到要执行的sql语句。
	 String statement="cn.mapping.userMapping.getUser";
	 User user=session.selectOne(statement,2);
	 System.out.println(user);
			 
  }
}

9.最后查询效果




10.执行过程总结


大致执行流程如下:

(1)首先SqlSessionFactoryBuilder去读取Mybatis的配置文件,然后build一个DefaultSqlSessionFactory。

(2)获取SqlSessionFactory之后,就可以通过SqlSessionFactory文件来获取SqlSession.

 (3)现在得到了SqlSession对象,接下来就可以直接调用Session的中select、insert、update方法了。

(4)在MyBatis中,通过MapperProxy来动态代理我们的dao,也就是当咱们执行自己写的dao里面的方法时候,其实是对应mapperProxy在代理。


 三、参考资料


深入理解Mybatis系列--sql执行流程分析(源码篇)
mybatis知识点总结和梳理

MyBatis原理、优缺点、以及和Hibernate的比较

MyBatis 快速入门


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值