MyBatis简单实例

一、简介

MyBatis是支持定制化SQL、存储过程以及高级映射的优秀持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJO(Plain Old Java Object,普通的java对象)映射成数据库的记录。

二、入门

要使用MyBatis,只需要将mybatis-x.x.x.jar文件置于classpath中即可
如果使用的是Maven来构建项目,则需要在pom.xml文件中引入MyBatis的依赖
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>x.x.x</version>
</dependency>
此外还需要数据库驱动,这里以oracle数据库为例。
<!-- oracle驱动 -->
   	<dependency>
		<groupId>com.oracle</groupId>
		<artifactId>ojdbc6</artifactId>
		<version>11.2.0</version>
	</dependency>

、实例

在此先给出具体实例,具体细节后续再讨论

1、创建以Maven管理的javaWeb项目,项目结构如下

2、创建数据库表和实体类


实体
/**
 * 管理员对象
 * 
 * @author zqx
 *
 */
public class Admin implements Serializable {

	private static final long serialVersionUID = -8690258368771118331L;

	private Integer id;
	/* 登录名称 */
	private String loginName;
	private String password;
	/* 用户名称 */
	private String userName;
	private String status;
	private Date createDate;
	private Date lastLoginDate;

	public Admin() {
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getLoginName() {
		return loginName;
	}

	public void setLoginName(String loginName) {
		this.loginName = loginName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

	public Date getLastLoginDate() {
		return lastLoginDate;
	}

	public void setLastLoginDate(Date lastLoginDate) {
		this.lastLoginDate = lastLoginDate;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	@Override
	public String toString() {
		return "Admin [id=" + id + ", loginName=" + loginName + ", password=" + password + ", userName=" + userName
				+ ", status=" + status + ", createDate=" + createDate + ", lastLoginDate=" + lastLoginDate + "]";
	}

}

3、MyBatis的配置文件

<?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="oracle.jdbc.driver.OracleDriver" />  
			<property name="url" value="jdbc:oracle:thin:@192.168.8.104:1521:orcl" />  
			<property name="username" value="wr_push" />  
			<property name="password" value="wr_push" />  
		    </dataSource>  
		</environment>  
	    </environments>  
	      
	    <!-- mapping 文件路径配置 -->  
	    <mappers>  
		<mapper resource="data/adminMapper.xml" />  
	    </mappers>  
	</configuration>

4、Mapper映射文件

<?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="data.mapping.adminMapper">

	<resultMap type="com.batis.po.Admin" id="AdminResultMap">
		<id property="id" column="ID" />
		<result property="loginName" column="LOGIN_NAME" />
		<result property="password" column="PASSWORD" />
		<result property="userName" column="USER_NAME" />
		<result property="status" column="STATUS" />
		<result property="createDate" column="CREATE_DATE" />
		<result property="lastLoginDate" column="LAST_LOGIN_DATE" />
	</resultMap>
	

	<!-- 查询管理员,根据id -->
	<select id="getAdminByID" parameterType="Integer"
		resultMap="AdminResultMap">  
		<![CDATA[ 
		    SELECT * from ADMIN a 
			WHERE a.ID = #{ID}  
		]]>
	</select>

	<!-- 查询管理员列表 -->
	<select id="getAdmin"
		resultMap="AdminResultMap">  
		<![CDATA[ 
		    SELECT * from ADMIN 
		]]>
	</select>
	
	<!-- 增加管理员 -->
	<insert id="addAdmin" parameterType="com.batis.po.Admin">
		<![CDATA[ 
		    insert into ADMIN(ID,LOGIN_NAME,PASSWORD,USER_NAME,STATUS) values (#{id},#{loginName},#{password},#{userName},#{status})
		]]>
	</insert>
	<insert id="addAdminAuto" parameterType="admin">
		<selectKey resultType="long" order="BEFORE" keyProperty="id">
			SELECT SEQ_ADMIN_ID.NEXTVAL FROM DUAL
		</selectKey>
		<![CDATA[
			insert
			into ADMIN(
			ID,
			USER_NAME,
			LOGIN_NAME,
			PASSWORD,
			STATUS,
			CREATE_DATE)
			values
			(
			#{id:NUMERIC},
			#{userName},
			#{loginName},
			#{password},
			#{status},
			#{createDate})
		]]>
	</insert>
	<!-- 更新管理员 -->
	<update id="updateAdmin" parameterType="com.batis.po.Admin">
		<![CDATA[
			update ADMIN set USER_NAME = #{userName},LOGIN_NAME = #{loginName} where ID = #{id}
		]]>
	</update>
	<delete id="deleteAdmin">
		<![CDATA[
			delete from ADMIN where id = #{id}
		]]>
	</delete>
</mapper> 


5、Test类

这里测试类的只是测试基本功能,有很多可以优化和重构的地方,这里先不讨论,后续将会给出配合spring的使用的具体实例
</pre><pre name="code" class="java">/**
 * 
 */
package com.batis.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 com.batis.po.Admin;

/**
 * 测试类
 * 
 * @author zqx
 *
 */
public class BatisCRUDTest {
	public static void main(String[] args) throws IOException {
		//insert();
		//getByID(100);
		//update();
		delete();
	}

	/**
	 * 获取SqlSession
	 * 
	 */
	public static SqlSession getSqlSession(String resource) throws IOException {
		// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xml
		resource = "mybatis-config.xml";
		// 使用MyBatis提供的Resources类加载mybatis的配置文件(也加载关联的映射文件)
		Reader reader = Resources.getResourceAsReader(resource);
		// 构建sqlSession的工厂
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		// 构建能执行映射文件中sql语句的sqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
		return sqlSession;
	}

	/**
	 * 根据ID查询管理员
	 */
	public static Admin getByID(int id) throws IOException {
		// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xml
		String resource = "mybatis-config.xml";
		//获取SqlSession
		SqlSession sqlSession = getSqlSession(resource);
		/*
		 * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping.
		 * adminMapper是adminMapper文件中的mapper标签的namespace属性的值
		 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
		 */
		String statement = "data.mapping.adminMapper.getAdminByID";
		Admin admin = sqlSession.selectOne(statement, id);
		System.out.println(admin);
		return admin;
	}

	/**
	 * 添加管理员
	 * 
	 */
	public static void insert() throws IOException {
		// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xml
		String resource = "mybatis-config.xml";
		//获取SqlSession
		SqlSession sqlSession = getSqlSession(resource);
		/*
		 * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping.
		 * adminMapper是adminMapper文件中的mapper标签的namespace属性的值
		 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
		 */
		String statement = "data.mapping.adminMapper.addAdmin";
		Admin admin = new Admin();
		admin.setId(100);
		admin.setLoginName("zhangshu");
		admin.setUserName("zhangshu");
		admin.setPassword("zhangshu");
		admin.setStatus("1");
		int row = sqlSession.insert(statement, admin);
		// 手动提交事务
		sqlSession.commit();
		// 使用sqlSession执行完SQL语句之后需要关闭SqlSession
		sqlSession.close();
		System.out.println(row);
	}

	/**
	 * 更新管理员
	 */
	public static void update() throws IOException {
		// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xml
		String resource = "mybatis-config.xml";
		//获取SqlSession
		SqlSession sqlSession = getSqlSession(resource);
		/*
		 * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping.
		 * adminMapper是adminMapper文件中的mapper标签的namespace属性的值
		 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
		 */
		String statement = "data.mapping.adminMapper.updateAdmin";
		Admin admin = getByID(100);
		admin.setLoginName("zhangqingxiang");
		admin.setUserName("zhangqingxiang");
		int result = sqlSession.update(statement, admin);
		sqlSession.commit();
		sqlSession.close();
		System.out.println(result);
	}

	/**
	 * 删除管理员
	 */
	public static void delete() throws IOException {
		// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xml
		String resource = "mybatis-config.xml";
		//获取SqlSession
		SqlSession sqlSession = getSqlSession(resource);
		/*
		 * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping.
		 * adminMapper是adminMapper文件中的mapper标签的namespace属性的值
		 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
		 */
		String statement = "data.mapping.adminMapper.deleteAdmin";
		int result = sqlSession.delete(statement, 100);
		sqlSession.commit();
		sqlSession.close();
		System.out.println(result);
	}
}


猜你喜欢

转载自blog.csdn.net/biedazhangshu/article/details/50895521