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>

就可以了。

原创粉丝点击