您的位置:首页 > 其它

mybatis 学习4

2016-06-07 09:13 232 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

package com.zxh.customer.daogeneric;

import
Java.io.Serializable;

import java.util.List;

import java.util.Map;

public interface IBaseDao<T extends Serializable> {

 

 /**

  * 获取单条记录

  * @param map

  * @return

  */

 public T selectOne(String sqlId, T entity);

 

 /**

  * 获取记录列表

  * @param map

  * @return

  */

 public List<T> selectList(String sqlId, T entity);

 

 /**

  * 插入一条记录

  * @param map

  */

 public void insert(String sqlId, T entity);

 

 /**

  * 更新记录

  */

 public void update(String sqlId, T entity);

 

 /**

  * 删除记录

  * @param map

  */

 public void delete(String sqlId, T entity);

 

 /**

  * 调用存储过程   还是传参数map吧,无需实体类

  * @param map

  */

 public void callProcedure(String sqlId, Map map);

 

 

}

 

 

 

 

package com.zxh.customer.daogeneric;

import java.io.Serializable;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.session.SqlSession;

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

/**

 * 通用DAO 减少代码量,服务层只需构造map参数 sqlId 为映射sql的id 增删改 要提交事务

 *

 * @author zhangxiaohong

 *

 */

public class BaseDaoImpl<T extends Serializable> implements IBaseDao<T> {

 public T selectOne(String sqlId, T entity) {

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

  T object;

  try {

   object = session.selectOne(sqlId, entity);

  } finally {

   session.close();

  }

  return object;

 }

 public List<T> selectList(String sqlId, T entity) {

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

  List<T> objList;

  try {

   objList = session.selectList(sqlId, entity);

  } finally {

   session.close();

  }

  return objList;

 }

 public void insert(String sqlId, T entity) {

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

  try {

   session.insert(sqlId, entity);

   session.commit();

  } finally {

   session.close();

  }

 }

 public void update(String sqlId, T entity) {

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

  try {

   session.update(sqlId, entity);

   session.commit();

  } finally {

   session.close();

  }

 }

 public void delete(String sqlId, T entity) {

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

  try {

   session.delete(sqlId, entity);

   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();

  }

 }

}

 

 

 

package com.zxh.customer.daogeneric;

import com.zxh.customer.testbasegeneric.bean.User;

public interface IUserDao extends IBaseDao<User>{

}

 

 

package com.zxh.customer.daogeneric;

import com.zxh.customer.testbasegeneric.bean.User;

public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {

 

}

 

 

 

 

 

package com.zxh.customer.testbasegeneric.bean;

public class Parter {

 private Long partyId;

 

 private String partyName;

 public Long getPartyId() {

  return partyId;

 }

 public void setPartyId(Long partyId) {

  this.partyId = partyId;

 }

 public String getPartyName() {

  return partyName;

 }

 public void setPartyName(String partyName) {

  this.partyName = partyName;

 }

  

 

}

 

 

package com.zxh.customer.testbasegeneric.bean;

import java.io.Serializable;

public class User implements Serializable {

 private Long custId;

 private String custName;

 

 public Parter getParter() {

  return parter;

 }

 public void setParter(Parter parter) {

  this.parter = parter;

 }

 private Parter parter;

 public Long getCustId() {

  return custId;

 }

 public void setCustId(Long custId) {

  this.custId = custId;

 }

 public String getCustName() {

  return custName;

 }

 public void setCustName(String custName) {

  this.custName = custName;

 }

}

 

 

 

 

<?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.parter">

 

 <resultMap type="Parter" id="resultParter">

  <id column="PARTY_ID" property="partyId" />

  <result column="PARTY_NAME" property="partyName" />

 </resultMap>

 

</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="com.zxh.customer.testbasegeneric">

 <resultMap type="User" id="resultUser">

  <id column="CUST_ID" property="custId" />

  <result column="CUST_NAME" property="custName" />

  <association property="parter" resultMap="com.zxh.parter.resultParter" />

 </resultMap>

 <select id="selectUserById" parameterType="User" resultType="User">

  SELECT CUST_ID as "custId", CUST_NAME "custName" FROM CUST WHERE

  CUST_ID = #{custId}

 </select>

 <select id="selectUsers" parameterType="User" resultMap="resultUser">

  SELECT

  CUST_ID, CUST_NAME FROM CUST WHERE

  CUST_NAME like #{custName}

 </select>

 <!-- 尝试懒加载   注意select语句两个表连接起来别且选择的列包括关联表的内容,否则不会取出关联对象的内容    才能设置lazyLoadingEnabled懒加载和即时加载 -->

 <!-- 多对一情况下   resultMap在设置association属性select 出现懒加载情况  -->

 <!-- 解决n+1问题, 使用sql表连接来解决此问题  -->

 <select id="selectUserLazyLoad" parameterType="User" resultMap="resultUser">

  SELECT CUST_ID, CUST_NAME, P.PARTY_NAME FROM CUST C, PARTY P WHERE

  C.PARTY_ID = P.PARTY_ID AND

  C.CUST_ID = #{custId}

 </select>

 <select id="selectUserLazyLoad11" parameterType="User" resultMap="resultUser">

  SELECT * FROM CUST C, PARTY P WHERE C.PARTY_ID = P.PARTY_ID AND

  C.CUST_ID = #{custId}

 </select>

 

</mapper> 

 

 

 

 

package com.zxh.customer.testbasegeneric.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("config_a/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>

 <!-- 属性配置 xml文件中使用 ${} url "/"路径-文件 或 "."-java类文件 -->

 <properties resource="config_a/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="aggressiveLazyLoading" value="true"/>   

  <!-- 允许或不允许多种结果集从一个单独 的语句中返回(需要适合的驱动) 不用考虑 -->

  <setting name="multipleResultSetsEnabled" value="true" />

  <!-- 使用列标签代替列名。 不同的驱动在这 方便表现不同 不用考虑 -->

  <setting name="useColumnLabel" value="true" />

  <!-- 允许 JDBC 支持生成的键。 需要适合的 驱动。 如果设置为 true 则这个设置强制 生成的键被使用 -->

  <setting name="useGeneratedKeys" value="false" />

  <!-- 等等 -->

 </settings>

 <!-- 定义类别名,简化xml文件的配置 -->

 <typeAliases>

  <typeAlias type="com.zxh.customer.testbasegeneric.bean.User" alias="User" />

  <typeAlias type="com.zxh.customer.testbasegeneric.bean.Parter" alias="Parter" />

 </typeAliases>

 <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/testbasegeneric/bean/User.xml" />

  <mapper resource="com/zxh/customer/testbasegeneric/bean/Parter.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.testbasegeneric.test;

import java.util.List;

import com.zxh.customer.daogeneric.IUserDao;

import com.zxh.customer.daogeneric.UserDaoImpl;

import com.zxh.customer.testbasegeneric.bean.User;

 

public class Test {

 

 public static void main(String[] args) {

  // 基本查询

  IUserDao userDao = new UserDaoImpl();

 

  User user = new User();

  user.setCustId(604763L); 

  User resultUser = userDao.selectOne("com.zxh.customer.testbasegeneric.selectUserLazyLoad11", user);

  

  /**

   * 尝试懒加载   注意select语句两个表连接起来别且选择的列包括关联表的内容,否则不会取出关联对象的内容    才能使用懒加载和即时加载

   */

  System.out.println(resultUser.getParter());

  

  System.out.println("成功!");

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis