1. 环境
mybatis-3.2版本,jdk1.6版本,Oracle数据库
2. 功能
实现基本的数据单条插入、单条查询功能。
3. 准备工作
3.1 下载mybatis-3.2,需要引用其中的若干包
mybatis-3.2.0.jar lib/asm-3.3.1.jar lib/cglib-2.2.2.jar lib/commons-logging-1.1.1.jar lib/javassist-3.17.1-GA.jar lib/log4j-1.2.17.jar lib/slf4j-api-1.7.2.jar lib/slf4j-log4j12-1.7.2.jar
3.2 项目的目录结构
src\com\clzhang\sample\struts2\mapper MemberUserMapper.java mybatis的mapper处理类src\com\clzhang\sample\struts2\mapper\entity MemberUserBean.java mybatis的entity类src\com\clzhang\sample\struts2\test MyBatisTest.java 测试类,最终应该是在service的package中调用mapper中的方法。resources\config mybatis-config.xml mybatis的配置文件 resources\com\clzhang\sample\struts2\mapper MemberUserMapper.xml mybatis的mapper配置文件
3.3 假定数据库已经创建,表结构也已经创建,并且有测试数据
这里数据库为Oracle,表名:MEMBER_USER,数据结构如下(假设已经存在测试数据):
CREATE TABLE MEMBER_USER (ID NUMBER NOT NULL PRIMARY KEY,NAME VARCHAR2(30),PERSONMOBILE VARCHAR2(20),ADDRESS VARCHAR2(255),AGE NUMBER);
4. 具体步骤
4.1 创建entity类
package com.clzhang.sample.struts2.mapper.entity;public class MemberUserBean { private int id; private String name; private String personMobile; private String address; 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 getPersonMobile() { return personMobile; } public void setPersonMobile(String personMobile) { this.personMobile = personMobile; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }}
4.2 创建mapper类
package com.clzhang.sample.struts2.mapper;import com.clzhang.sample.struts2.mapper.entity.MemberUserBean;public interface MemberUserMapper { public void insertUser(MemberUserBean user); public MemberUserBean getUser(int id); }
4.3 创建mybatis-config.xml的配置文件,位置于resources/config目录
4.4 创建MemberUserMapper.xml配置文件,位置于:resources\com\clzhang\sample\struts2\mapper\
INSERT INTO MEMBER_USER (ID, NAME, PERSONMOBILE, ADDRESS) VALUES(#{id}, #{name}, #{personMobile}, #{address})
4.5 创建测试类
package com.clzhang.sample.struts2.test;import java.io.IOException;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.Test;import com.clzhang.sample.struts2.mapper.MemberUserMapper;import com.clzhang.sample.struts2.mapper.entity.MemberUserBean;/** * mybatis的测试类,真正的应用,应该在service包中调用。 * @author Administrator * */public class MyBatisTest { private static final String MYBATIS_CONFIG_FILENAME = "config/mybatis-config.xml"; private static SqlSessionFactory sqlSessionFactory; static { Reader reader = null; try { reader = Resources.getResourceAsReader(MYBATIS_CONFIG_FILENAME); } catch (IOException e) { System.out.println(e.getMessage()); } // 一旦你创建了 SqlSessionFactory 后,SqlSessionFactoryBuilder这个类就不需要存在了。 sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } /** * SqlSessionFactory 应该在你的应用执行期间都存在。没有理由来处理或重新创建它。 * @return */ public static SqlSessionFactory getSqlSessionFactory() { return sqlSessionFactory; }// @Test public void testAdd() { // SqlSession 的实例不能被共享,也是线程不安全的。因此最佳的范围是请求或方法范围。 SqlSession sqlSession = getSqlSessionFactory().openSession(); try { // 从技术上来说,当被请求时,任意映射器实例的最宽范围和 SqlSession 是相同的。最佳范围是方法范围。 MemberUserMapper mapper = sqlSession .getMapper(MemberUserMapper.class); MemberUserBean memberUser = new MemberUserBean(); memberUser.setId(1003); memberUser.setName("张三"); memberUser.setPersonMobile("18387887878"); memberUser.setAddress("北京丰台某公司"); mapper.insertUser(memberUser); sqlSession.commit(); } finally { sqlSession.close(); } } @Test public void getUser() { SqlSession sqlSession = getSqlSessionFactory().openSession(); try { MemberUserMapper mapper = sqlSession .getMapper(MemberUserMapper.class); MemberUserBean memberUser = mapper.getUser(725); System.out.println("name:" + memberUser.getName() + "\tmobile:" + memberUser.getPersonMobile() + "\taddress:" + memberUser.getAddress()); } finally { sqlSession.close(); } }}
测试输出:
name:吴经理 mobile:13695769533 address:浙江省乐清市北白象金炉工业区