Mybatis开发dao的方法--原始dao篇
下面的SqlSession使用范围 
4.1 SqlSession使用范围 
4.1.1 SqlSessionFactoryBuilder 
通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 
将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。 
在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。 
4.1.2 SqlSessionFactory 
通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。 
将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。 
4.1.3 SqlSession 
SqlSession是一个面向用户(程序员)的接口。 
SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。 
SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。 
SqlSession最佳应用场合在方法体内,定义成局部变量使用。
原始Dao开发Mybatis ResourceDao接口 public interface ResourceDao { int deleteByPrimaryKey(String resourceId); int insert(Resource record); Resource selectByPrimaryKey(String resourceId); int updateByPrimaryKey(Resource record); }
ResourceDao接口实现类 public class ResourceDaoImpl implements ResourceDao { private SqlSessionFactory sqlSessionFactory; public ResourceDaoImpl(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } @Override public int deleteByPrimaryKey(String resourceId) { SqlSession sqlSession = null; int rs = 0; try { sqlSession = sqlSessionFactory.openSession(); rs = sqlSession.delete("com.pingan.hdht.dao.ResourceMapper.deleteByPrimaryKey", resourceId);//第一个参数为命名空间加上statement的id sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } return rs; } @Override public int insert(Resource record) { SqlSession sqlSession = null; int rs = 0; try { sqlSession = sqlSessionFactory.openSession(); rs = sqlSession.insert("com.pingan.hdht.dao.ResourceMapper.insert", record);//第一个参数为命名空间加上statement的id sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } return rs; } @Override public Resource selectByPrimaryKey(String resourceId) { SqlSession sqlSession = null; Resource rs = null; try { sqlSession = sqlSessionFactory.openSession(); rs = sqlSession.selectOne("com.pingan.hdht.dao.ResourceMapper.selectByPrimaryKey", resourceId);//第一个参数为命名空间加上statement的id sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } return rs; } @Override public int updateByPrimaryKey(Resource record) { SqlSession sqlSession = null; int rs = 0; try { sqlSession = sqlSessionFactory.openSession(); rs = sqlSession.update("com.pingan.hdht.dao.ResourceMapper.insert", record);//第一个参数为命名空间加上statement的id sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); } finally { if (sqlSession != null) { sqlSession.close(); } } return rs; }
测试实例就以根据主键查询为实例来介绍,其他增删改类似
public class ResourceDaoImplTest { private static SqlSessionFactory sqlSessionFactory = null; /** * <p> * 行为描述: * 状态转变: * 定义的算法: * 操作系统/硬件依赖: * 允许的实现变化: * 安全约束: * </p> * @param * @return * @throws * @see * @since %I% */ @BeforeClass public static void setUpBeforeClass() throws Exception { //mybatis配置文件 String resource = "SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); //创建会话工厂,传递mybatis的配置文件信息 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testSelectByPrimaryKey() { ResourceDao resourceDao = new ResourceDaoImpl(sqlSessionFactory); Resource resource = resourceDao.selectByPrimaryKey("1"); System.out.println(resource.getResourceDesc()); } }
运行结果如下  
以上就是Mybatis开发dao的方法–原始dao开发的方式
下面我们用mybatis的最新实现方式 ----------Mybatis开发的dao方法-Mapper代理
代码以及实现 Mapper代理的方式有一定的规范需要遵守 我们的*Mapper.xml中的namespace要配置为ResourceMapper.java的全限定名如下: ResourceMapper.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="com.pingan.hdht.dao.ResourceMapper" > <resultMap id="BaseResultMap" type="com.pingan.hdht.model.Resource" > <id column="RESOURCE_ID" property="resourceId" jdbcType="VARCHAR" /> <result column="RESOURCE_TYPE" property="resourceType" jdbcType="VARCHAR" /> <result column="RESOURCE_NAME" property="resourceName" jdbcType="VARCHAR" /> <result column="RESOURCE_DESC" property="resourceDesc" jdbcType="VARCHAR" /> <result column="RESOURCE_PATH" property="resourcePath" jdbcType="VARCHAR" /> <result column="ENABLE" property="enable" jdbcType="SMALLINT" /> <result column="PARENT_ID" property="parentId" jdbcType="VARCHAR" /> </resultMap> <sql id="Base_Column_List" > RESOURCE_ID, RESOURCE_TYPE, RESOURCE_NAME, RESOURCE_DESC, RESOURCE_PATH, ENABLE, PARENT_ID </sql> <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > select <include refid="Base_Column_List" /> from SHHD_RESOURCES where RESOURCE_ID = #{resourceId,jdbcType=VARCHAR} </select> </mapper>
ResourceMapper public interface ResourceMapper { Resource selectByPrimaryKey(String resourceId); }
SqlMapConfig.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> <!-- 和spring整合后 environments配置将废除--> <environments default="development"> <environment id="development"> <!-- 使用jdbc事务管理,事务由mybatis管理 --> <transactionManager type="JDBC" /> <!-- 数据库连接池,由mybatis管理 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://10.20.22.211:3306/activity" /> <property name="username" value="root" /> <property name="password" value="mysql123" /> </dataSource> </environment> </environments> <!--加载映射文件 --> <mappers> <mapper resource="sqlmap/ResourceMapper.xml"/> </mappers> </configuration>
单元测试类 package com.pingan.hdht.dao; 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; import org.junit.BeforeClass; import org.junit.Test; import com.pingan.hdht.model.Resource; /** * <p> * 概要信息: * 状态信息: * 操作系统/硬件依赖/应用时可能存在的差异: * 安全约束: * 序列化格式: * 参考的外部规格说明: * </p> * * <p> * 版权: ©2016 中国平安保险(集团)股份有限公司 版权所有 * </p> * * @author gaoyunqi745 * @version %I%, %G% */ public class ResourceDaoImplTest { private static SqlSessionFactory sqlSessionFactory = null; /** * <p> * 行为描述: * 状态转变: * 定义的算法: * 操作系统/硬件依赖: * 允许的实现变化: * 安全约束: * </p> * @param * @return * @throws * @see * @since %I% */ @BeforeClass public static void setUpBeforeClass() throws Exception { //mybatis配置文件 String resource = "SqlMapConfig.xml"; //得到配置文件流 InputStream inputStream = Resources.getResourceAsStream(resource); //创建会话工厂,传递mybatis的配置文件信息 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void testMapperSelectByPrimaryKey() { SqlSession sqlSession = sqlSessionFactory.openSession(); ResourceMapper resourceMapper = sqlSession.getMapper(ResourceMapper.class); Resource resource = resourceMapper.selectByPrimaryKey("1"); System.out.println(resource.getResourceDesc()); } }
运行效果 
                    
                
                
            
        
浙公网安备 33010602011771号