mybatis与spring的整合(使用sqlSession进行crud)

上次介绍了用接口的方法极大的节省了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;
}

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

上一篇:24(java_io from keyboard)


下一篇:Java入门系列:处理Json格式数据