上次介绍了用接口的方法极大的节省了dao层,只需通过 配置文件和接口就可以实现,这次介绍的是通过splsession来实现dao,这种方法比较灵活;

先不说,上配置文件:

1、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <display-name>Archetype Created Web Application</display-name> <!--引入spring-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value>
</context-param> <!--springmvc DispathcherServlet-->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping> </web-app>

2、application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!--spring注解-->
<context:component-scan base-package="com.seven"/> <!-- 导入外部的配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/> <!--数据源-->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="driverClass" value="${driverClass}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean> <!--mybatis 的 sqlsessionFactoryNean-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- <property name="configLocation" value="classpath:conf.xml"/>-->
<property name="mapperLocations" value="classpath:com/seven/dao/*.xml"/>
<property name="typeAliasesPackage" value="com.seven.domain"/><!--指定实体类包,自动将实体类的简单类名映射为别名-->
</bean> <!--映射器接口 有了 下面配置就不用了-->
<!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
<property name="mapperInterface" value="com.seven.dao.UserMapper"/>
</bean>--> <!--mybatis自动扫描加载映射接口:mapperScannerConfigurer-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.seven.dao"/><!--指定映射接口所在的包-->
<!-- <property name="sqlSessionFactory" ref="sqlSessionFactory"/>-->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean> <!--事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <!-- <context:component-scan base-package="com.seven.*">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>--> <!--声明事务-->
<tx:annotation-driven transaction-manager="transactionManager"/> </beans>

3.sprin-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--spring注解扫描包-->
<context:component-scan base-package="com.seven"/> <!--springmvc注解驱动-->
<mvc:annotation-driven/> <!-- 资源管理 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<mvc:resources location="/upload/" mapping="/upload/**"/> <!-- 上传文件解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485670"/> <!-- 10M -->
</bean> <mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/admin/**"/>
<mvc:exclude-mapping path="/admin/loginUI.action"/>
<mvc:exclude-mapping path="/admin/managerLogin.action"/>
<mvc:exclude-mapping path="/admin/validateManager.action"/>
<bean class="com.seven.interceptor.CheckLoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors> <!--内部资源解析器-->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".html"/>
</bean> </beans>

4、相关配置文件

  jdbc.properties

jdbcUrl=jdbc:mysql://localhost:3306/db_articlemanage
driverClass=com.mysql.jdbc.Driver
user=root
password=root

5、javabean

例如User

package com.seven.domain;

import org.apache.ibatis.type.Alias;

import java.io.Serializable;
import java.util.Set; /**
* Created by Seven on 2015/5/29.
*/ public class User implements Serializable{ private Long id;
private String loginname;
private String username;
private String password;
private String intro; private Set<Role> roles; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getLoginname() {
return loginname;
} public void setLoginname(String loginname) {
this.loginname = loginname;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getIntro() {
return intro;
} public void setIntro(String intro) {
this.intro = intro;
} public Set<Role> getRoles() {
return roles;
} public void setRoles(Set<Role> roles) {
this.roles = roles;
} }

User对应的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必须是接口的全类名 -->
<mapper namespace="User"> <!--user结果映射-->
<resultMap id="userResult" type="User">
<result column="id" property="id"/>
<result column="loginname" property="loginname"/>
<result column="username" property="username"/>
<result column="password" property="password"/>
<result column="intro" property="intro"/> </resultMap> <!-- 取得插入数据后的id -->
<insert id="insert" parameterType="map">
insert into tb_user(loginname,username,password,intro)
values(#{loginname},#{username},#{password},#{intro})
</insert> <update id="update">
update tb_user
set loginname = #{loginname},
username = #{username},
password = #{password},
intro = #{intro}
where id = #{id}
</update> <delete id="delete">
delete from tb_user
where id = #{id}
</delete> <select id="findById" resultMap="userResult">
select *
from tb_user
where id = #{id}
</select> <select id="findAll" resultMap="userResult">
select *
from tb_user
</select> <select id="findByIds" resultMap="userResult">
select *
from tb_user
where id IN (#{ids})
</select> <select id="getPage" resultMap="userResult" parameterType="map">
select *
from tb_user
LIMIT #{startIndex},#{pageSize}
</select> <select id="findByloginnameAndPwd" resultMap="userResult">
SELECT *
FROM tb_user
WHERE loginname=#{loginname}
AND password=#{password}
</select> </mapper>

7.queryhepler

package com.seven.utils;

import java.util.HashMap;
import java.util.Map; /**
* Created by Seven on 2015/6/12.
*/
public class QueryHelper { private String nameSpace;
private String methodId;
private Object param;
private Map<String,Object> params; /**
* 设置命名空间.
* @param nameSpace
* @return
*/
public QueryHelper setNameSpace(String nameSpace){
this.nameSpace = nameSpace;
return this;
} /**
* 设置dao方法的ID.
* @param methodId
* @return
*/
public QueryHelper setMethodId(String methodId){
this.methodId = methodId;
return this;
} /**
* 设置一个参数.
* @param param
* @return
*/
public QueryHelper setParam(Object param){
this.param = param;
return this;
} /**
* 设置多个参数.
* @param key
* @param value
* @return
*/
public QueryHelper setParams(String key,Object value){
if(params == null){
params = new HashMap<String, Object>();
}
params.put(key,value);
return this;
} /**
* 获取一个参数.
* @return
*/
public Object getParam(){
return param;
} /**
* 获得多个参数.
* @return
*/
public Map<String,Object> getParams(){
return params;
} /**
* 获取非空的参数.
* @return
*/
public Object getRealParams(){
return param == null ? params : param;
} /**
* 得到结果.
* @return
*/
public String getMethod(){
return nameSpace+"."+methodId;
} }

8、daoSupport和daoSupportImpl

  daosupport

package com.seven.base;

import com.seven.utils.QueryHelper;

import java.util.List;
import java.util.Map; /**
* Created by Seven on 2015/6/12.
*/
public interface DaoSupport { public void insert(QueryHelper queryHelper); public void insert(String method,Object param); public void delete(QueryHelper queryHelper); public void delete(String method,Object o); public void update(QueryHelper queryHelper); public void update(String method,Object o); public<T> T select(QueryHelper queryHelper); public<T> T select(String method,Object o); public<T> List<T> selectList(QueryHelper queryHelper); public<T> List<T> selectList(String method,Object o); public<T> List<T> getPageData(int pageNum,int pageSize,QueryHelper queryHelper);
}

  daosupportImpl

package com.seven.base;

import com.seven.utils.QueryHelper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map; /**
* Created by Seven on 2015/6/12.
*/ @Repository("daoSupport")
@Transactional
public class DaoSupportImpl implements DaoSupport{ @Resource
private SqlSessionFactory sqlSessionFactory; private SqlSession sqlSession = null; /**
* 获取sqlSession.
* @return
*/
public SqlSession getSqlSession(){
if(sqlSession==null){
sqlSession = sqlSessionFactory.openSession();
}
return sqlSession;
} /**
* 插入.
* @param queryHelper
*/
public void insert(QueryHelper queryHelper) {
getSqlSession().insert(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 插入.
* @param method
* @param param
*/
public void insert(String method, Object param) {
getSqlSession().insert(method,param);
} /**
* 删除.
* @param queryHelper
*/
public void delete(QueryHelper queryHelper) {
getSqlSession().delete(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 删除.
* @param method
* @param o
*/
public void delete(String method, Object o) {
getSqlSession().delete(method,o);
} /**
* 更新.
* @param queryHelper
*/
public void update(QueryHelper queryHelper) {
getSqlSession().update(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 更新.
* @param method
* @param o
*/
public void update(String method, Object o) {
getSqlSession().update(method,o);
} /**
* 查找一个.
* @param queryHelper
* @param <T>
* @return
*/
public <T> T select(QueryHelper queryHelper) {
return getSqlSession().selectOne(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 查找一个.
* @param method
* @param o
* @param <T>
* @return
*/
public <T> T select(String method, Object o) {
return getSqlSession().selectOne(method,o);
} /**
* 查找多个.
* @param queryHelper
* @param <T>
* @return
*/
public <T> List<T> selectList(QueryHelper queryHelper) {
return getSqlSession().selectList(queryHelper.getMethod(),queryHelper.getRealParams());
} /**
* 查找多个.
* @param method
* @param o
* @param <T>
* @return
*/
public <T> List<T> selectList(String method, Object o) {
return getSqlSession().selectList(method,o);
} /**
* 查找所有.
* @param method
* @param <T>
* @return
*/
public <T> List<T> selectWithoutParams(String method) {
return getSqlSession().selectList(method);
} /**
* 分页数据.
* @param pageNum
* @param pageSize
* @param queryHelper
* @param <T>
* @return
*/
public <T> List<T> getPageData(int pageNum, int pageSize, QueryHelper queryHelper) {
return null;
}
}

9、通过以上配置与实现,我们就可以很简单的操作数据库了:

  其中查询帮助类是用来帮助查询,其原理就是拼接命名空间,设置参数,方便查询

  例如,查询分页数据

 /**
* 获取分页数据.
* @param pageNum
* @return
*/
public Page getPageData(int pageNum){
int totleRecord = daoSupport.select("Article.getTotleRecord",null);
Page page = new Page(pageNum, Configuration.pageSize,totleRecord);
QueryHelper helper = new QueryHelper();
helper.setNameSpace("Article")
.setMethodId("getPageData")
.setParams("startIndex",page.getStartIndex())
.setParams("pageSize",page.getPageSize());
List list = daoSupport.selectList(helper);
page.setList(list);
return page;
}

天生不会写东西,但是很想分享给大家,有什么问题请大家指出!

mybatis与spring的整合(使用sqlSession进行crud)的更多相关文章

  1. mybatis与spring的整合(使用接口实现crud)

    本人刚刚接触mybatis,今天把它和spring整合起来用了一个上午==. 一开始是通过配置文件来配置,后来尝试用了一下注解,觉得mybatis的注解真的有点恶心...一大坨的,所以我还是建议使用配 ...

  2. 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”

    在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Myb ...

  3. mybatis 学习笔记(四):mybatis 和 spring 的整合

    mybatis 学习笔记(四):mybatis 和 spring 的整合 尝试一下整合 mybatis 和 spring. 思路 spring通过单例方式管理SqlSessionFactory. sp ...

  4. MyBatis与Spring的整合实例详解

    从之前的代码中可以看出直接使用 MyBatis 框架的 SqlSession 访问数据库并不简便.MyBatis 框架的重点是 SQL 映射文件,为方便后续学习,本节讲解 MyBatis 与 Spri ...

  5. 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】

    一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...

  6. SSM :MyBatis与Spring的整合

    MyBatis与Spring的整合 一:Spring整合MyBatis的准备工作: (1.)在项目中加入Spring,ByBatis及整合相关的jar文件 (2.)建立开发目录结构,创建实体类 (3. ...

  7. mybatis与spring的整合(代码实现)

    mybatis与spring的整合(代码实现) 需要jar包: mybatis核心包:依赖包:log4j包:spring croe;beans;tx;aop;aspects;context;expre ...

  8. Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

    Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,详细你已经有一定的Java ...

  9. mybatis与spring的整合

    今天是mybatis的最后一天,也是最为重要的一天,mybatis与spring整合,(spring相关知识我会抽一个大的模块进行讲解). 首先加入Spring的依赖 <dependency&g ...

随机推荐

  1. 【Code clone】Distributed Code Clone Detection Based on Index

    1 摘要  随着软件产业的发展,代码克隆现象越来越常见,随之带来的安全漏洞.可维护性.产权等问题也引起人们重视.代码克隆按照复制程度分为4类:完全复制.修改名称.更换顺序和自实现.现有的代码克隆检测工 ...

  2. spring的jar各包作用

    http://yjwen337.blog.163.com/blog/static/3625847820106132949858/[转]spring.jar是包含有完整发布的单个jar 包,spring ...

  3. 【sed & awk 第二版笔记】以州和人名排列_P38

    [root@nhserver1 02]# cat listJohn Daggett, 341 King Road, Plymouth MAAlice Ford, 22 East Broadday, R ...

  4. Node.js--安装express以及创建第一个express项目(windows)

    1.根据新版的express出现了安装器的概念,安装express需要两个步骤(命令行找到nodejs目录全局安装): (1)npm install -g express@4.15.0   (也可省略 ...

  5. CentsOS7无网情况下安装mysql5.7

    1.需求就不用讲了,客户现场,政府环境,银行环境,大多是没网的,所以无网安装是很有必要的 mysql下载路径:https://dev.mysql.com/downloads/mysql/ 查看自己Li ...

  6. Eclipse启动报错[ out of memory error has occurred ]或[ An internal error occurred while showing an internal error ]

    自我总结,有什么需要纠正或更好的方案,请告知,谢谢! 最近上来看到好多同学都遇到了这个问题,之前我也好几次碰到这个问题,很是恼火,什么没干,eclipse一开电脑就卡死了,后来发现不管是新打开ecli ...

  7. [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法

    Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...

  8. 面向对象编程之super内置函数的用法

    先来看一段代码: 定义一个名叫People的父类,又定义了一个叫Teacher的老师类和一个叫Student的学生类 来继承People的类,并根据这两个子类实例化出两个对象s1和t1. class ...

  9. 51NOD 1222 最小公倍数计数 [莫比乌斯反演 杜教筛]

    1222 最小公倍数计数 题意:求有多少数对\((a,b):a<b\)满足\(lcm(a,b) \in [1, n]\) \(n \le 10^{11}\) 卡内存! 枚举\(gcd, \fra ...

  10. BZOJ 3620: 似乎在梦中见过的样子 [KMP 暴力]

    和我签订契约,成为魔法少女吧 题意:求所有形似于A+B+A 的子串的数量 , 且len(A)>=k,len(B)>=1 位置不同其他性质相同的子串算不同子串,位置相同但拆分不同的子串算同一 ...