1. 程式人生 > >01 mybatis入門案例(mybatis框架CRUD操作)

01 mybatis入門案例(mybatis框架CRUD操作)

一、mysql的mapper代理方式實現CRUD

不用寫實現類,只需要滿足mapper代理的三個規則

1.對映檔案中namespace要和Dao介面類全名一致

2.對映檔案中statement的id要和Dao介面的方法名稱保持一致

3.對映檔案要和Dao介面在同一個目錄

 

對映檔案中statement的parameterType要和方法的引數一致 

對映檔案中statement的resultType要和方法的返回值一致   ------->注意:resultType不管返回的是單個集合還是單個物件,都使用類全名進行設定

 

mybatis中 #{} 和 ${} 的區別:

    #{} :是佔位符

    ${}:字串拼接

 

  如果傳遞的引數是基本型別,基本型別的包裝類,Sring

        #{任意值}     ${value}

  如果傳遞的引數是pojo型別

    #{}和 ${}裡面傳遞的都是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="cn.itcast.dao.IUserDao">
    <!--配置user類的屬性和user表中的列的對應關係(type="user"是在SqlMapConfig中配置別名了,所以可以直接寫user)-->
   <!-- <resultMap id="userMap" type="user">
        &lt;!&ndash; 主鍵欄位的對應 &ndash;&gt;
        <id property="userId" column="id"></id>
        &lt;!&ndash;非主鍵欄位的對應&ndash;&gt;
        <result property="userName" column="username"></result>
        <result property="userAddress" column="address"></result>
        <result property="userSex" column="sex"></result>
        <result property="userBirthday" column="birthday"></result>
    </resultMap>-->
    <!--根據id查詢使用者-->
    <select id="findById" parameterType="java.lang.Integer" resultType="cn.itcast.domain.User">
        select * from user where id = #{id}
    </select>
    <!--儲存使用者-->
    <insert id="saveUser" parameterType="cn.itcast.domain.User">
        <!--儲存成功後查詢使用者的id-->
        <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="java.lang.Integer">
            select last_insert_id();
        </selectKey>
        insert into user (id,username,birthday,sex,address) values (null,#{username},#{birthday},#{sex},#{address})
    </insert>
    <!--更新使用者-->
    <update id="updateUser" parameterType="user">
      update user set username = #{username},birthday = #{birthday},sex = #{sex},address = #{address} where id = #{id}
    </update>
    <!--根據id刪除使用者-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
      delete from user where id = #{id}
    </delete>
    <!--根據姓名模糊查詢-->
    <select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.domain.User">
        select * from user where username like #{username}
    </select>
    <!--查詢名稱帶 "剛" 的總人數-->
    <select id="findUserByNameCount" parameterType="java.lang.String" resultType="java.lang.Integer">
        select count(*) from user where username like #{username}
    </select>
    <!--查詢帶 "剛"人員資訊-->
    <select id="findUserByNames" parameterType="cn.itcast.domain.QueryVo" resultType="cn.itcast.domain.User">
        select * from user where username like #{user.username}
    </select>
    <!--查詢所有(改變User類,使User的屬性和user表中的列不對應,此時應該用別名來解決)-->
    <!-- <select id="findAll" resultType="cn.itcast.domain.User">
         SELECT
             u.id userId,
             u.username userName,
             u.birthday userBirthday,
             u.address userAddress,
             u.sex userSex
         FROM
         USER u
     </select>-->
    <!--查詢所有(改變User類,使User的屬性和user表中的列不對應,也可以使用resultMap來解決)-->
    <!--<select id="findAll" resultMap="userMap">
       select * from user
    </select>-->
</mapper>

SqlMapConfig.xml配置

 

<?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 1.可以在標籤內部配置連線資料庫的資訊。
                       2.也可以通過屬性引用外部配置檔案資訊,url屬性或者resource屬性
                        resource屬性: 常用的 用於指定配置檔案的位置,是按照類路徑的寫法來寫,並且必須存在於類路徑下-->
    <!--<properties url="file:///D:/ideaProject/mybatis02/src/main/resources/db.properties" >--><!--file://這是一種檔案協議(windows的)-->
    <properties resource="db.properties">
        <!--標籤內部配置資料庫連線資訊(不推薦)-->
        <!-- <property name="driver" value="com.mysql.jdbc.Driver"></property>
                    <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"></property>
                    <property name="username" value="root"></property> <property name="password"
                    value="1234"></property> -->
    </properties>
    <!--配置別名-->
    <!--使用typeAliases配置別名,它只能配置domain中類的別名 -->
    <typeAliases>
        <!--1.typeAlias用於配置別名。type屬性指定的是實體類全限定類名。alias屬性指定別名,當指定了別名就不再區分大小寫-->
        <!--<typeAlias type="cn.itcast.domain.User" alias="user"></typeAlias>-->
        <!-- 用於指定要配置別名的包,當指定之後,該包下的實體類都會註冊別名,並且類名就是別名,不再區分大小寫 -->
        <package name="cn.itcast.domain"></package>
    </typeAliases>
    <!-- 配置 mybatis 的環境 -->
    <environments default="mysql">
        <environment id="mysql">
            <!-- 配置事務的型別 -->
            <transactionManager type="JDBC"/>
            <!-- 配置連線資料庫的資訊:用的是資料來源(連線池) -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!-- 告知 mybatis 對映配置的位置 -->
    <mappers>
        <!--此種方法要求 r mapper  介面名稱和 r mapper-->
        <!--<mapper class="cn.itcast.dao.IUserDao"></mapper>-->
        <!--<mapper resource="cn/itcast/dao/IUserDao.xml"></mapper>-->
        <!-- package標籤是用於指定dao介面所在的包,當指定了之後就不需要在寫mapper以及resource或者class了,大大減少開發時間 -->
        <!--此種方法要求  mar pper  介面名稱和 r mapper  對映檔名稱相同,且放在同一個目錄中-->
        <package name="cn.itcast.dao"></package>
    </mappers>
</configuration>