mybatisとspringの統合(sql Sessionを使ってcrud)
56994 ワード
前回紹介しましたが、インタフェースを使う方法によって、dao層が大幅に節約されました.ファイルの配置とインタフェースだけで実現できます.今回紹介したのはsplsessionを通じてdaoを実現する方法です.
先に言わないでください.上のプロファイル:
1、web.xml
2、appication.xml
jdbc.properties
例えばUser
daosuport
この中で検索ヘルプクラスは検索を助けるために使われます.その原理は名前空間をつなぎ合わせてパラメータを設定し、検索しやすいです.
例えば、改ページデータを照会する
先に言わないでください.上のプロファイル:
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、appication.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.queryheplerpackage 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、dao Supportとdao Support Impldaosuport
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);
}
daosuport Implpackage 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;
}
生まれつき書くことができませんが、皆さんに共有したいです.何か問題がありましたら、ご指摘ください.