標籤:
【工程】
【代碼實現】
【user.java】
package com.Higgin.Mybatis.po;import java.util.Date;public class User { //屬性名稱和資料庫表欄位對應 private int id; private String username; private String sex; private Date birthday; private String address; //對應的get、set方法}
【UserCustom.java】
package com.Higgin.Mybatis.po;/*可以用於擴充使用者的資訊*/public class UserCustom extends User{ //如果需要可以在這裡增加拓展的具體資訊 }
【UserQueryVo.java】
package com.Higgin.Mybatis.po;/** * 需求: * 完成使用者資訊的總和查詢,需要傳入查詢條件很複雜(可能還包括使用者資訊、其他資訊、比如商品、訂單等) * 針對上述需求,建議使用自訂的封裝類型的pojo * 在封裝類中將複雜的查詢條件封裝進去 */public class UserQueryVo { //在這裡封裝所需的查詢條件 //使用者查詢條件 private UserCustom userCustom; //這裡對應著上邊的UserCustomer變數 public UserCustom getUserCustom() { return userCustom; } public void setUserCustom(UserCustom userCustom) { this.userCustom = userCustom; }}
【UserMapper.xml】 //配置非常重要!!!!!,namespace必須對應相應的介面名稱:com.Higgin.Mybatis.mapper.UserMapper
<mapper namespace="com.Higgin.Mybatis.mapper.UserMapper"> <!-- 使用者資訊的綜合查詢(複雜查詢) #{userCustom.sex}:取出pojo封裝對象中的"性別"值 #{userCusotm.username}:取出pojo封裝類中使用者名稱稱 --> <select id="findUserList" parameterType="com.Higgin.Mybatis.po.UserQueryVo" resultType="com.Higgin.Mybatis.po.UserCustom"> SELECT * FROM USER WHERE user.sex =#{userCustom.sex} AND user.username LIKE ‘%${userCustom.username}%‘ </select> </mapper>
【UserMapper.java】介面,UserMapper.java介面中的方法:findUserList和UserMApper.xml中的方法名要一致
package com.Higgin.Mybatis.mapper;import java.util.List;import com.Higgin.Mybatis.po.User;import com.Higgin.Mybatis.po.UserCustom;import com.Higgin.Mybatis.po.UserQueryVo;public interface UserMapper { //使用者資訊綜合查詢findUserList public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
}
【SqlMapperCongfg.xml】 //添加一個負載檔案,這個檔案會在測試類別中被載入
<!-- 載入對應檔 --> <mappers> <mapper resource="sqlmap/user.xml"/> <mapper resource="mapper/UserMapper.xml"/> </mappers>
【UserMapperTest.java】 //測試類別
public class UserMapperTest { private SqlSessionFactory sqlSessionFactory ; @Before public void setUp() throws Exception { //建立sqlSessionfactory //MyBatis設定檔 String resource="SqlMapConfig.xml"; //得到設定檔流 InputStream inputStream=Resources.getResourceAsStream(resource); //建立會話工廠,傳入MyBatis的設定檔資訊 sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream); }/** * 使用者資訊的綜合複雜查詢 * @throws Exception */ @Test public void testFindUserList() throws Exception { SqlSession sqlSession =sqlSessionFactory.openSession(); //建立一個UserMapper對象,Mybatis自動產生mapper代理對象 UserMapper userMapper=sqlSession.getMapper(UserMapper.class); //建立封裝對象,設定查詢條件 UserQueryVo userQueryVo=new UserQueryVo(); UserCustom userCustom=new UserCustom(); userCustom.setSex("1"); userCustom.setUsername("6"); userQueryVo.setUserCustom(userCustom); //調用UserMapper的方法 List<UserCustom> list=userMapper.findUserList(userQueryVo); System.out.println(list.size()); }}
【運行結果】
【debug的list的資料,所有性別為“1”,username中包含"6"的資料群組】
12_複雜查詢01_Mapper代理實現