天天看点

mybatis开发步骤

mybatis开发步骤

  1. 新建一个java web工程/可以使java工程;新建mybatis工程的java package包
  2. 把mybatis框架的jar包及其依赖包拷贝到项目工程中
  3. 编写数据实体类,与数据库表进行对应 - 为orm(对象映射关系)做准备
  4. .定义数据操作接口,并在接口中定义数据操作
  5. 编写一个接口映射文件,对接口的数据操作进行映射
  6. 编写mybatis全局配置文件,配置数据库连接参数,配置映射文件或数据操作接口...
  7. 编写测试类,测试mybatis框架:4个步骤(获取mybatis环境 --> 实例化数据操作接口 --> 调用接口方法 --> 处理操作结果)

使用mybatis框架的几个阶段

  •     1.基本应用:(熟练掌握)
  •         使用mybatis完成jdbc的增删查改操作,能够进行对象映射和关系映射  
  •         开发步骤,工作流程,工作原理,基本操作
  •     2.熟练应用:(熟悉应用)
  •         使用mybatis简化程序开发,进行复杂业务的开发
  •         配置优化,动态sql,其他复杂的映射
  •     3.优化应用:(了解)
  •         利用orm框架的缓存机制优化程序性能,对某些复杂业务能够进行定制开发 

框架架构

mybatis开发步骤
mybatis开发步骤

全局配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是mybatis全局配置文件,用于进行mybatis配置 -->
<!-- dtd:文档类型定义,使用全局文档类型定义约束,可以配置哪些标签,每个标签可以配置哪些属性 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置mybatis的运行环境 -->
	<environments default="development">
		<environment id="development">
	      <!-- 配置事务管理器  -->
	      <transactionManager type="JDBC"/>
	      <!-- 配置jdbc的4个参数 -->
	      <dataSource type="POOLED">
	        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
	        <property name="url" value="jdbc:oracle:thin://localhost:1521/orcl"/>
	        <property name="username" value="trainUser"/>
	        <property name="password" value="123456"/>
	      </dataSource>
	    </environment>
	</environments>
	
	<mappers>
		<!-- 关联mybatis的接口映射文件 -->
		<mapper resource="com/neuedu/mybatisdemo/dao/ICourceDao.xml"/>
	</mappers>
</configuration>
           

局部配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- mybatis接口映射文件,用于映射接口操作,
	mybatis会根据配置文件的配置实现数据库的操作 -->
<!-- 注意:mybatis有两个配置文件,一个是全局配置文件,一个接口映射文件
	接口映射文件需要使用接口文档映射定义 -->
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<!-- 
在mapper映射文件中,使用mapper便签进行接口映射,使用namespace指定要映射的接口;
即namespace配置的是接口的名称,一般的一个映射文件实现(映射)一个接口,
在运行过程中,mybatis的代理类公会根据配置实现数据操作接口定义的数据库操作(相当于由mybatis编写了一个接口实现类)
-->
<mapper namespace="com.neuedu.mybatisdemo.dao.ICourceDao">
	<!-- resultMap用于配置查询结果的映射关系 -->
	<resultMap type="com.neuedu.mybatisdemo.bean.Cource" id="courceMap">
		<!-- id用于配置数据库的主键列或唯一键列 -->
		<!-- orm框架可以完成数据库表的列与java类属性的映射关系 
			 - object mapping对象映射,relation mapping关系映射 -->
		<id column="cource_id" property="courceId"/>
		<result column="cource_name" property="courceName"/>
		<result column="cource_score" property="courceScore"/>
		<result column="start_date" property="startDate"/>
	</resultMap>
	<!-- 在接口映射文件中,使用select,insert,update,delete配置对应的sql脚本 -->
	<!-- 在以上标签中,使用id配置接口的方法名称,resultMap用于配置自定义的结果映射关系 -->
	<select id="findAll" resultMap="courceMap">
		select * from cource
	</select>
	<!-- 注意使用mybatis进行配置,id不能重名,即接口方法不能重载 -->
	<!-- 如果接口方法有参数,需要使用parameterType配置参数的类型(原始数据类型或对象类型),
		多个参数使用parameterMap进行配置(集合类型) 或 使用对象类型进行配置 -->
	<select id="findById" resultMap="courceMap" parameterType="String">
		<!-- 可以使用#{} 获取参数值 -->
		select * from cource where cource_id = #{id}
	</select>
	<insert id="addCource" parameterType="com.neuedu.mybatisdemo.bean.Cource" >
		insert into cource(cource_id,cource_name,cource_score,start_date) 
		values(#{courceId},#{courceName},#{courceScore},sysdate)
	</insert>
	<update id="editCource" parameterType="com.neuedu.mybatisdemo.bean.Cource">
		update cource set 
		cource_name = #{courceName},cource_score = #{courceScore},start_date = sysdate
		where cource_id = #{courceId}
	</update>
	<!-- 某些情况下,parameterType可以省略 -->
	<delete id="deleteById" parameterType="String">
		<!-- 只有一个参数时,参数名称可以任意
		public void deleteById(String id);
		 -->
		delete from cource where cource_id = #{id}
	</delete>
</mapper>
           

测试类

package test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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.apache.log4j.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.neuedu.mybatisdemo.bean.Cource;
import com.neuedu.mybatisdemo.dao.ICourceDao;

public class TestICourceDao {

	private Logger logger = Logger.getLogger(TestICourceDao.class);
	private SqlSession session = null;
	
	@Before
	public void init(){
		try {
			//1.加载mybatis环境
			String resource = "config/mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			//2.通过mybatis实例化数据访问接口
			session = sqlSessionFactory.openSession();
			
		} catch (IOException e) {
			logger.warn("发生了异常!",e);
		}	
	}
	@After
	public void destroy(){
		if(session != null){
			session.close();
		}
	}
	
	
	public void testDeleteCource(){
		Cource cource = null;
		cource = session.selectOne("com.neuedu.mybatisdemo.dao.ICourceDao.findById","cource003");
		if(cource != null){
			try {
				session.getMapper(ICourceDao.class).deleteById(cource.getCourceId());
				session.commit();
				logger.info("删除课程成功!");
			} catch (Exception e) {
				logger.info("删除课程失败!",e);
			}
		}else{
			logger.info("要删除的课程不存在!");
		}
	}
	@Test
	public void testEditCource(){
		Cource cource = null;
		cource = session.selectOne("com.neuedu.mybatisdemo.dao.ICourceDao.findById","cource003");
		if(cource != null){
			cource.setCourceName("html+css基础知识");
			try {
				session.getMapper(ICourceDao.class).editCource(cource);
				session.commit();
				logger.info("修改课程成功!");
			} catch (Exception e) {
				//session.rollback();
				logger.info("修改课程失败!",e);
			}
		}else{
			logger.info("要修改的课程不存在!");
		}
	}
	
	public void testAddCource(){
		//Cource cource = new Cource("cource002","mybatis实战",4,null);
		Cource cource = new Cource("cource003","html5+css3基础知识",4,null);
		try {
			session.getMapper(ICourceDao.class).addCource(cource);
			//使用jdbc事务
			session.commit();
			logger.info("新增课程成功!");
		} catch (Exception e) {
			//session.rollback();
			logger.info("新增课程失败!",e);
		}
		
	}
	public void testFind(){
		List<Cource> list = session.getMapper(ICourceDao.class).findAll();
		for(Cource cource : list){
			logger.info(
					cource.getCourceId() + cource.getCourceName() 
					+ cource.getCourceScore() + cource.getStartDate());
		}
	}
	public void testFindAll(){ //测试方法一
		try {
			//1.加载mybatis环境
			String resource = "config/mybatis-config.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			
			//2.通过mybatis实例化数据访问接口
			SqlSession session = sqlSessionFactory.openSession();
			//ICourceDao courceDao = session.getMapper(ICourceDao.class);
			
			//3.调用数据访问接口,进行数据操作
			/*List<Cource> list = courceDao.findAll();*/
			//Cource cource = courceDao.findById("couce001");
			
			Cource cource = null;
			//方法1 - 通过mybatis session先获取mybatis映射接口,再调用接口的方法进行查询
			//cource = session.getMapper(ICourceDao.class).findById("couce001");
			//List<Cource> list = session.getMapper(ICourceDao.class).findAll();
			
			//方法2 - 直接使用mybatis session调用直接接口和方法,并进行参数传递
			cource = session.selectOne("com.neuedu.mybatisdemo.dao.ICourceDao.findById","couce001");
			//List<Cource> list = session.selectList("com.neuedu.mybatisdemo.dao.ICourceDao.findAll");
			
			//4.处理数据操作的结果
			/*for(Cource cource : list){
				logger.info(
						cource.getCourceId() + cource.getCourceName() 
						+ cource.getCourceScore() + cource.getStartDate());
			}*/
			
			if(cource != null){
				logger.info(
						cource.getCourceId() + cource.getCourceName() 
						+ cource.getCourceScore() + cource.getStartDate());
			}else{
				logger.info("没有找到该课程信息!");
			}
			
		} catch (IOException e) {
			logger.warn("发生异常!",e);
		}	
	}
}
           

继续阅读