zoukankan      html  css  js  c++  java
  • spring ,springmvc,mybatis 最基本的整合,没有多余的jar包和依赖 2018.9.29日

           最基本的ssm框架整合 


          本案例采用2018商业版intellij  idea  编辑器    maven项目管理工具  tomcat8.5


    接着上一篇使用springmvc最基本配置开始

       https://www.cnblogs.com/qq376324789/p/9685125.html

     1.首先在原来的基础上添加新的依赖 ,都是当前版本最高的依赖

     <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
    <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.11</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.0.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.1.0.RELEASE</version>
    </dependency>

    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.1.0.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
    </dependency>

    2.配置web.xml  ,让其启动spring容器

      <!--让web容器初始化时初始化spring.xml-->
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    3.配置spring.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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
    ">
    <!-- 启用注解 -->
    <context:annotation-config />
    <task:annotation-driven/>
    <context:component-scan base-package="com.service"/>
    <context:component-scan base-package="com.dao"/>



    <!--读取配置文件;可以读取多个-->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
    <list>
    <value>classpath:dbconfig.properties</value>

    </list>
    </property>
    </bean>


    <!--配置数据库连接-->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 阿里 druid数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <!-- 数据库基本信息配置 -->
    <property name="url" value="${url}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <property name="driverClassName" value="${driverClassName}" />
    <property name="filters" value="${filters}" />
    <!-- 最大并发连接数 -->
    <property name="maxActive" value="${maxActive}" />
    <!-- 初始化连接数量 -->
    <property name="initialSize" value="${initialSize}" />
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="${maxWait}" />
    <!-- 最小空闲连接数 -->
    <property name="minIdle" value="${minIdle}" />
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
    <property name="validationQuery" value="${validationQuery}" />
    <property name="testWhileIdle" value="${testWhileIdle}" />
    <property name="testOnBorrow" value="${testOnBorrow}" />
    <property name="testOnReturn" value="${testOnReturn}" />
    <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
    <!-- 打开removeAbandoned功能 -->
    <property name="removeAbandoned" value="${removeAbandoned}" />
    <!-- 1800秒,也就是30分钟 -->
    <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
    <!-- 关闭abanded连接时输出错误日志 -->
    <property name="logAbandoned" value="${logAbandoned}" />
    </bean>



    <!--事物声明配置-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="delete*" propagation="REQUIRED" read-only="false"
    rollback-for="java.lang.Exception"/>
    <tx:method name="insert*" propagation="REQUIRED" read-only="false"
    rollback-for="java.lang.Exception" />
    <tx:method name="update*" propagation="REQUIRED" read-only="false"
    rollback-for="java.lang.Exception" />
    <tx:method name="save*" propagation="REQUIRED" read-only="false"
    rollback-for="java.lang.Exception" />
    </tx:attributes>
    </tx:advice>

    <aop:aspectj-autoproxy proxy-target-class="true"/>

    <!-- 事务处理 service -->
    <aop:config>
    <aop:pointcut id="pc" expression="execution(* com.service..*(..))" />
    <aop:advisor pointcut-ref="pc" advice-ref="txAdvice" />
    </aop:config>

    <!---->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="mapperLocations" value="classpath:mybatis/*.xml"/>

    </bean>
    <!--表示自动扫描con.sowell.dao下的每个mapper映射文件-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.dao" />
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>

    //最下面还有第二种配置和使用方式



    </beans>

    4.配置数据库连接

    dbconfig.properties
    url:jdbc:mysql://localhost:3306/skjd?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8 
    driverClassName:com.mysql.jdbc.Driver
    username:root
    password:root
           
    filters:stat
       
    maxActive:20
    initialSize:1
    maxWait:60000
    minIdle:10
    maxIdle:15
       
    timeBetweenEvictionRunsMillis:60000
    minEvictableIdleTimeMillis:300000
       
    validationQuery:SELECT 'x'
    testWhileIdle:true
    testOnBorrow:false
    testOnReturn:false
    
    maxOpenPreparedStatements:20
    removeAbandoned:true
    removeAbandonedTimeout:1800
    logAbandoned:true

    5.配置

    mybatis-config.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <settings>
            <setting name="cacheEnabled" value="true" /><!-- 全局映射器启用缓存 -->
            <setting name="useGeneratedKeys" value="true" />
            <setting name="defaultExecutorType" value="REUSE" />
        </settings>
    
    
    
    
    </configuration>

    6.测试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="com.dao.TestDao"  >
    
    
        <select id="get" resultType="java.lang.Integer">
          select count(*) from tb_line
        </select>
    
    
    
    
    </mapper>

    7.接口

    package com.dao;
    
    public interface TestDao {
    
    
        int get();
    }

    8.service 

    package com.service;
    
    import com.dao.TestDao;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class TestService {
       @Autowired
       private  TestDao testDao;
    
        public int get(){
    
            return  testDao.get();
        }
    
    
    
    }

    9.controller

    package com.controller;
    import com.service.TestService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    
    @Controller
    public class Controller01 {
    
        @Autowired
        private TestService testService;
    
        @RequestMapping("test2")
        public String test02(){
            int i= testService.get();
            System.out.println(i);
            System.out.println(123);
            return "index";
        }
    
    
        @RequestMapping("test3")
        @ResponseBody
        public int  test03(){
            System.out.println(123);
    
            return testService.get();
        }
    }

    10截图目录结构

     

    如果大家也使用的是idea编辑器

       记得将jdk的jar包和tomcat的jar添加进来。不然会报错

    配置二

        <!-- 配置mybatis -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
            <!-- mapper扫描 -->
            <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>
        </bean>
        
        <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg ref="sqlSessionFactory" />
        </bean>

    使用封装类

    package com.cms.service.mysql.dao;
    
    public interface DAO {
        
        /**
         * 保存对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object save(String str, Object obj) throws Exception;
        
        /**
         * 修改对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object update(String str, Object obj) throws Exception;
        
        /**
         * 删除对象 
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object delete(String str, Object obj) throws Exception;
    
        /**
         * 查找对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object findForObject(String str, Object obj) throws Exception;
    
        /**
         * 查找对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object findForList(String str, Object obj) throws Exception;
        
        /**
         * 查找对象封装成Map
         * @param s
         * @param obj
         * @return
         * @throws Exception
         */
        public Object findForMap(String sql, Object obj, String key , String value) throws Exception;
        
    }
    package com.cms.service.mysql.dao;
    
    import java.util.List;
    
    import javax.annotation.Resource;
    
    import org.apache.ibatis.session.ExecutorType;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.springframework.stereotype.Repository;
    
    @Repository("daoSupport")
    public class DaoSupport implements DAO{
    
        @Resource(name = "sqlSessionTemplate")
        private SqlSessionTemplate sqlSessionTemplate;
        
        /**
         * 保存对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object save(String str, Object obj) throws Exception {
            return sqlSessionTemplate.insert(str, obj);
        }
        
        /**
         * 批量更新
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object batchSave(String str, List objs )throws Exception{
            return sqlSessionTemplate.insert(str, objs);
        }
        
        /**
         * 修改对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object update(String str, Object obj) throws Exception {
            return sqlSessionTemplate.update(str, obj);
        }
    
        /**
         * 批量更新
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public void batchUpdate(String str, List objs )throws Exception{
            SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();
            //批量执行器
            SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
            try{
                if(objs!=null){
                    for(int i=0,size=objs.size();i<size;i++){
                        sqlSession.update(str, objs.get(i));
                    }
                    sqlSession.flushStatements();
                    sqlSession.commit();
                    sqlSession.clearCache();
                }
            }finally{
                sqlSession.close();
            }
        }
        
        /**
         * 批量更新
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object batchDelete(String str, List objs )throws Exception{
            return sqlSessionTemplate.delete(str, objs);
        }
        
        /**
         * 删除对象 
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object delete(String str, Object obj) throws Exception {
            return sqlSessionTemplate.delete(str, obj);
        }
         
        /**
         * 查找对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object findForObject(String str, Object obj) throws Exception {
            return sqlSessionTemplate.selectOne(str, obj);
        }
    
        /**
         * 查找对象
         * @param str
         * @param obj
         * @return
         * @throws Exception
         */
        public Object findForList(String str, Object obj) throws Exception {
            return sqlSessionTemplate.selectList(str, obj);
        }
        
        public Object findForMap(String str, Object obj, String key, String value) throws Exception {
            return sqlSessionTemplate.selectMap(str, obj, key);
        }
        
    }

    使用案例

    package com.cms.service.mysql.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.cms.service.mysql.UserService;
    import com.cms.service.mysql.dao.DaoSupport;
    import com.cms.util.PageData;
    @Service
    public class UserServiceImpl implements UserService {
        @Autowired
        private DaoSupport dao;
        
        @Override
        public int addUser(PageData pd) {
            // TODO Auto-generated method stub
            return 0;
        }
    
        @Override
        public PageData getUserByUsernameAndPassword(PageData pd) throws Exception {
            // TODO Auto-generated method stub
            return (PageData)dao.findForObject("UserMapper.getUserByUsernameAndPassword", pd);
        }
    
        @Override
        public int editUserById(PageData pd) {
            // TODO Auto-generated method stub
            return 0;
        }
    
    }

    xml写法

    <?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="UserMapper">
       <!-- 根据用户名和密码一起查询信息 -->
       <select id="getUserByUsernameAndPassword" parameterType="pd" resultType="pd">
        select * from cms_user
        where username=#{username} and password=#{password} and state=1  limit 1    
       </select>
    </mapper>
  • 相关阅读:
    对scott中emp表进行各种操作
    可兼容的事件绑定方法
    深度复制
    原型链的继承
    如何在github上发布自己的项目
    用单例连接oracle数据库
    Struts2之输入验证
    JSP之监听器Listener(二)
    JSP之监听器Listener(一)————————ServletContextListener
    JSP之过滤器Filter
  • 原文地址:https://www.cnblogs.com/qq376324789/p/9726376.html
Copyright © 2011-2022 走看看