您的位置:首页 > 其它

【MyBatis】第一个入门例子

2017-05-23 18:04 288 查看
 在最近的项中用到了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 快速入门
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: