MyBatis学习(一)- 搭建MyBatis项目
来源:互联网 发布:亳州安广网络客服电话 编辑:程序博客网 时间:2024/06/06 16:51
最近要学习使用MyBatis,参照网上的资料和官方的教程,根据自己的理解,记录一下。
MyBatisJar包下载地址:http://download.csdn.net/detail/jolingogo/5220163
官方教程:http://mybatis.github.com/mybatis-3/zh/index.htm
一.什么是MyBatis
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plan Old Java Objects,普通的 Java 对象)映射成数据库中的记录。
以前学习过Hibernate,在网上查了一下,说MyBatis是半自动化的,需要自己写SQL语句,这样就可以根据需要自己优化SQL了。
Hibernate可以根据配置文件或者注解自动生成表,省去了自己写建表语句,在网上找了一下,MyBatis好像不可以。Google提供了generator,可以根据表结构生成实体类和映射文件,试了一下,还不错,以后会写一下。
二.配置文件
这些框架什么的,基本上都需要配置文件。MyBatis的XML 配置文件包含对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源和 决定事务范围和控制的事务管理器。
mybatis-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><!-- 数据库相关属性文件,这里不写的话,也会自动加载 --><properties resource="config.properties"></properties><!-- 环境配置 --> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!-- 数据库连接相关配置 ,这里动态获取config.properties文件中的内容--> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment></environments> <!-- 映射文件 ,我们还没有,这里什么都不写--><mappers></mappers> </configuration>config.properties
三.从 XML 中构建 SqlSessionFactory
每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。 SqlSessionFactory 对 象 的 实 例 可 以 通 过 SqlSessionFactoryBuilder 对 象 来 获 得 。 SqlSessionFactoryBuilder 对象可以从 XML 配置文件,或从 Configuration 类的习惯准备的实 例中构建 SqlSessionFactory 对象。
这里的SqlSessionFactory和Hibernate中的SessionFactory是一样的,我们可以通过factory,获取session。
package org.ygy.util;import java.io.IOException;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;/** * MyBatis的工具类 * @author yuguiyang * */public class MyBatisUtil {private static SqlSessionFactory sqlSessionFactory = null;/** * 初始化Session工厂 * @throws IOException */private static void initialFactory() throws IOException {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}/** * 获取Session * @return */public static SqlSession getSession() {if(sqlSessionFactory == null) {try {initialFactory();} catch (IOException e) {e.printStackTrace();}}return sqlSessionFactory.openSession();}}
接下来,我们测试一下,看看配置是否正确:
package org.ygy.model;import static org.junit.Assert.*;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import org.ygy.util.MyBatisUtil;public class ModelTest {@Testpublic void testGetSession() {SqlSession session = MyBatisUtil.getSession();assertNotNull(session);if(session != null) {session.close();session = null;}}}
貌似,想当然的悲剧了,这样测试好像不行,刚才忘记添加数据库驱动了,结果运行一样成功了,如果不执行SQL语句的话,MyBatis好像不会去连接数据库,测试还是等一下吧。
既然这样的话,我们就先写一个映射文件。
首先,我们要建一张表,就来一个用户表吧(t_user),我用的SqlServer,语句就省略了吧
然后,和表对应的实体类:
package org.ygy.model;/** * 用户 * @author yuguiyang * */public class User {private Integer id;//自动增长的IDprivate String name;//用户名private String password;//密码private String email;//邮箱private Integer age;//年龄private Integer gender;//性别,0-男 ; 1-女public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", password=" + password+ ", email=" + email + ", age=" + age + ", gender=" + gender+ "]";}}
接下来,是映射文件:UserMapper.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="org.ygy.mapper.UserMapper"><insert id="insert" parameterType="org.ygy.model.User" useGeneratedKeys="true">insert into t_user(name , password , email , gender , age)values(#{name} , #{password} , #{email} , #{gender} , #{age})</insert><select id="selectUser" resultType="org.ygy.model.User">select * from t_user</select> </mapper>
最后,在mybatis-config.xml配置文件中添加映射文件:
<!-- 映射文件 --><mappers><mapper resource="org/ygy/mapper/UserMapper.xml"/></mappers>
好了,这下,我们可以测试了:
package org.ygy.model;import static org.junit.Assert.assertEquals;import static org.junit.Assert.assertNotNull;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.After;import org.junit.Before;import org.junit.Test;import org.ygy.util.MyBatisUtil;public class ModelTest {private SqlSession session = null;@Beforepublic void before() {session = MyBatisUtil.getSession();}@Afterpublic void after() {session.commit();session.close();}@Testpublic void testGetSession() {assertNotNull(session);if(session != null) {session.close();session = null;}}@Testpublic void testSelectUser() {List<User> userList = session.selectList("org.ygy.mapper.UserMapper.selectUser");for(User each : userList) {System.out.println("each->" + each);}}@Testpublic void testInsert() {User user = new User();user.setName("路飞");user.setPassword("lufei");user.setEmail("lufei@op.com");user.setAge(23);user.setGender(0);int result = session.insert("org.ygy.mapper.UserMapper.insert" , user);assertEquals(1 , result);}}
,这样,一个入门的示例,就差不多了。
拓展:
1.别名
在mybatis-config.xml中可以配置别名 (typeAliases)
类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关,只用来减少类完全限定名的多余部分。
看看上面UserMapper.xml中
只要在mybatis-config.xml中添加
<!-- 配置别名 --><typeAliases><typeAlias type="org.ygy.model.User" alias="User"/></typeAliases>
就可以了。
- MyBatis学习(一)- 搭建MyBatis项目
- MyBatis学习(一)- 搭建MyBatis项目
- 一、Mybatis项目搭建
- mybatis学习笔记(一) 项目搭建,helloworld实例
- Maven+SpringMVC+Mybatis项目搭建(一)
- Mybatis源码学习笔记(一) 搭建mybatis
- Mybatis学习(一)环境搭建
- mybatis学习一框架搭建
- mybatis学习(一)
- MyBatis学习(一)
- MyBatis学习(一)
- 学习Mybatis(一)
- mybatis学习(一)
- mybatis学习(一)
- mybatis学习(一)
- idea 搭建 springMVC+mybatis+maven 项目(一)
- 项目结构搭建【springboot mybatis个人博客系统(一)】
- Maven搭建Spring+Struts2+Mybatis项目(一) Maven环境
- Java的内存回收机制
- _javaScript_Html笔记
- 正则表达式整理
- Android 应用界面设计
- MFC/VC中怎样实现slider滑块控件鼠标点击那里,就刚好落到点击位置
- MyBatis学习(一)- 搭建MyBatis项目
- 关于dsound.h的问题error C2501: 'DWORD_PTR' : missing storage-class or type specifiers
- 每日雕蟲一技[2013-04-04]搞定令老夫蛋碎的HighChart x轴单位显示稠密问题。
- UESTC1804: An A-Level Attack
- Android仿人人客户端(v5.7.1)——采用RelativeLayout做父容器,实现左侧滑动菜单(二)
- 基于PeterWang老师的Vim脚本配置
- 103 - Stacking Boxes
- 非常好的HTML5 Form表单示例
- Linux-0.11系统在Windows平台下的调试