`
yufenfei
  • 浏览: 803022 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

MyBatis之一(环境搭建)

 
阅读更多

09年的时候工作中用过ibatis,虽然说使用过,但也没有深入的全面的学习。最近在去ibatis的官网看下,现在ibatis已经改名为Mybatis,下载路径已经改变(http://code.google.com/p/mybatis/wiki/Downloads?tm=2

现在比较空闲,借此机会好好的根据已经的ibatis了解来学习下Mybatis

 

1、下载Myibatis

         下载地址(http://code.google.com/p/mybatis/downloads/list?can=3&q=Product%3DMyBatis

 

         下载版本:mybatis-3.1.1-bundle.zip

 

新手学习的时候最好下载官方的用户指南,当然英文不很好的童鞋可以找下中文翻译的版本。

 

2、Mysql建库表

 

 

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(100) DEFAULT NULL,
  `SEX` varchar(10) DEFAULT NULL,
  `AGE` int(2) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
    

 

 

3、Myeclipse新建工程

 

4、环境搭建

    (1)、mybaits的XML环境配置文件

 

        路径:src/config.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>
   
   <!-- 类别名定义 -->
   <typeAliases>
		 <typeAlias type="com.mybatis.po.Student" alias="Student"/>
	</typeAliases>
	<!-- 配置Mybatis的环境,事务及数据源等等 -->
	<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://127.0.0.1:3306/mybatis" />
				<property name="username" value="root" />
				<property name="password" value="root" />
			</dataSource>
		</environment>
	</environments>
	
	<!-- 指定映射文件或者映射类 -->
	<mappers>
		<mapper resource="com/mybatis/persistence/StudentMapper.xml" />
	</mappers>
</configuration>

 

 

(2)、创建数据库表对应的模型PO类

 

 

package com.mybatis.po;
import java.io.Serializable;

public class Student implements Serializable {
	private static final long serialVersionUID = 1L;
	private int id;
	private String name;
	private String sex;
	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 String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String toString(){
		return "ID:"+this.getId()+",姓名:"+this.getName()+",性别:"+this.getSex()+",年龄:"+this.getAge();
	}
}
 

 

(3)DAO层接口

 

       package com.mybatis.persistence;

import com.mybatis.po.Student;
public interface StudentMapper {
	/**
	 * 根据ID查询
	 * 创 建 人:  XX
	 * 创建时间:  2012-11-1 上午09:51:22  
	 * @param id
	 * @return
	 * @see [类、类#方法、类#成员]
	 */
	public Student getStudentById(Integer id);
}

 

  (4)映射文件(com/mybatis/persistence/StudentMapper.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.persistence.StudentMapper">

	<select id="getStudentById" parameterType="int" resultType="Student">
		select * from student where id = #{id}
	</select>
	
</mapper>

 

   ok到这儿一个最简单的环境搭建好了。

 

5、我们来测试一下

      在student表中手工插入一条记录,我们来查询一下

 

    package com.mybatis.test;

import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.mybatis.persistence.StudentMapper;
import com.mybatis.po.Student;

public class TestStudentMapper {

	private SqlSession session=null;
	@Before
	public void setUp() throws Exception {
		String resource = "config.xml";
		Reader reader = Resources.getResourceAsReader(resource);
		SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
		session = sqlMapper.openSession();
	}
	
	@Test
	public void testSelectStudent(){
		StudentMapper mapper = session.getMapper(StudentMapper.class);
		Student student =mapper.getStudentById(1);
		System.out.println(student.toString());
	}
	
}

     好了,测试正常

 

6、MyBatis的配置文件解析

 

(1)、配置文件的基本结构

configuration —— 根元素

properties —— 定义配置外在化

settings —— 一些全局性的配置

typeAliases —— 为一些类定义别名

typeHandlers —— 定义类型处理,也就是定义java类型与数据库中的数据类型之间的转换关系

objectFactory

plugins —— Mybatis的插件,插件可以修改Mybatis内部的运行规则

environments —— 配置Mybatis的环境

environment

transactionManager —— 事务管理器

dataSource —— 数据源

databaseIdProvider

mappers —— 指定映射文件或映射类

(2)、Settings

 

这些是极其重要的调整,它们会修改MyBatis在运行时的行为方式。下面这个表格描述了设置信息,它们的含义和默认值。

 

 

 


设置参数 描述 有效值 默认值
cacheEnabled 这个配置使全局的映射器启用或禁用缓存。 true | false true
lazyLoadingEnabled 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 true | false true
aggressiveLazyLoading 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载。 true | false true
multipleResultSetsEnabled 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 true | false true
useColumnLabel 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 true | false true
useGeneratedKeys

允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,

尽管一些驱动拒绝兼容但仍然有效(比如Derby)。

true | false false
autoMappingBehavior 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况)。

NONE,

PARTIAL,

FULL

PARTIAL
defaultExecutorType 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新

SIMPLE,

REUSE,

BATCH

SIMPLE
defaultStatementTimeout 设置超时时间,它决定驱动等待一个数据库响应的时间。 Any positive integer Not Set(null)

 

 


(2)、typeAliases

     类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分。如:

 

 

<!-- 类别名定义 -->
   <typeAliases>
	    <typeAlias type="com.mybatis.po.Student" alias="Student"/>
  </typeAliases>

 

(3)Environments元素

    可以配置多个运行环境,但是每个SqlSessionFactory 实例只能选择一个运行环境。

 

 

(a)、transactionManager事务管理器

 

MyBatis 有两种事务管理类型(即type=”[JDBC|MANAGED]”):

 

JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设置。 它依赖于从数据源得 到的连接来管理事务范围。

MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让 容器来管理事务的整个生命周期(比如 Spring 或 JEE 应用服务器的上下文) 默认 情况下它会关闭连接。 然而一些容器并不希望这样, 因此如果你需要从连接中停止 它,将 closeConnection 属性设置为 false。例如:

 

<transactionManager type="MANAGED">

<property name="closeConnection" value="false"/>

</transactionManager>

 

 

     (b)、dataSource数据源

 

dataSource 元素使用标准的JDBC 数据源接口来配置JDBC 连接对象源。

 

MyBatis 内置了三种数据源类型:

 

UNPOOLED – 这个数据源的实现是每次被请求时简单打开和关闭连接。它有一点慢, 这是对简单应用程序的一个很好的选择, 因为它不需要及时的可用连接。 不同的数据库对这 个的表现也是不一样的, 所以对某些数据库来说配置数据源并不重要, 这个配置也是闲置的。 UNPOOLED 类型的数据源仅仅用来配置以下 5 种属性:

 

driver – 这是 JDBC 驱动的 Java 类的完全限定名(如果你的驱动包含,它也不是 数据源类)。

url – 这是数据库的 JDBC URL 地址。

username – 登录数据库的用户名。

password – 登录数据库的密码。

defaultTransactionIsolationLevel – 默认的连接事务隔离级别。

作为可选项,你可以传递数据库驱动的属性。要这样做,属性的前缀是以“driver.”开 头的,例如:

 

driver.encoding=UTF8

这 样 就 会 传 递 以 值 “ UTF8 ” 来 传 递 属 性 “ encoding ”, 它 是 通 过 DriverManager.getConnection(url,driverProperties)方法传递给数据库驱动。

 

POOLED – 这是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例 时必要的初始连接和认证时间。这是一种当前 Web 应用程序用来快速响应请求很流行的方 法。

 

除了上述(UNPOOLED)的属性之外,还有很多属性可以用来配置 POOLED 数据源:

 

poolMaximumActiveConnections – 在任意时间存在的活动(也就是正在使用)连 接的数量。默认值:10

poolMaximumIdleConnections – 任意时间存在的空闲连接数。

poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检查的时间。默认 值:20000 毫秒(也就是 20 秒)

poolTimeToWait – 这是给连接池一个打印日志状态机会的低层次设置,还有重新 尝试获得连接, 这些情况下往往需要很长时间 为了避免连接池没有配置时静默失 败)。默认值:20000 毫秒(也就是 20 秒)

poolPingQuery – 发送到数据的侦测查询,用来验证连接是否正常工作,并且准备 接受请求。默认是“NO PING QUERY SET” ,这会引起许多数据库驱动连接由一 个错误信息而导致失败。

poolPingEnabled – 这是开启或禁用侦测查询。如果开启,你必须用一个合法的 SQL 语句(最好是很快速的)设置 poolPingQuery 属性。默认值:false。

poolPingConnectionsNotUsedFor – 这是用来配置 poolPingQuery 多次时间被用一次。 这可以被设置匹配标准的数据库连接超时时间, 来避免不必要的侦测。 默认值: 0(也就是所有连接每一时刻都被侦测-但仅仅当 poolPingEnabled 为 true 时适用)。

JNDI – 这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器, 容器可以集 中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这个数据源配置只需要两个属 性:

 

initial_context – 这 个 属 性 用 来 从 初 始 上 下 文 中 寻 找 环 境 ( 也 就 是 initialContext.lookup(initial——context) 。这是个可选属性,如果被忽略,那么 data_source 属性将会直接以 initialContext 为背景再次寻找。

data_source – 这是引用数据源实例位置的上下文的路径。它会以由 initial_context 查询返回的环境为背景来查找,如果 initial_context 没有返回结果时,直接以初始 上下文为环境来查找。

和其他数据源配置相似, 它也可以通过名为 “env.” 的前缀直接向初始上下文发送属性。 比如:

 

env.encoding=UTF8

在初始化之后,这就会以值“UTF8”向初始上下文的构造方法传递名为“encoding” 的属性。

 

 

 

分享到:
评论

相关推荐

    免费的防止锁屏小软件,可用于域统一管控下的锁屏机制

    免费的防止锁屏小软件,可用于域统一管控下的锁屏机制

    Python代码实现带装饰的圣诞树控制台输出

    内容概要:本文介绍了一段简单的Python代码,用于在控制台中输出一棵带有装饰的圣诞树。具体介绍了代码结构与逻辑,包括如何计算并输出树形的各层,如何加入装饰元素以及打印树干。还提供了示例装饰字典,允许用户自定义圣诞树装饰位置。 适用人群:所有对Python编程有一定了解的程序员,尤其是想要学习控制台图形输出的开发者。 使用场景及目标:适用于想要掌握如何使用Python代码创建控制台艺术,特别是对于想要增加节日氛围的小项目。目标是帮助开发者理解和实现基本的字符串操作与格式化技巧,同时享受创造乐趣。 其他说明:本示例不仅有助于初学者理解基本的字符串处理和循环机制,而且还能激发学习者的编程兴趣,通过调整装饰物的位置和树的大小,可以让输出更加个性化和丰富。

    白色大气风格的设计师作品模板下载.zip

    白色大气风格的设计师作品模板下载.zip

    电商平台开发需求文档.doc

    电商平台开发需求文档.doc

    白色简洁风格的办公室室内设计门户网站模板下载.zip

    白色简洁风格的办公室室内设计门户网站模板下载.zip

    VB+access干部档案管理系统(源代码+系统)(20246t).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    VB+ACCESS服装专卖店管理系统设计(源代码+系统+开题报告+答辩PPT)(2024ra).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    (179065812)基于Android stduio的手机银行开发与设计-用于课程设计

    课程设计---基于Android stduio的手机银行开发与设计 现今,手机已经成为人们生活和工作的必备品,在手机各种系统中Android系统是人们用的比较多的系统。手机银行也是人们在生活中比较常用的功能之一。本项目基于Android的手机银行开发与设计主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。本项目主要用Android Studio 开发,数据库SQLite数据库,和夜神模拟器。 基于Android stduio的手机银行开发与设计项目主要功能有登录注册、转账、转账记录查询、修改及查询个人信息、添加好友、向好友转账的功能。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    白色大气风格的婚礼现场倒计时模板下载.zip

    白色大气风格的婚礼现场倒计时模板下载.zip

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图 这段程序主要是一个小车的动力

    轮式移动机器人轨迹跟踪的MATHLAB程序,运用运动学和动力学模型的双闭环控制,借鉴自抗扰控制技术结合了非线性ESO,跟踪效果良好,控制和抗扰效果较优,可分享控制结构图。 这段程序主要是一个小车的动力学仿真程序,用于模拟小车在参考轨迹下的运动。下面我将对程序进行详细的分析解释。 首先,程序开始时使用`clear`、`clc`和`close all`命令来清除工作空间、命令窗口和图形窗口中的内容。 接下来,程序定义了一系列参数和变量,用于设置仿真的参数和存储仿真过程中的数据。这些参数包括小车的质量、车宽、驱动轮半径等,还有参考轨迹的振幅和频率,仿真步长,仿真时间等。 然后,程序定义了一些元胞数组,用于存储不同阶段的数据。这些数组包括参考轨迹位姿、真实运动轨迹位姿、参考轨迹一阶导数、参考轨迹速度、期望速度、真实速度、控制器输出的控制力矩、控制输入、期望速度与真实速度误差、摩擦值、外界扰动值、总扰动、位姿跟踪误差、扰动观测值等。 接下来,程序给这些变量赋初始值,包括小车的初始位姿和速度,初始速度,期望初始速度,控制器输出的控制力矩,扰动观测值等。 然后,程序进入一个循环,仿真时间从

    vb+ACCESS学生档案管理系统(论文+源代码)(2024ql).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    数据分析-31-疫情数据分析(包含代码和数据)

    这是一份来自开源的全球新冠肺炎数据集,每日时间序列汇总,包括确诊、死亡和治愈。所有数据来自每日病例报告。数据持续更新中。 由于数据集中没有美国的治愈数据,所以在统计全球的现有确诊人员和治愈率的时候会有很大误差,代码里面先不做这个处理,期待数据集的完善。

    白色大气风格的时装设计公司模板下载.zip

    白色大气风格的时装设计公司模板下载.zip

    白色大气风格的商务会议活动模板下载.rar

    白色大气风格的商务会议活动模板下载.rar

    vb+access工资管理系统(论文+程序+开题报告+外文翻译+答辩PPT)(2024k3).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    基于微信小程序的学生签到系统设计与实现ssm.zip

    本次开发一套基于微信小程序的生签到系统,有管理员,教师,学生三个角色。管理员功能有个人中心,学生管理,教师管理,签到管理,学生签到管理,班课信息管理,加入班课管理,请假信息管理,审批信息管理,销假信息管理,系统管理。教师和学生都可以在微信端注册和登录,教师可以管理签到信息,管理班课信息,审批请假信息,查看学生签到,查看加入班级,查看审批信息和销假信息。学生可以查看教师发布的学生签到信息,可以自己选择加入班课信息,添加请假信息,查看审批信息,进行销假操作。基于微信小程序的生签到系统服务端用Java开发的网站后台,接收并且处理微信小程序端传入的json数据,数据库用到了MySQL数据库作为数据的存储。

    技术资源分享-我的运维人生-《新年的奇妙团聚与希望之旅》

    **脚本描述**:本脚本围绕着新年这个充满欢乐与希望的时刻展开。故事发生在一个热闹的小镇,主要角色有在外打拼多年的年轻人小李,他的父母,以及一群充满活力的小镇居民。新年将至,小李踏上回家的旅途,满心期待与家人团聚。在小镇上,大家都在积极筹备新年,贴春联、挂灯笼、准备年夜饭。小李与家人重逢后,一起分享着彼此的故事和喜悦。同时,他们也和小镇居民一起举办了热闹的庆祝活动,在欢声笑语中迎接新年的到来。这个新年不仅让小李重新感受到了家的温暖,也让他对未来充满了信心和希望,他决定和小镇一起成长发展。通过这个脚本,展现新年带给人们的幸福、温暖和对未来的憧憬。

    Python 自动办公- Python分类汇总278张Excel表中的数据 Python源码

    Python 自动办公- Python分类汇总278张Excel表中的数据

    白色创意风格的用户信息登记源码下载.zip

    白色创意风格的用户信息登记源码下载.zip

    白色大气的音乐专辑博客整站网站模板下载.zip

    白色大气的音乐专辑博客整站网站模板下载.zip

Global site tag (gtag.js) - Google Analytics