现在的位置: 首页 > 综合 > 正文

mybatis 学习3

2018年05月21日 ⁄ 综合 ⁄ 共 7888字 ⁄ 字号 评论关闭

package com.zxh.customer.testmap.dao;

import java.util.List;
import java.util.Map;

public interface IBaseDao {
 
 /**
  * 获取单条记录
  * @param map
  * @return
  */
 public Map selectOne(String sqlId, Map map);
 
 /**
  * 获取记录列表
  * @param map
  * @return
  */
 public List selectList(String sqlId, Map map);
 
 /**
  * 插入一条记录
  * @param map
  */
 public void insert(String sqlId, Map map);
 
 /**
  * 更新记录
  */
 public void update(String sqlId, Map map);
 
 /**
  * 删除记录
  * @param map
  */
 public void delete(String sqlId, Map map);
 
 /**
  * 调用存储过程
  * @param map
  */
 public void callProcedure(String sqlId, Map map);
 
 

}

 

 

 

 

package com.zxh.customer.testmap.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;

import com.zxh.customer.testmap.util.MybatisUtil;

/**
 * 通用DAO 减少代码量,服务层只需构造map参数 sqlId 为映射sql的id 增删改 要提交事务
 *
 * @author zhangxiaohong
 *
 */
public class BaseDaoImpl implements IBaseDao {

 public Map selectOne(String sqlId, Map map) {

  SqlSession session = MybatisUtil.getSessionFactory().openSession();
  Map resultMap;

  try {
   resultMap = session.selectOne(sqlId, map);
  } finally {
   session.close();
  }
  return resultMap;
 }

 public List selectList(String sqlId, Map map) {

  SqlSession session = MybatisUtil.getSessionFactory().openSession();
  List resultList;

  try {
   resultList = session.selectList(sqlId, map);
  } finally {
   session.close();
  }
  return resultList;
 }

 public void insert(String sqlId, Map map) {

  SqlSession session = MybatisUtil.getSessionFactory().openSession();

  try {
   session.insert(sqlId, map);
   session.commit();
  } finally {
   session.close();
  }
 }

 public void update(String sqlId, Map map) {

  SqlSession session = MybatisUtil.getSessionFactory().openSession();

  try {
   session.update(sqlId, map);
   session.commit();
  } finally {
   session.close();
  }
 }

 public void delete(String sqlId, Map map) {

  SqlSession session = MybatisUtil.getSessionFactory().openSession();

  try {
   session.delete(sqlId, map);
   session.commit();
  } finally {
   session.close();
  }
 }

 public void callProcedure(String sqlId, Map map) {

  SqlSession session = MybatisUtil.getSessionFactory().openSession();

  try {
   session.selectOne(sqlId, map);
  } finally {
   session.close();
  }
 }

}

 

 

 

 

<?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.zxh.customer.testmap">
 
  <!-- mybatis3 统一用parameterType 传入map时 parameterType可以省略  -->
  <!-- resultType="java.util.HashMap" HashMap 使用Map就无需创建实体类了,#参数和map的key相同, 这样很方面,但是对于面向对象编程,就不能表现出领域模型 -->
 <select id="selectUserById" parameterType="HashMap" resultType="HashMap">
  SELECT CUST_ID, CUST_NAME AS "custName" FROM CUST WHERE
  CUST_ID = #{custId}
 </select>
 
 <!-- 当返回list时  resultType指定list元素的类型 -->
 <select id="selectUsersByName" parameterType="HashMap" resultType="HashMap">
  SELECT CUST_ID, CUST_NAME AS "custName" FROM CUST WHERE
  CUST_NAME like #{custName}
 </select>
 
 <!-- 增加 -->
 <!-- useGeneratedKeys 获取由数据库自动生成的主键 keyProperty 获取的主键注入到此属性中 支持主键自动增长的数据库 -->
 <insert id="saveUser" parameterType="HashMap">
  insert into cust(cust_id,
  cust_name) values(seq_cust.nextval, #{custName})
 </insert>

 <!-- 更新 -->
 <update id="updateUserById" parameterType="HashMap">
  update cust set cust_name = #{custName} where cust_id = #{custId}
 </update>

 <!-- 删除 -->
 <delete id="deleteUserById" parameterType="HashMap">
  delete from cust where
  cust_id = #{custId}
 </delete>
 
 <!-- 调用存储过程     arg3直接在传入的map使用,可以在程序中直接获取  -->
 <select id="callProcedure" statementType="CALLABLE"
  parameterType="java.util.HashMap">
 CALL P_QUERY_ORDER_TACHE_DETAIL_NUM(#{arg0,
 mode=IN,
 jdbcType=VARCHAR},
 #{arg1, mode=IN, jdbcType=VARCHAR},
 #{arg2,
 mode=IN, jdbcType=VARCHAR},
 #{arg3, mode=OUT,
 jdbcType=VARCHAR})
 </select>
 
</mapper> 

 

 

 

 

package com.zxh.customer.testmap.util;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisUtil {
 
 private static SqlSessionFactory sqlSessionFactory;
 private static Reader reader;

 static {
  try {
   reader = Resources.getResourceAsReader("config2/Configuration.xml");
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static SqlSessionFactory getSessionFactory() {
  
  return sqlSessionFactory;
 }

}

 

 

Configuration.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文件   第一次遇到就是此问题导致    
     属性配置 xml文件中使用 ${} url "/"路径-文件 或 "."-java类文件 -->
 <properties resource="config2/jdbc_config.properties">
  <!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@172.16.1.241:1521:jtcrm" />
  <property name="username" value="jtorder" />
  <property name="password" value="jtorder" /> -->
 </properties>

 <!-- 或者 首先读取properties元素内部的子元素的值, 再读取properties配置文件的值 后者覆盖前者 -->
 <!-- <properties resource="config/jdbc.properties"> <property name="driver"
  value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@172.16.1.241:1521:jtcrm"

  /> </properties> -->

 <!-- 设置mybatis3 运行时的行为方式 -->
 <settings>
  <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
  <setting name="defaultStatementTimeout" value="60000" />
  <!-- 启用或禁用 缓存 -->
  <setting name="cacheEnabled" value="false" />
  <!-- 启用或禁用延迟加载。当禁用时, 所有关联对象都会即时加载 -->
  <setting name="lazyLoadingEnabled" value="true" />
  <!-- 允许或不允许多种结果集从一个单独 的语句中返回(需要适合的驱动) 不用考虑 -->
  <setting name="multipleResultSetsEnabled" value="true" />
  <!-- 使用列标签代替列名。 不同的驱动在这 方便表现不同 不用考虑 -->
  <setting name="useColumnLabel" value="true" />
  <!-- 允许 JDBC 支持生成的键。 需要适合的 驱动。 如果设置为 true 则这个设置强制 生成的键被使用 -->
  <setting name="useGeneratedKeys" value="false" />
  <!-- 等等 -->
 </settings>
 
 <environments default="development">
  <environment id="development">
   <transactionManager type="JDBC" />
   <dataSource type="POOLED">
    <property name="driver" value="${driver}" />
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url" value="jdbc:oracle:thin:@172.16.1.241:1521:jtcrm" />
    <property name="username" value="jtorder" />
    <property name="password" value="jtorder" /> -->
   </dataSource>
  </environment>
 </environments>
 
 <!-- SQL映射文件 -->
 <mappers>
  <mapper resource="com/zxh/customer/testmap/model/User.xml" />
 </mappers>

</configuration>

 

 

 

jdbc_config.properties

driver=oracle.jdbc.driver.OracleDriver
url=jdbc\:oracle\:thin\:@172.16.1.241\:1521\:jtcrm
username=jtorder
password=jtorder

 

 

 

 

package com.zxh.customer.testmap.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.zxh.customer.testmap.dao.BaseDaoImpl;
import com.zxh.customer.testmap.dao.IBaseDao;

public class Test {
 

 public static void main(String[] args) {

  // 通用Dao层
  IBaseDao baseDao = new BaseDaoImpl();
   
  // 构造参数  --  注意  sqlId 为映射sql的id值  此key必须存在
//  Map map = new HashMap();
//  map.put("custId", "604763");
//  map.put("sqlId", "com.zxh.customer.testmap.selectUserById");  
//  Map resultMap = baseDao.selectOne(map);
//  System.out.println(resultMap.get("CUST_ID").toString() + resultMap.get("custName"));
  
//  Map map = new HashMap();
//  map.put("custName", "%中国%");
//  map.put("sqlId", "com.zxh.customer.testmap.selectUsersByName");  
//  List resultList = baseDao.selectList(map);
//  System.out.println(resultList.size());
  
//  Map map = new HashMap();
//  map.put("custName", "美国-中国-德国-法国-意大利");
//  map.put("sqlId", "com.zxh.customer.testmap.saveUser");  
//  baseDao.insert(map);
  
//  Map map = new HashMap();
//  map.put("custId", "611746");
//  map.put("custName", "美国-中国-德国-法国-意大利修改");
//  map.put("sqlId", "com.zxh.customer.testmap.updateUserById");  
//  baseDao.update(map);
  
//  Map map = new HashMap();
//  map.put("custId", "611746");
//  map.put("sqlId", "com.zxh.customer.testmap.deleteUserById");  
//  baseDao.delete(map);
 
  Map map = new HashMap();
  map.put("arg0", "1");
  map.put("arg1", "1");
  map.put("arg2", "1"); 
  baseDao.callProcedure("com.zxh.customer.testmap.callProcedure", map);
  System.out.println(map.get("arg3"));
  
  System.out.println("成功!");
 }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【上篇】
【下篇】

抱歉!评论已关闭.