MyBatis从零开始搭建过程到实现查询数据的过程总结
2016-12-07 16:34
441 查看
MyBatis从搭建过程到实现查询数据
一:MyBatis介绍:
1-MyBatis的来源
iBATIS一词来源于“internet”和“abatis”的组合,在2010年成为Apache旗下的产品,是一个继Hibernate后的基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data
Access Objects(DAO)。
2-功能原理介绍比较Hibernate:
.是一个半自动的ORM框架,主要是通过动态SQL映射,(以操作SQL语句为基础)来完成对数据库的操作的相关业务的,这点和Hibernate有很大的区别的.Hibernate的操作数据库的思想比较----Hibernate是将数据库中的记录封装成对象,进而通过java面向对象的思想来通过操作对象来实现对数据库的操作的。
MyBatis是一个持久化的框架,省略了大多数的JDBC的代码,把常用的JDBC操作进行了封装,就如同Hibernate也对JDBC进行了轻量级的封装的.所谓轻量级可以理解为既可以使用Hibernate来操作数据库,也可以绕过Hibernate由JDBC来操作数据库的.SQL语句灵活多变根据实际需求写,相比于Hibernate的对整个表的操作来说相当的灵活的,这个也是MyBatis的最大缺点就是要手动完成大量的SQL语句的。
3-主要的接口介绍:
MyBatis框架的核心就是SqlSession对象了:来看张图SqlSession都有哪些功能呐?
就按照第一种方式来完成创建SqlSession的步骤吧:
就开始MyBatis的搭建过程了,首先到MyBatis下载相应的MyBatis的文件:
首先来一个MyBtais下载的链接:
访问这个网站主界面:
下载那个包就可以得到mybatis的jar包了。
这里我之前用的是MyBatis3.3.0版本的就用着这个吧,
新建一个JavaProject项目:
按照这个建立相应的目录就可以了。说明一下mybatis.xml是在src下的,log4j.propertie也是在src下的,在lib下导入一下的jar包。当然半自动的ORM框架用的jar包就少啊,在MyBatis的下载官方文件中就一个ja包不象Hibernate不但要导入必去的jar包,还要选择性的导入几个特别功能的jar呐,使用方便的。
在数据库中建立相应的表:
下面就开始具体的代码编写啦!
1: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>
<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/mybatistest"/>
<property name="username" value="root"/>
<property name="password" value="479602"/>
</dataSource>
</environment>
</environments>
<!-- 添加要执行SQL语句的路径 -->
<mappers>
<mapper resource="com/lx/Bean/Bean.xml"/>
</mappers>
</configuration>
说明:那个dtd文档头目录在下载的文件中有的,也可以到网上找找都可以找到的。
2:Bean.java这个在com.lx.Bean包下的。
package com.lx.Bean;
/**
*
* @author 李星
* 存储数据的javaBean
*
*/
public class Bean {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3:Bean.xml这个动态映射的SQL语句的配置文件也是位于com.lx.Bean包下
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.lx.Interface.Interface">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
4000
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<!-- select语句 -->
<select id="selectUserByID" parameterType="int" resultType="com.lx.Bean.Bean">
select * from users <!-- where id = #{id}-->
</select>
</mapper>
4:一个读取配置文件的信息创建SqlSessionFactory的工具类:Util.java
package com.lx.Mybatis;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
*
* @author 李星
* 创建SqlSessionFactory工具类
*/
public class Util {
public static SqlSessionFactory getSessionFactory(){
//声明SqlSessionFactory对象这个是Mybatis的核心,是工厂接口
//根据InputStream读入流将mybatis.xml
//SqlSessionFactoryBuilder()将根据读入的配置文件来创建SqlSessionFactory()对象
SqlSessionFactory sessionFactory = null;
String resource= "mybatis.xml";
try{
InputStream inputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception ex){
ex.printStackTrace();
}
//返回生成的SqlSessionFactory对象
return sessionFactory;
}
}
5:一个SqlSession执行的语句映射的方法,写成了一个接口,由反射机制创建对象调用接口中的方法:
Iterface.java
package com.lx.Interface;
import com.lx.Bean.Bean;
import com.lx.Interface.Interface;
import com.lx.Mybatis.Util;/**
*
* @author 李星
*
*/
public interface Interface {
//在接口中没有实现方法的主体的
public Bean selectUserByID(int id);
}
5:一个测试类来实现查询的:
package com.lx.Test;
import org.apache.ibatis.session.SqlSession;
import com.lx.Bean.Bean;
import com.lx.Interface.Interface;
import com.lx.Mybatis.Util;
/**
*
* @author 李星测试
*
*/
public class Test {
public static void main(String[] args) {
//创建SqlSession这里从工具类中获取
SqlSession session=Util.getSessionFactory().openSession();
//利用反射机制创建对象
Interface interface1=session.getMapper(Interface.class);
//实现查询过程
Bean interface2=interface1.selectUserByID(3);
//输出相关的信息
if(interface2==null){
System.out.println("都为空了,您还想查啥啊!");
}
else{
System.out.println("您查询到的数据有:"+interface2.getId()+" "+interface2.getAge()+" "+interface2.getName());
}
session.close();
System.out.println("您已查询完毕了");
}
}
6结果展示:这里以查询id=3的为例展示:
看到控制台输出了查询结果,也输出了sql语句,
log4j的DEBUG等的理解:
还有就是MyBatis的一些配置文件的简单解读了:
这个是MyBatis.xml中的一些
1.configuration:根元素
1.1 properties:定义配置外在化
1.2 settings:一些全局性的配置
1.3 typeAliases:为一些类定义别名
1.4 typeHandlers:定义类型处理,也就是定义JAVA类型与数据库中的数据类型之间的转换关系
1.5 objectFactory
1.6 plugins:mybatis插件,插件可以修改MyBatis内部运行规则
1.7 environments:配置Mybatis的环境
1.7.1 enveronment
1.7.1.1 transactionManager:事务管理器
1.7.1.2 datasource:数据源
1.8 databaseIdProvider
1.9 mappers:指定映射文件或映射类
这里我们重要介绍transactionManager和datasoruce的type取值
transactionManager:
dataSource:
JDBC:简单的使用JDBC的提交和回滚设置,一览与从数据员得到的链接来管理事务范围
type取值范围:
UNPOOLED:这个数据源的实现是每次被请求时打开和关闭连接。速度会有一些慢,适用于简单的应用程序。
这种类型的数据源只需要配置下面的6种属性(最后一项为可选):
至此简单的零基础到搭建一个MyBatis框架就完成了,但是几个关键的接口还是要说一说的:
首先SqlSessionFactoryBuilder.builder();方法读取配置文件,根据配置文件中的信息来完成创建SqlSessionFactory()工厂接口的,
然后是SqlSessionFactory的opensession来创建SqlSession(),这个就相当于Hibernate中的session接口一样的,通过getMapper()方法来获取接口中反射对象,然后调用相应的CRUD方法执行,最后记得要关闭SqlSession呦。这样就简单的说完了MyBatis几个重要对象的创建顺序。
五:来说说MyBatis的核心对象的生命周期和分装吧:
大家都知道java的对象在JVM在堆内存中创建的,由Java的内存不难看出,由java的垃圾回收器的现行回收算法按代回收的机制,堆内存由按照存在时间的长短又分为3代的Young(年轻代),Old(老年代),Permanent(永就代)的算法回收。
有了以上的了解就来说说SqlSessionFactoryBuilder()的生命周期吧,它是被JVM实例化,使用和销毁的。一旦使用SqlSessionFactoryBuilder创建SqlSessionFactory对象后就不再需要它了,就不需要再保持这个状态了,就可以由JVM进行销毁了,有java的垃圾回收机制判断它受否是垃圾,对他进行回收的唯一标准是没有其他引用变量指向它,就算是发现它是垃圾也不会就立即和回收它(简单的说就是该对象失去引用了),要等到垃圾运行回收运行时才会回收它的,垃圾回收就要清理这个对象创建时给它分配内存和回收过程时产生的内存碎片。所以说这个对象的最佳使用范围就是方法内部,所以说一般将都是在方法的内部来声明SqlSessionFactoryBuilder()来创建SqlSessionFactory对象的。创建的SqlSessionFactory实例就在应用程序执行期间都存在的,并不是每次操作数据库都要创SqlSessionFactory的。最后SqlSession这个核心了,一般是要每个线程都要有自己的SqlSession实例的。它不能共享的因此就不是线程安全的。
至此简单的零基础的MyBatis框架就搭建完了。这个只是一个简单的如门笔记,还有好多的mybatis配置文件要学习的,大伙一块加油吧,不喜欢别喷哈,不吝赐教哈。
一:MyBatis介绍:
1-MyBatis的来源
iBATIS一词来源于“internet”和“abatis”的组合,在2010年成为Apache旗下的产品,是一个继Hibernate后的基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data
Access Objects(DAO)。
2-功能原理介绍比较Hibernate:
.是一个半自动的ORM框架,主要是通过动态SQL映射,(以操作SQL语句为基础)来完成对数据库的操作的相关业务的,这点和Hibernate有很大的区别的.Hibernate的操作数据库的思想比较----Hibernate是将数据库中的记录封装成对象,进而通过java面向对象的思想来通过操作对象来实现对数据库的操作的。
MyBatis是一个持久化的框架,省略了大多数的JDBC的代码,把常用的JDBC操作进行了封装,就如同Hibernate也对JDBC进行了轻量级的封装的.所谓轻量级可以理解为既可以使用Hibernate来操作数据库,也可以绕过Hibernate由JDBC来操作数据库的.SQL语句灵活多变根据实际需求写,相比于Hibernate的对整个表的操作来说相当的灵活的,这个也是MyBatis的最大缺点就是要手动完成大量的SQL语句的。
3-主要的接口介绍:
MyBatis框架的核心就是SqlSession对象了:来看张图SqlSession都有哪些功能呐?
就按照第一种方式来完成创建SqlSession的步骤吧:
就开始MyBatis的搭建过程了,首先到MyBatis下载相应的MyBatis的文件:
首先来一个MyBtais下载的链接:
https://github.com/mybatis/mybatis-3/releases
访问这个网站主界面:
下载那个包就可以得到mybatis的jar包了。
这里我之前用的是MyBatis3.3.0版本的就用着这个吧,
新建一个JavaProject项目:
按照这个建立相应的目录就可以了。说明一下mybatis.xml是在src下的,log4j.propertie也是在src下的,在lib下导入一下的jar包。当然半自动的ORM框架用的jar包就少啊,在MyBatis的下载官方文件中就一个ja包不象Hibernate不但要导入必去的jar包,还要选择性的导入几个特别功能的jar呐,使用方便的。
在数据库中建立相应的表:
下面就开始具体的代码编写啦!
1: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>
<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/mybatistest"/>
<property name="username" value="root"/>
<property name="password" value="479602"/>
</dataSource>
</environment>
</environments>
<!-- 添加要执行SQL语句的路径 -->
<mappers>
<mapper resource="com/lx/Bean/Bean.xml"/>
</mappers>
</configuration>
说明:那个dtd文档头目录在下载的文件中有的,也可以到网上找找都可以找到的。
2:Bean.java这个在com.lx.Bean包下的。
package com.lx.Bean;
/**
*
* @author 李星
* 存储数据的javaBean
*
*/
public class Bean {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
3:Bean.xml这个动态映射的SQL语句的配置文件也是位于com.lx.Bean包下
<?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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.lx.Interface.Interface">
<!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
resultType="me.gacl.domain.User"就表示将查询结果封装成一个User类的对象返回
4000
User类就是users表所对应的实体类
-->
<!--
根据id查询得到一个user对象
-->
<!-- select语句 -->
<select id="selectUserByID" parameterType="int" resultType="com.lx.Bean.Bean">
select * from users <!-- where id = #{id}-->
</select>
</mapper>
4:一个读取配置文件的信息创建SqlSessionFactory的工具类:Util.java
package com.lx.Mybatis;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
*
* @author 李星
* 创建SqlSessionFactory工具类
*/
public class Util {
public static SqlSessionFactory getSessionFactory(){
//声明SqlSessionFactory对象这个是Mybatis的核心,是工厂接口
//根据InputStream读入流将mybatis.xml
//SqlSessionFactoryBuilder()将根据读入的配置文件来创建SqlSessionFactory()对象
SqlSessionFactory sessionFactory = null;
String resource= "mybatis.xml";
try{
InputStream inputStream = Resources.getResourceAsStream(resource);
sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch(Exception ex){
ex.printStackTrace();
}
//返回生成的SqlSessionFactory对象
return sessionFactory;
}
}
5:一个SqlSession执行的语句映射的方法,写成了一个接口,由反射机制创建对象调用接口中的方法:
Iterface.java
package com.lx.Interface;
import com.lx.Bean.Bean;
import com.lx.Interface.Interface;
import com.lx.Mybatis.Util;/**
*
* @author 李星
*
*/
public interface Interface {
//在接口中没有实现方法的主体的
public Bean selectUserByID(int id);
}
5:一个测试类来实现查询的:
package com.lx.Test;
import org.apache.ibatis.session.SqlSession;
import com.lx.Bean.Bean;
import com.lx.Interface.Interface;
import com.lx.Mybatis.Util;
/**
*
* @author 李星测试
*
*/
public class Test {
public static void main(String[] args) {
//创建SqlSession这里从工具类中获取
SqlSession session=Util.getSessionFactory().openSession();
//利用反射机制创建对象
Interface interface1=session.getMapper(Interface.class);
//实现查询过程
Bean interface2=interface1.selectUserByID(3);
//输出相关的信息
if(interface2==null){
System.out.println("都为空了,您还想查啥啊!");
}
else{
System.out.println("您查询到的数据有:"+interface2.getId()+" "+interface2.getAge()+" "+interface2.getName());
}
session.close();
System.out.println("您已查询完毕了");
}
}
6结果展示:这里以查询id=3的为例展示:
看到控制台输出了查询结果,也输出了sql语句,
log4j的DEBUG等的理解:
还有就是MyBatis的一些配置文件的简单解读了:
这个是MyBatis.xml中的一些
1.configuration:根元素
1.1 properties:定义配置外在化
1.2 settings:一些全局性的配置
1.3 typeAliases:为一些类定义别名
1.4 typeHandlers:定义类型处理,也就是定义JAVA类型与数据库中的数据类型之间的转换关系
1.5 objectFactory
1.6 plugins:mybatis插件,插件可以修改MyBatis内部运行规则
1.7 environments:配置Mybatis的环境
1.7.1 enveronment
1.7.1.1 transactionManager:事务管理器
1.7.1.2 datasource:数据源
1.8 databaseIdProvider
1.9 mappers:指定映射文件或映射类
这里我们重要介绍transactionManager和datasoruce的type取值
transactionManager:
dataSource:
JDBC:简单的使用JDBC的提交和回滚设置,一览与从数据员得到的链接来管理事务范围
type取值范围:
UNPOOLED:这个数据源的实现是每次被请求时打开和关闭连接。速度会有一些慢,适用于简单的应用程序。
这种类型的数据源只需要配置下面的6种属性(最后一项为可选):
driver | JDBC驱动名 |
url | JDBC URL地址 |
username | 数据库用户名 |
password | 数据库密码 |
defaultTransactionIsolationLevel | 默认的链接事务隔离级别 |
driver.encoding | utf-8(可选项) |
首先SqlSessionFactoryBuilder.builder();方法读取配置文件,根据配置文件中的信息来完成创建SqlSessionFactory()工厂接口的,
然后是SqlSessionFactory的opensession来创建SqlSession(),这个就相当于Hibernate中的session接口一样的,通过getMapper()方法来获取接口中反射对象,然后调用相应的CRUD方法执行,最后记得要关闭SqlSession呦。这样就简单的说完了MyBatis几个重要对象的创建顺序。
五:来说说MyBatis的核心对象的生命周期和分装吧:
大家都知道java的对象在JVM在堆内存中创建的,由Java的内存不难看出,由java的垃圾回收器的现行回收算法按代回收的机制,堆内存由按照存在时间的长短又分为3代的Young(年轻代),Old(老年代),Permanent(永就代)的算法回收。
有了以上的了解就来说说SqlSessionFactoryBuilder()的生命周期吧,它是被JVM实例化,使用和销毁的。一旦使用SqlSessionFactoryBuilder创建SqlSessionFactory对象后就不再需要它了,就不需要再保持这个状态了,就可以由JVM进行销毁了,有java的垃圾回收机制判断它受否是垃圾,对他进行回收的唯一标准是没有其他引用变量指向它,就算是发现它是垃圾也不会就立即和回收它(简单的说就是该对象失去引用了),要等到垃圾运行回收运行时才会回收它的,垃圾回收就要清理这个对象创建时给它分配内存和回收过程时产生的内存碎片。所以说这个对象的最佳使用范围就是方法内部,所以说一般将都是在方法的内部来声明SqlSessionFactoryBuilder()来创建SqlSessionFactory对象的。创建的SqlSessionFactory实例就在应用程序执行期间都存在的,并不是每次操作数据库都要创SqlSessionFactory的。最后SqlSession这个核心了,一般是要每个线程都要有自己的SqlSession实例的。它不能共享的因此就不是线程安全的。
至此简单的零基础的MyBatis框架就搭建完了。这个只是一个简单的如门笔记,还有好多的mybatis配置文件要学习的,大伙一块加油吧,不喜欢别喷哈,不吝赐教哈。
相关文章推荐
- 利用Spring MVC+Mybatis实现Mysql分页数据查询的过程详解
- spring-springmvc-mybatis-dubbo-redis-mysql实现soa搭建,数据查询,数据缓存
- 关于Ext3.0中按条件查询并重新加载Grid中的数据的实现过程及store.load的分析
- mybatis学习笔记三(实现关联数据的查询)
- MyBatis学习总结(五)——实现关联表查询
- Mybatis学习(3)实现关联数据的查询
- mybatis实战教程之开发环境搭建、以接口的方式编程、实现数据的增删改查
- mybatis实战教程(mybatis in action)之四:实现关联数据的查询(转)
- MyBatis学习总结(五)——实现关联表查询
- MyBatis学习总结(五)——实现关联表查询
- MyBatis学习总结(5)——实现关联表查询
- 利用存储过程实现交叉表格式数据查询的一种通用方法
- Sql语句与存储过程查询数据的性能测试实现代码
- Mybatis学习(4)实现关联数据的查询
- DB2存储过程实现查询表数据,生成动态SQL,并执行
- Sql语句与存储过程查询数据的性能测试实现代码
- MyBatis学习总结(五)——实现关联表查询
- MyBatis学习总结(五)——实现关联表查询
- mybatis实战教程之四:实现关联数据的查询
- mybatis 使用resultMap实现关联数据的查询(association 和collection )