zoukankan      html  css  js  c++  java
  • MyBatis入门(六)---mybatis与spring的整合

    一、整合需要

    1.1、方法

    上一章中的数据

    需要spring通过单例方式管理SqlSessionFactory

    spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession

    (spring和mybatis整合自动完成)

    持久层的mapper都需要由spring进行管理

    二、创建项目整合环境

    2.1、创建项目

    2.2、数据

    db.properties

    #数据库配置信息
    #驱动
    driverClass=com.mysql.jdbc.Driver
    #连接url
    jdbcUrl=jdbc:mysql://localhost:3306/mybatis?character=utf8
    #用户名
    user=root
    #密码
    password=root
    #连接池中保留的最小连接数
    minPoolSize=10
    #连接池中保留的最大连接数。Default: 15 
    maxPoolSize=20
    #最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 
    maxIdletime=1800
    #当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3
    acquireIncrement=3
    #连接池中初始化连接数 应在minPoolSize与maxPoolSize之间取值。默认为3
    initialPoolSize=15

    2.3、confinguration

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <!--资源文件  -->
    <properties resource="db.properties"/>
    
    <settings>
    <!--开启延时加载  -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!--关闭立即加载  -->
    <setting name="aggressiveLazyLoading" value="false"/>
    <!--开启二级缓存  -->
    <setting name="cacheEnabled" value="true" />
    </settings>
    <!-- 别名  -->
    <typeAliases>
    <!-- <typeAlias type="com.pb.mybatis.po.User" alias="User"/> -->
    <package name="com.pb.ssm.po"/>
    </typeAliases>
    <!--配置  -->
    
    <environments default="development">
    <environment id="development">
        <!--事务  -->
        <transactionManager type="JDBC"/>
        <!--数据源  -->
        <dataSource type="POOLED">
        <property name="driver" value="${driverClass}"/>
        <property name="url" value="${jdbcUrl}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
        </dataSource>
    </environment>
    </environments>
    <mappers>
        <package name="com.pb.ssm.mapper"/>
    </mappers>
    </configuration>

    2.4 POJO类与接口

    package com.pb.ssm.po;
    
    import java.util.Date;
    
    /**
     * 
    
    * @ClassName: Author
    
    * @Description: TODO(作者)
    
    * @author 刘楠
    
    * @date 2015-10-31 下午12:39:33
    
    *
     */
    public class Author {
    
    
        //作者id
        private Integer authorId;
        //作者姓名
        private String authorUserName;
        //作者密码
        private String authorPassword;
        //作者邮箱
        private String authorEmail;
        //作者介绍
        private String authroBio;
        //注册时间
        private Date registerTime;
        
        
        
        public Integer getAuthorId() {
            return authorId;
        }
        public void setAuthorId(Integer authorId) {
            this.authorId = authorId;
        }
        public String getAuthorUserName() {
            return authorUserName;
        }
        public void setAuthorUserName(String authorUserName) {
            this.authorUserName = authorUserName;
        }
        public String getAuthorPassword() {
            return authorPassword;
        }
        public void setAuthorPassword(String authorPassword) {
            this.authorPassword = authorPassword;
        }
        public String getAuthorEmail() {
            return authorEmail;
        }
        public void setAuthorEmail(String authorEmail) {
            this.authorEmail = authorEmail;
        }
        public String getAuthroBio() {
            return authroBio;
        }
        public void setAuthroBio(String authroBio) {
            this.authroBio = authroBio;
        }
        public Date getRegisterTime() {
            return registerTime;
        }
        public void setRegisterTime(Date registerTime) {
            this.registerTime = registerTime;
        }
        @Override
        public String toString() {
            return "Author [authorId=" + authorId + ", authorUserName="
                    + authorUserName + ", authorPassword=" + authorPassword
                    + ", authorEmail=" + authorEmail + ", authroBio=" + authroBio
                    + ", registerTime=" + registerTime + "]";
        }
        
        
    }

    接口

    package com.pb.ssm.mapper;
    
    import com.pb.ssm.po.Author;
    
    
    public interface AuthorMapper {
    
        /**
         * 
        
        * @Title: findAuthorById
        
        * @Description: TODO(根据id查找)
        
        * @param @param id
        * @param @return    设定文件
        
        * @return Author    返回类型
        
        * @throws
         */
        public Author findAuthorById(int id);
        
        /**
         * 
        
        * @Title: addAuthor
        
        * @Description: TODO(添加)
        
        * @param @param author
        * @param @return    设定文件
        
        * @return int    返回类型
        
        * @throws
         */
        public int addAuthor(Author author);
        /**
         * 
        
        * @Title: updateAuthor
        
        * @Description: TODO(更新)
        
        * @param @param author
        * @param @return    设定文件
        
        * @return int    返回类型
        
        * @throws
         */
        public int updateAuthor(Author author);
        
        /**
         * 删除
        
        * @Title: delteAuthor
        
        * @Description: TODO(根据ID删除)
        
        * @param @param id
        * @param @return    设定文件
        
        * @return int    返回类型
        
        * @throws
         */
        public int delteAuthor(int id);
    }

    mapper.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="com.pb.ssm.mapper.AuthorMapper">
    
    <!--开启本mapper下的二级缓冲 
    type指定为ehcachecache类开
    在ehcache和mybatis的整合包中
     -->
    <cache />
    
    
    
    <!--映射作者Author  -->
    <resultMap type="Author" id="authorResultMap">
    <id property="authorId" column="author_id"/>
    <result property="authorUserName" column="author_username"/>
    <result property="authorPassword" column="author_password"/>
    <result property="authorEmail" column="author_email"/>
    <result property="authroBio" column="author_bio"/>
    <result property="registerTime" column="register_time"/>
    </resultMap>
    <!-- 根据ID查找 -->
    <select id="findAuthorById" parameterType="int" resultMap="authorResultMap">
    select * from author
    where author_id=#{id}
    </select>
    
    
    <!--添加  -->
    <insert id="addAuthor" parameterType="Author" useGeneratedKeys="true" keyProperty="authorId">
    INSERT INTO author(author_username,author_password,author_email,author_bio)
    VALUES(#{authorUserName},#{authorPassword},#{authorEmail},#{authroBio})
    </insert>
    
    <update id="updateAuthor" parameterType="Author">
    update author
    <set>
    <if test="authorUserName!=null and authorUserName!=''">author_username=#{authorUserName},</if>
    <if test="authorPassword!=null and authorPassword!=''">author_password=#{authorPassword},</if>
    <if test="authorEmail!=null and authorEmail!=''">author_email=#{authorEmail},</if>
    <if test="authroBio!=null and authroBio!=''">author_bio=#{authroBio},</if>
    <if test="registerTime!=null">register_time=#{registerTime}</if>
    </set>
    where author_id=#{authorId}
    </update>
    
    <!--删除  -->
    <delete id="delteAuthor" parameterType="int">
    delete from author where author_id=#{authorId}
    </delete>
    </mapper>

    三、使用Mybatis配置文件.xml整合

    3.1、写ApplicationContext.xml

    <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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
    
    
    <!--加载配置文件  -->
    <context:property-placeholder location="classpath:db.properties"/>
    <!--配置数据源 
    使用第三方数据源
    也可以使用dbcp
    或者 spring自带的:org.springframework.jdbc.datasource.DriverManagerDataSource
     -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.DataSources" destroy-method="close">
    <!--加载数据库驱动  -->
    <property name="driverClass" value="${driverClass}"/>
    <!--连接数据库的URL  -->
    <property name="jdbcUrl" value="#{jdbcUrl}"/>
    <!--连接数据库的用户名和密码  -->
    <property name="user" value="${user}"/>
    <property name="password" value="${password}"/>
    <!-- 连接池中保留的最小连接数 -->
    <property name="minPoolSize" value="${minPoolSize}"/>
    <!-- 连接池中保留的最大连接数 -->
    <property name="maxPoolSize" value="${maxPoolSize}"/>
    <!-- 最大空闲时间 -->
    <property name="maxIdletime" value="${maxIdletime}"/>
    <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3  -->
    <property name="acquireIncrement" value="${acquireIncrement}"/>
    <!--连接池中初始化连接数  应在minPoolSize与maxPoolSize之间取值。默认为3-->
    <property name="initialPoolSize" value="${initialPoolSize}"/>
    </bean>
    
    <!--配置SqlSessionFacotry  在mybatis-spring包中-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--注入数据源  ,将上面的数据源注入-->
    <property name="dataSource" ref="dataSource" />
    <!-- 将mybatis的配置文件注入-->
    <property name="configLocation" value="configuration.xml"/> </bean>

    3.2、测试

    package com.pb.ssm.mapper;
    
    import java.io.InputStream;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Before;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.pb.ssm.po.Author;
    
    public class AuthorMapperTest {
        private ApplicationContext applicationContext;
    
        @Before
        public void setUp() throws Exception {
            applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
        }
    
        @Test
        public void testFindAuthorById() {
            
    
            AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
            Author author = authorMapper.findAuthorById(2);
            System.out.println(author);
        
        }
    
        @Test
        public void testAddAuthor() {
            // 获取会话工厂
            AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
            
            Author author=new Author();
            author.setAuthorUserName("程序猿");
            author.setAuthorPassword("QWERdlfdad");
            author.setAuthorEmail("QWER@qq.com");
            
            
            int  num = authorMapper.addAuthor(author);
        
            System.out.println("num="+num);
            System.out.println("添加后的ID:"+author.getAuthorId());
        }
    
        @Test
        public void testUpdateAuthor() {
            // 获取会话工厂
            AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
            Author author = authorMapper.findAuthorById(13);
            author.setAuthroBio("天天写代码");
            author.setAuthorUserName("码农");
            int num=authorMapper.updateAuthor(author);
        
            System.out.println("num="+num);
            System.out.println(author);
        }
    
        @Test
        public void testDeleteAuthor() {
            // 获取会话工厂
            AuthorMapper authorMapper = (AuthorMapper) applicationContext.getBean("authorMapper");
            int num= authorMapper.delteAuthor(13);
            
        }
    
    }

    四、不使用mybatis配置文件

    4.1、写ApplicationContext.xml

    <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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.2.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd">
    
    <!--开启自动扫描  -->
    <!-- <context:component-scan base-package="com.pb.ssm"/> -->
    <!--加载配置文件  -->
    <context:property-placeholder location="db.properties"/>
    <!--配置数据源 
    使用第三方数据源
    也可以使用dbcp
    或者 spring自带的:org.springframework.jdbc.datasource.DriverManagerDataSource
     -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <!--加载数据库驱动  -->
    <property name="driverClass" value="${driverClass}"/>
    <!--连接数据库的URL  -->
    <property name="jdbcUrl" value="${jdbcUrl}"/>
    <!--连接数据库的用户名和密码  -->
    <property name="user" value="${user}"/>
    <property name="password" value="${password}"/>
    </bean>
    
    <!--配置SqlSessionFacotry  在mybatis-spring包中-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--注入数据源  ,将上面的数据源注入-->
    <property name="dataSource" ref="dataSource"/>
    <!-- 扫描所有Mapper接口的实现类xml 自动扫描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:com/pb/ssm/mapping/*.xml"/>
    </bean>
    
    <!--为所有的Mapper接口注入sqlSessionFactory  -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--基本路径 指定扫描的包名  -->
    <property name="basePackage" value="com.pb.ssm.mapper"/>
    <!--  注入sqlSessionFactory -->
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    
    
    <!--事务管理  -->
     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 注入数据源  -->
    <property name="dataSource" ref="dataSource"/>
    </bean>
    </beans>

    更改Mapper.xml,因为不能使用别名,所以type要写POJO类的全路径

    <?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.pb.ssm.mapper.AuthorMapper">
    
    <!--映射作者Author  -->
    <resultMap type="com.pb.ssm.po.Author" id="authorResultMap">
    <id property="authorId" column="author_id"/>
    <result property="authorUserName" column="author_username"/>
    <result property="authorPassword" column="author_password"/>
    <result property="authorEmail" column="author_email"/>
    <result property="authroBio" column="author_bio"/>
    <result property="registerTime" column="register_time"/>
    </resultMap>
    <!-- 根据ID查找 -->
    <select id="findAuthorById" parameterType="int" resultMap="authorResultMap">
    select * from author
    where author_id=#{id}
    </select>
    
    
    <!--添加  -->
    <insert id="addAuthor" parameterType="com.pb.ssm.po.Author" useGeneratedKeys="true" keyProperty="authorId">
    INSERT INTO author(author_username,author_password,author_email,author_bio)
    VALUES(#{authorUserName},#{authorPassword},#{authorEmail},#{authroBio})
    </insert>
    
    <update id="updateAuthor" parameterType="com.pb.ssm.po.Author">
    update author
    <set>
    <if test="authorUserName!=null and authorUserName!=''">author_username=#{authorUserName},</if>
    <if test="authorPassword!=null and authorPassword!=''">author_password=#{authorPassword},</if>
    <if test="authorEmail!=null and authorEmail!=''">author_email=#{authorEmail},</if>
    <if test="authroBio!=null and authroBio!=''">author_bio=#{authroBio},</if>
    <if test="registerTime!=null">register_time=#{registerTime}</if>
    </set>
    where author_id=#{authorId}
    </update>
    
    <!--删除  -->
    <delete id="delteAuthor" parameterType="int">
    delete from author where author_id=#{authorId}
    </delete>
    </mapper>

    测试类同上

     

  • 相关阅读:
    链表实现python list数据类型
    python图形图像处理--验证码的制作
    Java封装、继承和抽象的实例
    C#指定几所城市的天气预报
    我的第一个全站项目纪实
    activiti集成spring
    刷新token并继续之前的请求
    微信小程序开发准备
    zookeeper和dubbo
    zookeeper
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4926404.html
Copyright © 2011-2022 走看看