Mybatis(三)返回值四.註解配置
阿新 • • 發佈:2018-12-01
一. Mybatis返回值
MyBatis中在查詢進行select對映的時候,返回型別可以用resultType,也可以用resultMap,resultType是直接表示返回型別的,而resultMap則是對外部ResultMap的引用,但是resultType跟resultMap不能同時存在。
在MyBatis進行查詢對映時,其實查詢出來的每一個屬性都是放在一個對應的Map裡面的,其中鍵是屬性名,值則是其對應的值。
①當提供的返回型別屬性是resultType時,MyBatis會將Map裡面的鍵值對取出賦給resultType所指定的物件對應的屬性。其實MyBatis的每一個查詢對映的返回型別都是ResultMap,只是當提供的返回型別屬性resultType的時候,MyBatis自動的給對應的值賦給resultType所指定物件的屬性。
②當提供的返回型別是resultMap時,因為Map不能很好表示領域模型,就需要自己再進一步的把它轉化為對應的物件,這常常在複雜查詢中很有作用(association,Collection),
<resultMap type="com.softjx.model.User" id="UserMap"> <result column="t_id" property="id"/> <result column="t_username" property="username" /> <result column="t_password" property="password"/> </resultMap> <!-- 查詢資料表中的所有記錄,並封裝User物件集合 --> <select id="selectAll" resultMap="UserMap"> select * from t_user </select> <!-- 根據id查詢資料表中的一條記錄,並封裝User物件 --> <select id="selectById" resultMap="UserMap"> select * from t_user where t_id=#{id}; </select> //統計id>?記錄數 public int coutUser(Integer id); //統計id>?記錄數 <select id="coutUser" resultType="int"> select count(*) from t_user where t_id>#{id}; </select>
二. Mybatis註解配置
Mybatis中使用註解,就不需要編寫mapper.xml檔案,直接在介面程式碼中使用註解。
1、mybatis的全域性配置檔案要修改,指向介面檔案路
<mappers> <mapper class="com.softjx.dao.UserMapper"/> </mappers>
2、不用編寫mapper.xml檔案,寫介面,在介面中使用註解
@Select("select t_id as id,t_username username,t_password as password from t_user") //@Select("select * from t_user")//不好自動填充javabean中的資料 //@ResultType(User.class)//不寫沒有關係 public List<User> selectAll(); @Select("select t_id as id,t_username username,t_password as password from t_user where t_id=#{id}") //@Select("select * from t_user where t_id=#{id}")//不好自動填充javabean中的資料 //@ResultType(User.class)//不寫沒有關係 public User selectById(int id); @Select("select t_id as id,t_username username,t_password as password from t_user where t_id > #{a} and t_username=#{b}") @ResultType(User.class) public List<User> selectByNameId(Map<String, Object> map); @Select("select t_id as id,t_username username,t_password as password from t_user where t_id > #{0} and t_username=#{1}") @ResultType(User.class) public List<User> selectByNameId1(Integer id,String ame); @Select("select t_id as id,t_username username,t_password as password from t_user where t_id > #{id} and t_username=#{name}") @ResultType(User.class) public List<User> selectByNameId2(@Param("id")Integer id,@Param("name")String name); @Select("select * from t_user") @Results({@Result(property="id",column="t_id") ,@Result(property="username",column="t_username") ,@Result(property="password",column="t_password") }) public List<User> selectAllUsers(); @Insert("insert into t_user (t_username,t_password) values (#{username},#{password})") public int insertUser(User user); @Update("update t_user set t_username=#{username},t_password=#{password} where t_id=#{id}") public int updateUser(User user); @Delete("delete from t_user where t_id=#{a}") public int deleteUser(int id);
3、編寫測試類與以前一樣,沒有區別。