1,用户分页的参数类


[java] 

​view plain​

​copy​


  1. package hwt.Utils;

  2. import java.util.Map;

  3. public class PageEntity {
  4. private Integer page; //目前是第几页
  5. private Integer size; //每页大小
  6. private Map params; //传入的参数
  7. private String orderColumn;
  8. private String orderTurn = "ASC";

  9. public String getOrderColumn() {
  10. return orderColumn;
  11. }
  12. public void setOrderColumn(String orderColumn) {
  13. this.orderColumn = orderColumn;
  14. }
  15. public String getOrderTurn() {
  16. return orderTurn;
  17. }
  18. public void setOrderTurn(String orderTurn) {
  19. this.orderTurn = orderTurn;
  20. }
  21. public Integer getPage() {
  22. return page;
  23. }
  24. public void setPage(Integer page) {
  25. this.page = page;
  26. }
  27. public Integer getSize() {
  28. return size;
  29. }
  30. public void setSize(Integer size) {
  31. this.size = size;
  32. }
  33. public Map getParams() {
  34. return params;
  35. }
  36. public void setParams(Map params) {
  37. this.params = params;
  38. }
  39. }



2,分页结果类


[java] 

​view plain​

​copy​


  1. package hwt.Utils;

  2. import java.util.ArrayList;
  3. import java.util.List;

  4. /**
  5. * 分页结果
  6. * @author hwt
  7. *
  8. */
  9. public class PagingResult<T> {
  10. //当前页
  11. private int currentPage;
  12. //总共记录条数
  13. private int totalSize;
  14. //结果集
  15. private List<T> resultList = new ArrayList<T>();


  16. public int getCurrentPage() {
  17. return currentPage;
  18. }
  19. public void setCurrentPage(int currentPage) {
  20. this.currentPage = currentPage;
  21. }
  22. public int getTotalSize() {
  23. return totalSize;
  24. }
  25. public void setTotalSize(int totalSize) {
  26. this.totalSize = totalSize;
  27. }
  28. public List<T> getResultList() {
  29. return resultList;
  30. }
  31. public void setResultList(List<T> resultList) {
  32. this.resultList = resultList;
  33. }
  34. }



3,BaseDAO接口


[java] 

​view plain​

​copy​


  1. package hwt.DAO;

  2. import hwt.Utils.PageEntity;
  3. import hwt.Utils.PagingResult;

  4. import java.io.Serializable;
  5. import java.util.List;
  6. import java.util.Map;


  7. /**
  8. * baseDAO
  9. * @author hwt
  10. *
  11. */
  12. public interface BaseDAO<T,PK extends Serializable> {

  13. /**
  14. * 新增实体
  15. * @param entity
  16. * @return 影响记录条数
  17. */
  18. public abstract int insert(T entity);

  19. /**
  20. * 修改一个实体对象(UPDATE一条记录)
  21. * @param entity 实体对象
  22. * @return 修改的对象个数,正常情况=1
  23. */
  24. public abstract int update(T entity);

  25. /**
  26. * 修改符合条件的记录
  27. * <p>此方法特别适合于一次性把多条记录的某些字段值设置为新值(定值)的情况,比如修改符合条件的记录的状态字段</p>
  28. * <p>此方法的另一个用途是把一条记录的个别字段的值修改为新值(定值),此时要把条件设置为该记录的主键</p>
  29. * @param param 用于产生SQL的参数值,包括WHERE条件、目标字段和新值等
  30. * @return 修改的记录个数,用于判断修改是否成功
  31. */
  32. public abstract int updateParam(Map param);

  33. /**
  34. * 按主键删除记录
  35. * @param primaryKey 主键对象
  36. * @return 删除的对象个数,正常情况=1
  37. */
  38. public abstract int delete(PK primaryKey);

  39. /**
  40. * 删除符合条件的记录
  41. * <p><strong>此方法一定要慎用,如果条件设置不当,可能会删除有用的记录!</strong></p>
  42. * @param param 用于产生SQL的参数值,包括WHERE条件(其他参数内容不起作用)
  43. * @return
  44. */
  45. public abstract int deleteParam(Map param);

  46. /**
  47. * 清空表,比delete具有更高的效率,而且是从数据库中物理删除(delete是逻辑删除,被删除的记录依然占有空间)
  48. * <p><strong>此方法一定要慎用!</strong></p>
  49. * @return
  50. */
  51. public abstract int truncate();

  52. /**
  53. * 查询整表总记录数
  54. * @return 整表总记录数
  55. */
  56. public abstract int count();

  57. /**
  58. * 查询符合条件的记录数
  59. * @param param 查询条件参数,包括WHERE条件(其他参数内容不起作用)。此参数设置为null,则相当于count()
  60. * @return
  61. */
  62. public abstract int count(Object param);

  63. /**
  64. * 按主键取记录
  65. * @param primaryKey 主键值
  66. * @return 记录实体对象,如果没有符合主键条件的记录,则返回null
  67. */
  68. public abstract T get(PK primaryKey);

  69. /**
  70. * 取全部记录
  71. * @return 全部记录实体对象的List
  72. */
  73. public abstract List<T> select();

  74. /**
  75. * 按条件查询记录
  76. * @param param 查询条件参数,包括WHERE条件、分页条件、排序条件
  77. * @return 符合条件记录的实体对象的List
  78. */
  79. public abstract List<T> selectParam(Map param);

  80. /**
  81. * 按条件查询记录,并处理成分页结果
  82. * @param param 查询条件参数,包括WHERE条件、分页条件、排序条件
  83. * @return PaginationResult对象,包括(符合条件的)总记录数、页实体对象List等
  84. */
  85. public abstract PagingResult<T> selectPagination(PageEntity param);

  86. /**
  87. * 批量插入
  88. * @param list
  89. */
  90. public abstract int insertBatch(final List<T> list);

  91. /**
  92. * 批量修改
  93. * @param list
  94. */
  95. public abstract int updateBatch(final List<T> list);

  96. /**
  97. * 批量删除
  98. * @param list
  99. */
  100. public abstract int deleteBatch(final List<PK> list);
  101. }



4,BaseDAO的实现类


[java] 

​view plain​

​copy​


  1. package hwt.DAO;

  2. import hwt.Utils.PageEntity;
  3. import hwt.Utils.PagingResult;

  4. import java.io.Serializable;
  5. import java.text.SimpleDateFormat;
  6. import java.util.Date;
  7. import java.util.HashMap;
  8. import java.util.List;
  9. import java.util.Map;

  10. import javax.annotation.Resource;

  11. import org.apache.ibatis.mapping.BoundSql;
  12. import org.apache.ibatis.mapping.MappedStatement;
  13. import org.apache.ibatis.session.Configuration;
  14. import org.apache.ibatis.session.RowBounds;
  15. import org.mybatis.spring.SqlSessionTemplate;
  16. import org.mybatis.spring.support.SqlSessionDaoSupport;

  17. /**
  18. * baseDAO的实现基类
  19. *
  20. * @author hwt
  21. *
  22. * @param <T>
  23. * @param <PK>
  24. */
  25. public class BaseDaoImpl<T, PK extends Serializable> extends
  26. SqlSessionDaoSupport implements BaseDAO<T, PK> {
  27. // mapper.xml中的namespace
  28. private String namespace;

  29. // sqlmap.xml定义文件中对应的sqlid
  30. public static final String SQLID_INSERT = "insert";
  31. public static final String SQLID_INSERT_BATCH = "insertBatch";
  32. public static final String SQLID_UPDATE = "update";
  33. public static final String SQLID_UPDATE_PARAM = "updateParam";
  34. public static final String SQLID_UPDATE_BATCH = "updateBatch";
  35. public static final String SQLID_DELETE = "delete";
  36. public static final String SQLID_DELETE_PARAM = "deleteParam";
  37. public static final String SQLID_DELETE_BATCH = "deleteBatch";
  38. public static final String SQLID_TRUNCATE = "truncate";
  39. public static final String SQLID_SELECT = "select";
  40. public static final String SQLID_SELECT_PK = "selectPk";
  41. public static final String SQLID_SELECT_PARAM = "selectParam";
  42. public static final String SQLID_SELECT_FK = "selectFk";
  43. public static final String SQLID_COUNT = "count";
  44. public static final String SQLID_COUNT_PARAM = "countParam";

  45. @Resource(name = "sqlSessionTemplate")
  46. public void setSuperSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
  47. super.setSqlSessionTemplate(sqlSessionTemplate);
  48. }

  49. public String getNamespace() {
  50. return namespace;
  51. }

  52. public void setNamespace(String namespace) {
  53. this.namespace = namespace;
  54. }

  55. @Override
  56. public int insert(T entity) {
  57. int rows = 0;
  58. try {
  59. rows = getSqlSession().insert(namespace + "." + SQLID_INSERT,
  60. entity);
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. }
  64. return rows;
  65. }

  66. @Override
  67. public int update(T entity) {
  68. int rows = 0;
  69. try {
  70. rows = getSqlSession().update(namespace + "." + SQLID_UPDATE,
  71. entity);
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }
  75. return rows;
  76. }

  77. @Override
  78. public int updateParam(Map param) {
  79. int rows = 0;
  80. try {
  81. rows = getSqlSession().update(namespace + "." + SQLID_UPDATE_PARAM,
  82. param);
  83. } catch (Exception e) {
  84. e.printStackTrace();
  85. }
  86. return rows;
  87. }

  88. @Override
  89. public int delete(PK primaryKey) {
  90. int rows = 0;
  91. try {
  92. rows = getSqlSession().delete(namespace + "." + SQLID_DELETE,
  93. primaryKey);
  94. } catch (Exception e) {
  95. e.printStackTrace();
  96. }
  97. return rows;
  98. }

  99. @Override
  100. public int deleteParam(Map param) {
  101. int rows = 0;
  102. try {
  103. rows = getSqlSession().delete(namespace + "." + SQLID_DELETE_PARAM,
  104. param);
  105. } catch (Exception e) {
  106. e.printStackTrace();
  107. }
  108. return rows;
  109. }

  110. @Override
  111. public int truncate() {
  112. int rows = 0;
  113. try {
  114. rows = getSqlSession().delete(namespace + "." + SQLID_TRUNCATE);
  115. } catch (Exception e) {
  116. e.printStackTrace();
  117. }
  118. return rows;
  119. }

  120. @Override
  121. public int count() {
  122. int result = 0;
  123. try {
  124. result = getSqlSession().selectOne(namespace + "." + SQLID_COUNT);
  125. } catch (Exception e) {
  126. e.printStackTrace();
  127. }
  128. return result;
  129. }

  130. @Override
  131. public int count(Object param) {
  132. int result = 0;
  133. try {
  134. result = getSqlSession().selectOne(namespace + "." + SQLID_COUNT_PARAM,param);
  135. } catch (Exception e) {
  136. e.printStackTrace();
  137. }
  138. return result;
  139. }

  140. @Override
  141. public T get(PK primaryKey) {
  142. try {
  143. return getSqlSession().selectOne(namespace + "." + SQLID_SELECT_PK,primaryKey);
  144. } catch (Exception e) {
  145. e.printStackTrace();
  146. return null;
  147. }
  148. }

  149. @Override
  150. public List<T> select() {
  151. try {
  152. return getSqlSession().selectList(namespace + "." + SQLID_SELECT);
  153. } catch (Exception e) {
  154. e.printStackTrace();
  155. return null;
  156. }

  157. }

  158. @Override
  159. public List<T> selectParam(Map param) {
  160. try {
  161. return getSqlSession().selectList(namespace + "." + SQLID_SELECT_PARAM,param);
  162. } catch (Exception e) {
  163. e.printStackTrace();
  164. return null;
  165. }
  166. }

  167. @Override
  168. public PagingResult<T> selectPagination(PageEntity pageEntity) {
  169. try {
  170. int page = pageEntity.getPage() == null || "".equals(pageEntity.getPage()) ? 1 : pageEntity.getPage(); //默认为第一页
  171. int size = pageEntity.getSize() == null || "".equals(pageEntity.getSize()) ? 15 : pageEntity.getSize();; //默认每页15个

  172. RowBounds rowBounds = new RowBounds((page-1)*size, size);

  173. Map param = pageEntity.getParams();
  174. if (param != null) {
  175. param.put("orderColumn", pageEntity.getOrderColumn());
  176. param.put("orderTurn", pageEntity.getOrderTurn());
  177. }else {
  178. param = new HashMap();
  179. param.put("orderColumn", pageEntity.getOrderColumn());
  180. param.put("orderTurn", pageEntity.getOrderTurn());
  181. }

  182. List<T> resultList = getSqlSession().selectList(namespace + "." + SQLID_SELECT_PARAM,param,rowBounds);
  183. int totalSize = count(pageEntity.getParams());

  184. PagingResult<T> pagingResult = new PagingResult<T>();
  185. pagingResult.setCurrentPage(page);
  186. pagingResult.setTotalSize(totalSize);
  187. pagingResult.setResultList(resultList);
  188. return pagingResult;

  189. } catch (Exception e) {
  190. e.printStackTrace();
  191. return null;
  192. }
  193. }


  194. @Override
  195. public int insertBatch(List<T> list) {
  196. try {
  197. return getSqlSession().insert(namespace + "." + SQLID_INSERT_BATCH,list);
  198. } catch (Exception e) {
  199. e.printStackTrace();
  200. return 0;
  201. }
  202. }

  203. @Override
  204. public int updateBatch(List<T> list) {
  205. int rows = 0;
  206. try {
  207. for (T t : list) {
  208. rows = rows + getSqlSession().update(namespace + "." + SQLID_UPDATE, t);
  209. }
  210. } catch (Exception e) {
  211. e.printStackTrace();
  212. }
  213. return rows;

  214. }

  215. @Override
  216. public int deleteBatch(List<PK> list) {
  217. try {
  218. return getSqlSession().delete(namespace + "." + SQLID_DELETE_BATCH,list);
  219. } catch (Exception e) {
  220. e.printStackTrace();
  221. return 0;
  222. }

  223. }

  224. /**
  225. * 日志打印
  226. * @param sqlId
  227. * @param param
  228. */
  229. public void printLog(String sqlId,Object param){
  230. Configuration configuration = getSqlSession().getConfiguration();
  231. //sqlId为配置文件中的sqlid
  232. MappedStatement mappedStatement = configuration.getMappedStatement(sqlId);
  233. //param为传入到sql语句中的参数
  234. BoundSql boundSql = mappedStatement.getBoundSql(param);
  235. //得到sql语句
  236. String sql = boundSql.getSql().trim();
  237. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  238. System.out.println("info-sql: "+sdf.format(new Date())+"  "+sql);
  239. }
  240. }



5,Emp的映射文件


[html] 

​view plain​

​copy​


  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="hwt.Mapper.EmpMapper">

  6. <!-- 结果集 -->
  7. <resultMap id="empResult" type="Emp">
  8. <id property="empid" column="empid" />
  9. <result property="empname" column="empname"/>
  10. <!-- 多对一的关系,注意resultMap的名字为 引用的namespace+resultMap的Id -->
  11. <association property="dep" column="depid" javaType="Dep" resultMap="hwt.Mapper.DepMapper.depResult"/>
  12. </resultMap>

  13. <!-- 新增emp实体类 -->
  14. <insert id="insert" parameterType="Emp">
  15. insert into emp(empid,empname,depid) values(#{empid,jdbcType=INTEGER},#{empname,jdbcType=VARCHAR},#{dep.depid,jdbcType=INTEGER})
  16. </insert>

  17. <!-- 更新对象 -->
  18. <update id="update" parameterType="Emp">
  19. update emp
  20. <set>
  21. <if test="empname != null">empname=#{empname,jdbcType=VARCHAR},</if>
  22. <if test="dep != null">depid=#{dep.depid,jdbcType=INTEGER},</if>
  23. </set>
  24. <where>
  25. <if test="empid != null">
  26. empid = #{empid,jdbcType=INTEGER}
  27. </if>
  28. </where>
  29. </update>

  30. <!-- 更新对象(参数) -->
  31. <update id="updateParam" parameterType="java.util.Map">
  32. update emp
  33. <set>
  34. <if test="empname != null">empname=#{empname,jdbcType=VARCHAR},</if>
  35. <if test="dep != null">depid=#{depid,jdbcType=INTEGER},</if>
  36. </set>
  37. <where>
  38. <if test="empid != null">
  39. empid = #{empid,jdbcType=INTEGER}
  40. </if>
  41. </where>
  42. </update>

  43. <!-- 批量更新 -->
  44. <update id="updateBatch" parameterType="Emp">
  45. <!-- collection可以是List对于list,数组对于array,Map对应ids -->
  46. <foreach collection="list" item="emp" separator=";">
  47. update emp
  48. <set>
  49. <if test="emp.empname != null">empname= #{emp.empname,jdbcType=VARCHAR},</if>
  50. <if test="emp.dep != null">depid= #{emp.dep.depid,jdbcType=INTEGER},</if>
  51. </set>
  52. <where>
  53. <if test="emp.empid != null">
  54. empid = #{emp.empid,jdbcType=INTEGER}
  55. </if>
  56. </where>
  57. </foreach>
  58. </update>

  59. <!-- 根据主键删除 -->
  60. <delete id="deletePK" parameterType="int">
  61. delete from emp where empid = #{empid}
  62. </delete>

  63. <!-- 根据参数删除 -->
  64. <delete id="deleteParam" parameterType="java.util.Map">
  65. delete from emp
  66. <where>
  67. <if test="empname != null">empname = #{empname}</if>
  68. <if test="depid != null"> and depid = #{depid}</if>
  69. <if test="empid != null"> and empid = #{empid}</if>
  70. </where>
  71. </delete>

  72. <!-- 批量删除 -->
  73. <delete id="deleteBatch">
  74. delete from emp where empid in
  75. <trim prefix="(" suffix=")" suffixOverrides=",">
  76. <foreach collection="list" item="pk" separator=",">
  77. #{pk}
  78. </foreach>
  79. </trim>
  80. </delete>

  81. <!-- 批量插入 -->
  82. <insert id="insertBatch" parameterType="arraylist">
  83. insert into emp(empid,empname,depid)
  84. <!-- collection可以是List对于list,数组对于array,Map对应ids -->
  85. <foreach collection="list" item="emp"  index="index" separator="union all">
  86. select #{emp.empid,jdbcType=NUMERIC},#{emp.empname,jdbcType=VARCHAR},#{emp.dep.depid,jdbcType=NUMERIC} from dual
  87. </foreach>
  88. </insert>

  89. <!-- count -->
  90. <select id="count" resultType="int">
  91. select count(*) from emp e
  92. </select>
  93. <select id="countParam" parameterType="java.util.Map" resultType="int">
  94. select count(*) from emp e
  95. <where>
  96. <if test="empname != null">empname = #{empname}</if>
  97. <if test="depid != null"> and depid = #{depid}</if>
  98. <if test="empid != null"> and empid = #{empid}</if>
  99. </where>
  100. </select>

  101. <!-- 查询(参数) -->
  102. <select id="selectParam" parameterType="java.util.Map" resultType="Emp">
  103. select * from emp
  104. <where>
  105. <if test="empname != null">empname = #{empname}</if>
  106. <if test="depid != null"> and depid = #{depid}</if>
  107. <if test="empid != null"> and empid = #{empid}</if>
  108. </where>
  109. <if test="orderColumn != null">
  110. order by ${orderColumn}
  111. <if test="orderTurn != null">
  112. ${orderTurn}
  113. </if>
  114. </if>
  115. </select>

  116. </mapper>