标签:
MyBatis 以前叫 iBatis, 相对于 HIbernate 是一个轻量级的 ORM 框架, 一般的小型的项目使用 HIbernate 实在是大材小用. 这两天学了学 MyBatis, 就好好的总结一下吧.
先来一个快速入门吧!
我的开发环境:
jdk1.8, windows7, EclipseJ2EE, MySQL, SQLyog
一: MyBatis 开发环境搭建.
1. 建项目
新建一个 JavaProject, 新建一个 lib 目录, 用来存放所需的 jar 包的.
2. 下载需要的jar包
MyBatis 的 jar 包点击 MyBatis In Maven 上下载
MySQL 数据库连接驱动点击 MySQL-connector 下载.
3. 添加 jar 包
把两个 jar 包粘贴到新建的 lib 目录下面, 然后选中两个 jar 包, 右击, Build Path -> Add To Path, 把 jar 包添加到当前的项目中.
如下:
二: 对数据表的简单 CRUD
1. 建库
CREATE DATABASE mybatis; USE mybatis; CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT); INSERT INTO person(NAME, age) VALUES(‘Tom‘, 23); INSERT INTO person(NAME, age) VALUES(‘Mike‘, 14); INSERT INTO person(NAME, age) VALUES(‘Jack‘, 18);
2. 添加 MyBatis 的配置文件 conf.xml
在 src 目录下建立一个 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="oracle" /> </dataSource> </environment> </environments> </configuration>
其中:
①. environments及environment 的 default 属性指定模式
development: 开发模式(一般选用这个)
work: 工作模式
②. transactionManager 的 type 属性用于指定事务管理器类型
JDBC:使用JDBC的提交和回滚设置,依赖从数据源获取的连接来管理事务范围.
MANAGED:让容器(如Spring)来管理事务的生命周期。默认情况会关闭连接.
③. dataSource 的 type 属性指定连接池类型
UNPOOLED:连接用完就关闭,不放到连接池
POOLED:连接用完则放在连接池
里边的连接属性就不用说了.
3. 建立与数据表对应实体类 Person
在 src 下面建立一个 com.mybatis.entities 包用来存放 Person 实体类. 然后在包下建立实体类 Person.
具体的 setter 和 getter 以及 toString 方法自己写好, 如果添加了一个 有参的构造方法, 一定要加上一个无参的构造方法, 因为 MyBatis 会利用反射为属性赋值.
4. 添加操作 person 数据表的 SQL 映射文件 PersonMapper.xml
在 com.mybatis.entities 包下新建一个 PersonMapper.xml(类名+Mapper.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.mybatis.entities.PersonMapper"> <!-- 通过 id 查找一个 Perosn 对象 --> <select id="getPerson" parameterType="int" resultType="com.mybatis.entities.Person"> SELECT * FROM person WHERE id=#{id} </select> </mapper>
①. mapper 标签的 namespace 属性的值这样填写:
PersonMapper.xml 文件所在的包 + PersonMapper.xml 去掉 .xml
就是: com.mybatis.entities.PersonMapper
②. <select> 标签表示是一个 select 查询, 如果按 Eclipse 的提示键没有提示的话, 说明没有关联 .dtd 文件, 关联方法点击这里 Eclipse中在XML中如何关联.dtd文件.
③. <select> 标签的属性
a). id: 我们在调用内部 SQL 语句的时候会利用这个, 保证本文件中唯一不冲突.
b). parameterType: 传进来的参数的类型, 因为我们通过 id 查找一个 Person 对象.所以传进来一个 int 类型的 id.
c). resultType: 返回值类型, 这里写全类名, 带着包名.
内部就是SQL语句, 至于 #{id} 这个就是用来接收传进来的 int 类型的数字.
5. 在 conf.xml 文件中关联 PersonMapper.xml 映射文件
利用 <mappers> 标签来关联映射文件. 如下:
<mappers> <mapper resource="com/mybatis/entities/PersonMapper.xml"/> </mappers>
<mappers>标签与<environments>标签处于同一个级别.
6. 编写测试类. 获取一个 Person 对象
新建一个 com.mybatis.test 包, 在包下建立一个 TestPerson 类. 利用 Junit 单元测试来测试.
代码如下:
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 com.mybatis.entities.Person; public class TestPerson { @Test public void testGetPerson(){ InputStream is = getClass().getClassLoader() .getResourceAsStream("conf.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder() .build(is); SqlSession session = sessionFactory.openSession(); String statement = "com.mybatis.entities.PersonMapper.getPerson"; Person person = session.selectOne(statement , 1); System.out.println(person); // Person [id=1, name=Tom, age=23] } }
与 Hibernate 一样, 我们需要一个 SessionFactory 和一个 Session,
SessionFactory的创建需要一个流, 这个流对应着就是 conf.xml 文件的流.
session 的创建也很简单, openSession 就可以了.
告知 MyBatis 要调用哪一个 SQL 语句:
String statement = "com.mybatis.entities.PersonMapper.getPerson";
最后边的 getPerson 就是刚才我们<select>标签配置的 id 值.
因为我们需要传一个参数 id 给 SQL 语句, 所以我们需要在第二个参数上带一个 1.
Person person = session.selectOne(statement , 1);
表示查询 id 为 1 的 Person 对象.
最后打印, 查询完成!
本篇博文代码可以点击 http://pan.baidu.com/s/1gexNy3T 下载.
标签:
原文地址:http://www.cnblogs.com/wuqinglong/p/5151650.html