博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringMVC关于MyBatis通用公共Dao的实现
阅读量:2394 次
发布时间:2019-05-10

本文共 4843 字,大约阅读时间需要 16 分钟。

现在越来越多的开发者使用MyBatis作为ORM的框架,它开发迅速,上手容易,开源代码多。但是在进行数据库操作的时候的独自生成的DaoMaper业务太多,在相互调用的业务之间,容易产生这样那样的事务问题。因此本人一直想寻找一个类似Hibernate一样的通用数据库管理Dao,采用Spring注入的方式即可。现在已创建项目的方式和大家一起分享。

一、IDEA创建web项目

(1)、File——New——Project,选择Java——Web Application

(2)、添加Maven依赖,右键项目——Add Framework Support

4.0.0
com.chentian610
GeneralDao
1.0-SNAPSHOT
org.springframework
spring-framework-bom
4.2.2.RELEASE
import
pom
org.springframework
spring-web
其中dependencyManagement中的spring-framework-bom是spring整理的版本控制,只需要在这里配置好spring的版本,后面的spring依赖都无需指定版本了,方便统一版本升级。

(3)、创建springContent.xml并在web.xml中指定

contextConfigLocation
classpath:spring/springContext.xml
org.springframework.web.context.ContextLoaderListener
(4)、创建数据库连接配置文件jdbc.properties

jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.databaseURL=jdbc:mysql://127.0.0.1:3306/chentian610?useUnicode=true&autoReconnect=true&characterEncoding=utf8jdbc.username=rootjdbc.password=a
(5)、在springContent.xml中指定jdbc配置

(6)、集成MyBatis组件sqlSessionFactory

(7)、配置数据库事务

(8)、’编写公共GeneralDao

@Autowired	public void setSqlSession(SqlSessionTemplate sqlMapClient) {		this.sqlSession = sqlMapClient;		_logger.info("Mybatis数据库连接对象注入GeneralDAO完成");	}	public 
T queryObject(String sqlId, Object param) { try { return sqlSession.selectOne(sqlId, param); } catch (Exception e) { throw handException(e); } } public
List
queryForList(String sqlId, Object param) { List
list = null; if (ActionUtil.isPage_app()) {//手机APP分页 List
list2 = sqlSession.selectList(sqlId,param,new RowBounds(ActionUtil.getStart(),ActionUtil.getLimit())); if (ListUtil.isEmpty(list2)) return new ArrayList
(); if (ActionUtil.isDirection_pre() && (ActionUtil.getStart()==0)){ list = new ArrayList
(); for (int i=list2.size()-1;i>-1;i--) list.add(list2.get(i)); } else list = list2; } else if (ActionUtil.isPage_web()) //Web端分页 list = sqlSession.selectList(sqlId, param,new RowBounds(ActionUtil.getStart(),ActionUtil.getLimit())); else list = sqlSession.selectList(sqlId, param);//不分页 Integer total = sqlSession.selectOne("systemMap.getListCount"); ActionUtil.setTotal(total); return list; }
(9)、在业务代码中引用GeneralDao
package com.chentian610.test.service.impl;import com.chentian610.framework.GeneralDAO;import com.chentian610.test.service.TestService;import com.chentian610.test.vo.TestVO;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Service(value="TestServiceImpl")public class TestServiceImpl implements TestService {	@Autowired	private GeneralDAO dao;	public void addTest(TestVO vo) {		Integer id = dao.insertObjectReturnID("testMap.insertTest",vo);		vo.setId(id);	}	public void updateTest(TestVO vo) {		dao.updateObject("testMap.updateTest",vo);	}	public void deleteTest(TestVO vo) {		dao.deleteObject("testMap.deleteTestById",vo.getId());	}	public List
getTestList(TestVO vo) { return dao.queryForList("testMap.getTestList",vo); }}

(10)、controller层注入业务层

package com.chentian610.test.controller;import com.chentian610.test.service.TestService;import com.chentian610.test.vo.TestVO;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;@RestController@RequestMapping(value="testAction")public class TestController {	@Autowired	private TestService testService;	/**	 * 添加	 * @param vo	 */	@RequestMapping(value="/addTest")	public Object addTest(TestVO vo){		testService.addTest(vo);		return "添加成功";	}	/**	 * 修改	 * @param vo	 */	@RequestMapping(value="/updateTest")	public Object updateTest(TestVO vo){		testService.updateTest(vo);		return "修改成功";	}	/**	 * 删除	 * @param vo	 */	@RequestMapping(value="/deleteTest")	public Object deleteTest(TestVO vo){		testService.deleteTest(vo);		return "删除成功";	}	/**	 * 查询	 * @param vo	 */	@RequestMapping(value="/getTestList")	public Object getTestList(TestVO vo){		return testService.getTestList(vo);	}	}
(11)、代码编写完成,启动项目,输入http://localhost:8080/{发布的项目名称}/testAction/getTestList

 OR

你可能感兴趣的文章
Filter--过滤器Filter概述、API、配置与使用详解
查看>>
Web--使用Filter和Cookie实现自动登录
查看>>
Web--Filter使用装饰器模式解决全站中文乱码问题
查看>>
JS--JavaScript入门(script标签使用与外部JavaScript文件引入)
查看>>
JS--JavaScript语法基础(编码、注释、关键字、保留字)
查看>>
JS--JavaScript变量详解(全局变量、局部变量)
查看>>
JS--JavaScript表达式和运算符(结合性、优先级)详解
查看>>
JS--JavaScript语句(表达式语句、语句块、条件语句if、switch)详解
查看>>
JS--JavaScript语句(循环语句、跳转语句、异常处理语句、function语句)详解
查看>>
JS--JavaScript数据类型(数值、字符串、布尔值)详解
查看>>
JS--JavaScript函数(匿名函数、闭包函数等)详解
查看>>
JS--JavaScript对象类型
查看>>
JS--JavaScript数组Array(join、split、reverse、concat、slice)详解
查看>>
JS--JavaScript数据类型检测(typeof、constructor)详解
查看>>
JS--JavaScript数值计算与类型转换详解
查看>>
JS--JavaScript增强数组排序(根据奇偶性排序、整数浮点数分开排序)
查看>>
JS--JavaScript字符串替换(replace()方法、正则表达式匹配、函数作为参数)详解
查看>>
JS--JavaScript操作BOM(浏览器对象模型、window对象概述、window.open()方法打开窗口)
查看>>
JS--JavaScript使用window对象操作框架集frameset中的各窗口(frames[])
查看>>
JS--JavaScript使用window对象控制窗口大小(innerWidth、innerHeight)和位置(moveTo()、moveBy())、设置随机移动弹窗(小网站专用...)
查看>>