zoukankan      html  css  js  c++  java
  • 终极版:Mybatis整合Spring配置

    第一部分:配置 Spring 框架

      配置 SpringMVC 的步骤:

      配置流程图:

      SpringMVC 配置

      1. 导入包(那些包,基本包 5 个,1 个日志依赖包,2 个 webmvc 支持包)

    <!-- jsp -->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>javax.servlet.jsp-api</artifactId>
                <version>2.2.1</version>
                <scope>provided</scope>
            </dependency>
            <!-- servlet -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- spring mvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.16.RELEASE</version>
            </dependency>

      2.  构建一个请求

    <form action="${pageContext.request.contextPath }/admin/addAdmin" method="post">
           管理员名称:<input name="admin_name" type="text"><input type="submit" value="增加管理员">
       </form>

      3. 编辑 web.xml 配置核心控制器

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.1"
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xml="http://www.w3.org/XML/1998/namespace"
        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 ">
        <!-- 编码支持过滤器 -->
        <filter>
          <filter-name>characterEncodingFilter</filter-name>
          <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
          <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
          </init-param>
        </filter>
        <filter-mapping>
          <filter-name>characterEncodingFilter</filter-name>
          <url-pattern>/*</url-pattern>
        </filter-mapping>
        <!-- 配置核心控制器 -->
        <servlet>
           <servlet-name>dispatcherServlet</servlet-name>
           <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
           <!-- 指定配置类的位置,指定包名会加载该包下的所有配置类 -->
           <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>cn.mgy.config</param-value>
           </init-param>
           <!-- 修改支持配置类的Spring容器 -->
           <init-param>
             <param-name>contextClass</param-name>
             <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
           </init-param>
           <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
          <servlet-name>dispatcherServlet</servlet-name>
          <url-pattern>/</url-pattern>
        </servlet-mapping>
    </web-app>

      4. 编写业务控制器

    package cn.mgy.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.context.annotation.SessionScope;
    
    @Controller
    @SessionScope
    @RequestMapping(value="/admin")
    public class AdminController {
        
        @RequestMapping(value="/addAdmin")
        public String addAdmin() {
            System.out.println("-增加管理员-");
            return "/add.jsp";
        }
    
    }

      5. 编写配置类

      -- 容器配置类

    @Configuration
    @ComponentScan(basePackages="cn.gzsxt")
    public class ContextConfig {
    
    }

      --SpringMVC 配置类

    package cn.mgy.config;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    
    @Configuration
    @EnableWebMvc //<mvc:annotation-driver>
    public class MvcConfig extends WebMvcConfigurerAdapter {
    
        //<mvc:default-servlet-handler>,放开静态资源访问
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
    }

      6. 编写返回的页面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>增加学生成功的界面</title>
    </head>
    <body>
        <h3>增加学生成功</h3>
    </body>
    </html>

    第二部分:配置 Mybatis 框架

      Mybatis 配置流程图:

      配置步骤说明:

      1. 导入包(JDBC 驱动包,Mybatis 框架包,junit)

    <!-- mybatis -->
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.1</version>
            </dependency>
            <!-- mysql -->
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <!-- junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>

      2. 创建一个总配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
    <configuration>
    
        <environments default="rbac">
            <environment id="rbac">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="org.gjt.mm.mysql.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/rbac" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
    
    </configuration>

      3. 创建一个帮助类获得会话对象

    package cn.mgy.utils;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class MybatisUtils {
        
        public static final SqlSessionFactory SESSION_FACTORY=MybatisUtils.createSqlSessionFactory();
        
        private static SqlSessionFactory createSqlSessionFactory() {
        
            try {
                //读取配置文件
                Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
                //创建会话工厂构建类对象
                SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
                //返回会话工厂
                return builder.build(reader);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        
        public static SqlSession getSqlSession() {
            return SESSION_FACTORY.openSession();
        }
        
        public static void main(String[] args) {
            System.out.println(MybatisUtils.getSqlSession());
        }
    
    }

      4. 创建一个映射接口(包括操作 SQL 语句的)

    package cn.mgy.mapper;
    
    import java.util.Map;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Options;
    
    /**
     * 管理员映射接口,用于操作tb_admin表
     * 
     * @author ranger
     *
     */
    public interface AdminMapper {
    
        /**
         * 增加管理员记录
         * 
         * @param admin
         * @return
         */
        @Insert("INSERT INTO tb_admin(admin_name, admin_account, admin_pwd, admin_status, admin_create_date, role_id) VALUES (#{admin_name}, #{admin_account}, #{admin_pwd}, #{admin_status}, #{admin_create_date}, #{role_id})")
        @Options(useGeneratedKeys = true, keyProperty = "admin_id")
        int insert(Map<String, Object> admin);
    
    }

      5. 在总配置文件加载该映射接口

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" >
    <configuration>
    
        <environments default="rbac">
            <environment id="rbac">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="org.gjt.mm.mysql.Driver" />
                    <property name="url" value="jdbc:mysql://localhost:3306/rbac" />
                    <property name="username" value="root" />
                    <property name="password" value="root" />
                </dataSource>
            </environment>
        </environments>
        
        <mappers>
          <mapper class="cn.mgy.mapper.AdminMapper"/>
        </mappers>
    
    </configuration>

      6. 编写一个测试类,测试插入数据

    package cn.mgy.test.mapper;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import cn.mgy.mapper.AdminMapper;
    import cn.mgy.utils.MybatisUtils;
    
    public class AdminMapperTest {
        
        @Test
        public void insert() {
            SqlSession session = MybatisUtils.getSqlSession();
            AdminMapper adminMapper = session.getMapper(AdminMapper.class);
            Map<String, Object> admin=new HashMap<String, Object>();
            admin.put("admin_name", "admin");
            admin.put("admin_create_date", new Date());
            adminMapper.insert(admin);
            System.out.println(admin.get("admin_id"));
            session.commit();
            session.close();
            
        }
    
    }

    第三部分:整合这连个框架

      配置步骤:

      1. 导入包(那些包)

        (1)Mybatis-Spring 整合包

        (2)第三方数据源包(DBCP2)

        (3)SpringJdbc+SpringTx(事务的支持)

    <!-- mybatis-spring -->
    
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
            </dependency>
            <!-- spring jdbc -->
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.16.RELEASE</version>
            </dependency>
            
            <!-- dbcp2 -->
    
    
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-dbcp2</artifactId>
                <version>2.2.0</version>
            </dependency>
    
        <!-- spring-test -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>4.3.16.RELEASE</version>
                <scope>test</scope>
            </dependency>

      2. 创建数据源

    @Value("${db.driverClassName}")
        private String driverClassName;
        @Value("${db.url}")
        private String url;
        @Value("${db.username}")
        private String username;
        @Value("${db.password}")
        private String password;
    
        //第一步:创建一个数据源
        @Bean
        public DataSource getDataSource() {
            BasicDataSource dataSource=new BasicDataSource();
            dataSource.setDriverClassName(driverClassName);
            dataSource.setUrl(url);
            dataSource.setUsername(username);
            dataSource.setPassword(password);
            return dataSource;
        }

      3. 创建支持 Spring 数据源的会话工厂

    //第二步:获得会话工厂
        @Bean(name="sqlSessionFactory")
        public SqlSessionFactory getSessionFactory() {
            SqlSessionFactoryBean factoryBean=new SqlSessionFactoryBean();
            //指定使用的数据源
            factoryBean.setDataSource(this.getDataSource());
            try {
                factoryBean.afterPropertiesSet();
                return factoryBean.getObject();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }

      4. 扫描映射接口的动态对象到 Spring 容器里面

    //扫描映射接口的动态对象到Spring容器
    @MapperScan(basePackages="cn.gzsxt.mapper",annotationClass=Mapper.class)

      5. 配置事务代理

    @EnableTransactionManagement //<tx:annotation-driver>   ////第四步:配置事务代理
        @Bean   //
        public DataSourceTransactionManager getDataSourceTransactionManager() {
            DataSourceTransactionManager dstm=new DataSourceTransactionManager();
            //指定需要事务代理的数据源
            dstm.setDataSource(this.getDataSource());
            return dstm;
        }

      6. 删除之前 Mybatis 帮助类以及配置文件。因为 Mybatis 配置好整合以后,已经交由 Spring 管理了。所以不需要原来的配置文件以及帮助类了!!

      7. 修改映射接口增加 @Mapper 注解

    package cn.mgy.mapper;
    
    import java.util.Map;
    
    import org.apache.ibatis.annotations.Insert;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Options;
    
    /**
     * 管理员映射接口,用于操作tb_admin表
     * 
     * @author ranger
     *
     */
    @Mapper //增加扫描注解!!!
    public interface AdminMapper {
    
        /**
         * 增加管理员记录
         * 
         * @param admin
         * @return
         */
        @Insert("INSERT INTO tb_admin(admin_name, admin_account, admin_pwd, admin_status, admin_create_date, role_id) VALUES (#{admin_name}, #{admin_account}, #{admin_pwd}, #{admin_status}, #{admin_create_date}, #{role_id})")
        @Options(useGeneratedKeys = true, keyProperty = "admin_id")
        int insert(Map<String, Object> admin);
    
    }

      8. 编写一个测试类测试

    package cn.mgy.test.mapper;
    
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    
    import cn.mgy.config.ContextConfig;
    import cn.mgy.config.DataConfig;
    import cn.mgy.mapper.AdminMapper;
    
    @RunWith(value=SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes= {ContextConfig.class,DataConfig.class})
    @WebAppConfiguration //声明该单元测试在SpringMVC项目里面的
    public class AdminMapperTest {
        
        @Autowired
        private AdminMapper adminMapper;
        
        @Test
        public void insert() {
            Map<String, Object> admin=new HashMap<String, Object>();
            admin.put("admin_name", "ranger");
            admin.put("admin_create_date", new Date());
            adminMapper.insert(admin);
            System.out.println(admin.get("admin_id"));
            
        }
    
    }

      

      

  • 相关阅读:
    jQuery的动画以及扩展功能
    yii2 redirect重定向
    nvaicat mysql ssh 跳板机(堡垒机???)连接服务器
    Linux下Redis的安装
    深入理解PHP的运行模式
    thinkphp5 如何监听sql?
    thinkphp5 如何使用查询事件?
    layui laydate is not defined
    CSS 实现图片灰度效果 兼容各种浏览器
    PHP基础学习----函数
  • 原文地址:https://www.cnblogs.com/maigy/p/10789837.html
Copyright © 2011-2022 走看看