• 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;
        }

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

  • 相关阅读:
    叙旧
    注册表的基本操作(.Net)
    如何自己实现 JavaScript 的 new 操作符?
    装饰者模式和TypeScript装饰器
    彻底弄懂GMT、UTC、时区和夏令时
    Javascript 中 cookie 操作方式
    javascript实例教程:使用canvas技术模仿echarts柱状图
    实现memcached客户端:TCP、连接池、一致性哈希、自定义协议
    Linux终端快速检测网站是否宕机的6个方法
    爬虫是什么吗?你知道爬虫的爬取流程吗?
  • 原文地址:https://www.cnblogs.com/sevenlin/p/4608339.html
Copyright © 2020-2023  润新知