JavaEE-ORM映射器MyBatis
来源:互联网 发布:淘宝最恶心sb的男模特 编辑:程序博客网 时间:2024/06/18 07:43
MyBatis
sf2gis@163.com
2015年12月9日
1 目标:实现对象和关系的映射。
包括对象和关系的实体映射及实体操作的映射。
2 原理:将表映射为一个类,列映射为类的属性,行映射为对象,OO行为映射为SQL操作(由映射文件配置SQL操作)。
PO=POJO+与表相同列属性。
3 流程:安装,配置数据库,创建实体类,创建SQL操作映射文件,操作实体类。
参考:http://www.cnblogs.com/xdp-gacl/p/4261895.html
3.1 创建JavaApplication。
3.2 安装:下载mybatis。解压,复制mybatis-3.2.8.jar到lib目录,并添加到classpath。
3.3 配置数据库:复制相应的数据库驱动到lib,并添加到classpath。配置数据库连接参数的xml。
本机使用mysql-connector-java-5.0.8.jar。
//mybatis.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>
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC" />
<!--配置数据库连接信息 -->
<dataSourcetype="POOLED">
<propertyname="driver" value="com.mysql.jdbc.Driver" />
<propertyname="url" value="jdbc:mysql://localhost:3306/hib4" />
<propertyname="username" value="root" />
<propertyname="password" value="sf" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 注册userMapper.xml文件,userMapper.xml位于me.gacl.mapping这个包下,所以resource写成me/gacl/mapping/userMapper.xml-->
<mapperresource="empMapper.xml" />
</mappers>
</configuration>
3.4 创建实体类:创建对应于数据库表的实体类。属性名与列名对应的bean(有get/set,有无参构建函数)。
//Employee.java
package lee;
import java.io.Serializable;
public class Employee implements Serializable{
privateint id;
privateString emp_Name;
privateString emp_Address;
privateString emp_Mobile_Nos;
publicint getId() {
returnid;
}
publicvoid setId(int id) {
this.id= id;
}
publicString getEmp_Name() {
returnemp_Name;
}
publicvoid setEmp_Name(String emp_Name) {
this.emp_Name= emp_Name;
}
publicString getEmp_Address() {
returnemp_Address;
}
publicvoid setEmp_Address(String emp_Address) {
this.emp_Address= emp_Address;
}
publicString getEmp_Mobile_Nos() {
returnemp_Mobile_Nos;
}
publicvoid setEmp_Mobile_Nos(String emp_Mobile_Nos) {
this.emp_Mobile_Nos= emp_Mobile_Nos;
}
}
3.5 创建SQL映射文件:创建SQL操作对应的映射文件,并将此文件注册到数据库配置文件的mapper中。
//empMapper.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="lee.empMapper">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<selectid="getUser" parameterType="int"
resultType="lee.Employee">
select * from employee where id=#{id}
</select>
</mapper>
3.6 操作实体类:连接数据库后,傅SQL操作id,传递参数执行。
//Main.java
package lee;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Main {
publicstatic void main(String[] args) {
//TODO Auto-generated method stub
//mybatis的配置文件
Stringresource = "mybatis.xml";
//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
InputStream is = Main.class.getClassLoader().getResourceAsStream(resource);
//构建sqlSession的工厂
SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(is);
//使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
//Reader reader = Resources.getResourceAsReader(resource);
//构建sqlSession的工厂
//SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(reader);
//创建能执行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
/**
* 映射sql的标识字符串,
* me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
*getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
String statement ="lee.empMapper.getUser";//映射sql的标识字符串
//执行查询返回一个唯一user对象的sql
Employee user =session.selectOne(statement, 1);
System.out.println(user.getEmp_Name());
}
}
结果:
4 方法:配置和操作
参考:http://mybatis.org/mybatis-3/zh/dynamic-sql.html
4.1 数据库配置
4.1.1组织结构
参考:http://mybatis.org/mybatis-3/zh/configuration.html
configuration 配置,根节点
-|properties 属性,变量定义
-|environments 环境,全局配置
--|environment 环境变量,独立的配置,可以定义多个
---|transactionManager 事务管理器,连接池
---|dataSource 数据源,数据库连接配置
-|mappers 映射器,SQL操作映射
4.2 SQL操作配置
参考:http://mybatis.org/mybatis-3/zh/sqlmap-xml.html
mapper:映射根元素,需要指定一个唯一的namespace属性,一般使用文件的包路径。
-|cache – 给定命名空间的缓存配置。
-|cache-ref – 其他命名空间缓存配置的引用。
-|resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
-|sql – 可被其他语句引用的可重用语句块。
-|insert – 插入语句
-|update – 更新语句
-|delete – 删除语句
-|select – 查询语句,包含唯一标识id,参数类型parameterType,返回值类型resultType。
4.3 实体操作方法
4.3.1目标:连接数据库,进行SQL操作。
4.3.2原理:读取配置,通过驱动连接数据库,进行SQL操作。
4.3.3流程:读取配置文件,创建连接工厂,打开连接,执行SQL映射操作。
4.3.3.1 读取配置文件:读取xml文件为流。
String resource ="org/mybatis/example/mybatis-config.xml";
InputStream inputStream =Resources.getResourceAsStream(resource);
4.3.3.2 创建连接工厂:使用配置文件流。
sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);
4.3.3.3 打开连接:使用连接工厂打开。
SqlSession session =sqlSessionFactory.openSession();
4.3.3.4 执行SQL映射操作:根据SQL映射文件定义的id,传入参数执行。
String statement ="lee.empMapper.getUser";//映射sql的标识字符串
//执行查询返回一个唯一user对象的sql
Employee user =session.selectOne(statement, 1);
5 示例:
6 扩展:
6.1 与Hibernate区别
ORM:都实现了ORM,但是Hibernate的实体映射需要配置,MyBatis只需要实体类对应即可。
操作:Hibernate对PO操作,直接映射为SQL操作。MyBatis需要配置操作SQL,然后执行,不能直接映射PO操作。
易用性:Hibernate(推荐)学习较MyBatis更复杂一些,但是操作简单。
6.2 iBatis与MyBatis
MyBatis=iBatis3
参考:http://baike.baidu.com/view/628102.htm
- JavaEE-ORM映射器MyBatis
- ORM映射
- [JavaEE - JPA] 5. ORM的核心注解 - 访问方式,表映射以及主键生成
- [JavaEE - JPA] 5. ORM的核心注解 - 访问方式,表映射以及主键生成
- 【Mybatis学习】Mybatis映射器
- Mybatis--映射器注解
- MyBatis-映射器
- Mybatis映射器
- MyBatis四映射器
- mybatis--映射器
- mybatis-映射器-select
- Mybatis映射器
- Mybatis 映射器
- MyBatis映射器
- MyBatis 映射器
- mybatis映射器注解
- 高效使用JavaEE ORM框架
- 高效使用JavaEE ORM框架
- HTML与JSP页面的区别
- @Table
- JPA注解 catalog
- @Temporal JPA 映…
- JAVA中super的两种用法
- JavaEE-ORM映射器MyBatis
- Android 开源项目推荐
- TortoiseSVN 日常操作指南
- 利用eclipse构建spark集成开发环境
- GitHub 使用教程图文详解
- android学习的几本书:深入理解Android内核设计思想
- 【经验】让参考文献按照自己希望的…
- zookeeper原理
- word修订功能的使用方法:修改论文…