01 mybatis入門案例(mybatis框架CRUD操作)
阿新 • • 發佈:2018-12-31
一、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"> <!– 主鍵欄位的對應 –> <id property="userId" column="id"></id> <!–非主鍵欄位的對應–> <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>