如何快速學習使用mybatis以及總結

第一步 讓我來介紹下初學者怎么快速更好的使用mybatis這個框架

     
         使用mybatis的話,每個Dao就對于一個相應的xml文件,我來給個例子個大家看,先要配置好環(huán)境。在application.xml里面

        <!-- c3p0 connection pool configuration 數(shù)據(jù)庫的配置 -->
            <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
                destroy-method="close">
                <property name="driverClass" value="${jdbc.driverClass}" />        <!-- 數(shù)據(jù)庫驅動 -->
                <property name="jdbcUrl" value="${jdbc.url}" />        <!-- 連接URL串 -->
                <property name="user" value="${jdbc.user}" />        <!-- 連接用戶名 -->
                <property name="password" value="${jdbc.password}" />        <!-- 連接密碼 -->
                <property name="initialPoolSize" value="${jdbc.initialPoolSize}" />        <!-- 初始化連接池時連接數(shù)量為5個 -->
                <property name="minPoolSize" value="${jdbc.minPoolSize}" />        <!-- 允許最小連接數(shù)量為5個 -->
                <property name="maxPoolSize" value="${jdbc.maxPoolSize}" />        <!-- 允許最大連接數(shù)量為20個 -->
                <property name="numHelperThreads" value="20" />            <!-- 允許最大連接數(shù)量為20個 -->
                <property name="maxStatements" value="100" />        <!-- 允許連接池最大生成100個PreparedStatement對象 -->
                <property name="maxIdleTime" value="3600" />        <!-- 連接有效時間,連接超過3600秒未使用,則該連接丟棄 -->
                <property name="acquireIncrement" value="2" />        <!-- 連接用完時,一次產(chǎn)生的新連接步進值為2 -->
                <property name="acquireRetryAttempts" value="5" />        <!-- 獲取連接失敗后再嘗試10次,再失敗則返回DAOException異常 -->
                <property name="acquireRetryDelay" value="600" />        <!-- 獲取下一次連接時最短間隔600毫秒,有助于提高性能 -->
                <property name="testConnectionOnCheckin" value="true" />        <!-- 檢查連接的有效性,此處小弟不是很懂什么意思 -->
                <property name="idleConnectionTestPeriod" value="1200" />        <!-- 每個1200秒檢查連接對象狀態(tài) -->
                <property name="checkoutTimeout" value="10000" />        <!-- 獲取新連接的超時時間為10000毫秒 -->
            </bean>
         
            <!-- 創(chuàng)建SqlSessionFactory,同時指定數(shù)據(jù)源 -->
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <property name="dataSource" ref="dataSource" />
            </bean>
         
            <!-- 配置事務管理器 -->
            <bean id="transactionManager"
                class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
                <property name="dataSource" ref="dataSource" />
            </bean>
         
            <!--創(chuàng)建數(shù)據(jù)映射器,數(shù)據(jù)映射器必須為接口 -->
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <property name="annotationClass" value="org.springframework.stereotype.Repository" />
                <property name="basePackage" value="com.shishuo.studio.dao" />
            </bean>


    然后我在dao層寫個類
     

        package com.shishuo.studio.dao;
        import java.util.List;
        import org.apache.ibatis.annotations.Param;
        import org.springframework.stereotype.Repository;
        import com.shishuo.studio.entity.TagSkill;
        import com.shishuo.studio.entity.vo.TagSkillVo;
        @Repository
        public interface TagSkillDao {
            /**
             * 增加
             *
             * @param tagSkill
             * @return
             */
            public int addTagSkill(TagSkill tagSkill);
         
            /**
             * 刪除
             *
             * @param skillId
             * @return
             */
            public int deleteTagSkill(@Param("skillId") long skillId);
         
            /**
             *
             * 通過SkillId修改名字
             */
            public int updateNameBySkillId(@Param("skillId") long skillId,
                    @Param("name") String name);
         
            /**
             * 通過Id查詢
             *
             * @param skillId
             * @return
             */
            public TagSkillVo getTagSkillByTagId(@Param("skillId") long skillId);
         
            /**
             * 通過名字查詢
             *
             * @param name
             * @param rows
             * @return
             */
            public TagSkillVo getTagSkillByName(@Param("name") String name);
         
            /**
             * 通過userId得到所有所有自己的技能
             *
             * @param userId
             * @return
             */
            public List<TagSkillVo> getTagSkillListByUserId(@Param("userId") long userId);
        }

    然后再就是對應的XML文件 TagSkill.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.shishuo.studio.dao.TagSkillDao">
         
            <!-- ############################## -->
            <!-- ######         增加                   ###### -->
            <!-- ############################## -->
           
            <insert id="addTagSkill" parameterType="com.shishuo.studio.entity.TagSkill">
                insert into tag_skill
                (name,content,status,createTime)
                values
                (#{name},#{content},#{status},#{createTime})
                <selectKey resultType="long" keyProperty="skillId">
                    SELECT LAST_INSERT_ID()
                </selectKey>
            </insert>
           
            <!-- ############################## -->
            <!-- ######         刪除                   ###### -->
            <!-- ############################## -->
           
            <delete id="deleteTagSkill" parameterType="Long">
                delete from tag_skill where skillId=#{skillId}
            </delete>
           
            <!-- ############################## -->
            <!-- ######         修改                   ###### -->
            <!-- ############################## -->
           
            <update id="updateNameBySkillId">
                update tag_skill set name=#{name} where skillId=#{skillId}
            </update>
            <!-- ############################## -->
            <!-- ######         查詢                   ###### -->
            <!-- ############################## -->
           
            <select id="getTagSkillByTagId" parameterType="Long"
                resultType="com.shishuo.studio.entity.vo.TagSkillVo">
                select * from tag_skill where skillId=#{skillId}
            </select>
           
            <select id="getTagSkillByName"
                resultType="com.shishuo.studio.entity.vo.TagSkillVo">
                select * from tag_skill where name=#{name}
            </select>
           
            <select id="getTagSkillListByUserId"
                resultType="com.shishuo.studio.entity.vo.TagSkillVo">
                SELECT tags.skillId,tags.name,tags.content,tags.status,tags.createTime FROM shishuo.tag_skill  tags,shishuo.teacher_skill  teas where tags.skillId=teas.tagSkillId and userId=#{userId};
            </select>
        </mapper>

    使用經(jīng)驗


    1、要記得在TagSkillDao這個類前添加@Repository這個注解,實體的意思
    2、你發(fā)現(xiàn)了沒有,在xml文件里面的id在那個dao層類里面對應的方法名,然后就是在那個XML文件里面,resultType這個參數(shù)里面和對應方法里面的返回數(shù)據(jù)類型想匹配,記住,如果方法返回是int,記得寫Internet,是包裝類型,不然會出錯的,如果是返回對象的話,或者返回一個對象的集合,resultType里面就要寫這個對象,如果是沒有返回的可以不需要寫,在dao層里面的方法需要傳參數(shù)的話,需要寫parameterType,但是一定要記住是包裝類型,不是基本數(shù)據(jù)類型,在dao層里面的方法如果是要增加,就傳一個對象過來,不需要寫注解,如果是通過Id刪除的話,比如public int deleteTagSkill(@Param("skillId") long skillId);我們在xml文件里面
     

        <delete id="deleteTagSkill" parameterType="Long">
            delete from tag_skill where skillId=#{skillId}
        </delete>

    public int deleteTagSkill(@Param("skillId") long skillId);

 這個#{skillId}就相當于我們函數(shù)里面的參數(shù)skillId,其它的增刪改查都類似。
這些都是一些基本的用法,不知道講明白了沒有,如果不懂的加我QQ:2657607916
 

 

 

 作者:chen.yu
深信服三年半工作經(jīng)驗,目前就職游戲廠商,希望能和大家交流和學習,
微信公眾號:編程入門到禿頭 或掃描下面二維碼
零基礎入門進階人工智能(鏈接)