MyBatis 之 mapper.xml(一)

mapper.xml 映射文件是 MyBatis 的核心,定義了操做數據庫的 sql,每一個sql 是一個statement。
java

  1. parameterType(輸入類型),輸入類型包括:基本類型、pojo對象類型、hashmap、sql

    a. #{} 與 ${}數據庫

       #{} 是向 prepareStatement 中的預處理語句中設置參數值,表示一個佔位符,至關於 ? 。使用佔位符 #{} 能夠有效防止sql 注入,在使用時不須要關心參數值的類型,mybatis 會根據參數值的類型調用不一樣的statement 設置參數值的方法。注意:#{} 中的參數名 一般和 mapper 接口的形參名稱相同,也能夠設置成任意值session

       ${} 與 #{} 不一樣,${} 是將參數值不加修飾的拼接在 sql 中,至關於 JDBC 的 statement 拼接sql,不能防止sql注入。可是有時候會使用比較方法:以下:mybatis

    1. <!-- 根據用戶名查詢用戶信息 -->
      <select id="findUserByUsername" parameterType="string" resultType="user">
      	select * from users where username like '%${value}%'
      </select>
      	
      <!-- 綜合查詢用戶信息 -->
      <select id="findUserList" parameterType="user" resultType="user">
      	select * from users where username like '%${username}%' and sex = #{sex}
      </select>

      注意:若是 parameterType 是基本類型,那麼${變量名} 中變量名必須是value;若是是 pojo 對象類型,那麼變量名是 pojo 對象的屬性名app

    2. 基本類型--不作介紹了ide

    3. pojo對象類型:上面代碼第二個<select> 中 parameterType 就是 User 對象類型,可直接調用該對象的屬性this

    4. public List<User> findUserList() throws Exception {
      	SqlSession sqlSession = sqlSessionFactory.openSession();
      	UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
      		
      	User user = new User();
      	user.setUsername("Anna");
      	user.setSex("0");
      		
      	List<User> users = usermapper.findUserList(user);
      	System.out.println(users.size());
      	Iterator<User> iterator = users.iterator();
      	while (iterator.hasNext()) {
      		User user2 = iterator.next(); 
      		System.out.println(user2);
      	}
      	return users;
      }
    5. hashmap類型:代碼中 HashMap 中的key 是須要硬編碼的,因此 HashMap 用的很少。編碼

    6. <!-- 經過 hashmap 查詢 -->
      <select id="findUserListByHashmap" parameterType="hashmap" resultType="user">
      	select * from users where username like '%${username}%' and sex = #{sex}
      </select>
    7. public List<User> findUserListByHashmap() throws Exception {
      	SqlSession sqlSession = sqlSessionFactory.openSession();
      	UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
      		
      	HashMap<String, Object> map = new HashMap<String, Object>();
      	map.put("username", "Anna");
      	map.put("sex", "0");
      		
      	List<User> users = usermapper.findUserListByHashmap(map);
      	System.out.println(users.size());
      	return users;
      }
  2. resultType(輸出類型):基本類型、pojo對象類型(單個)、pojo對象列表spa

    1. 基本類型--很少介紹

    2. pojo 對象類型(單個和列表),在 mapper.xml 中 resultType="User" 是同樣的,區別是在寫 Mapper 接口,以下:mybatis 會根據 Mapper 接口的返回類型 來決定去調用session.selectOne() 仍是 session.selectList() 方法。返回單個pojo對象要保證sql查詢出來的結果集爲單條,使用session.selectOne方法調用,mapper接口使用pojo對象做爲方法返回值。

    3. public User findUserById(int userId) throws Exception;	
      	
      public List<User> findUserByUsername(String username) throws Exception;
  3. resultMap(輸出類型): resultMap 也是一種輸出類型,用於解決 當輸出 pojo 對象的字段和 sql 查詢出來的字段名不對應。 經常使用在一對一關聯查詢、一對多關聯查詢 等。

    1. public class Person {
      	private int id;
      	private String name;
      	private String addr;
      	public int getId() {
      		return id;
      	}
      	public void setId(int id) {
      		this.id = id;
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      	public String getAddr() {
      		return addr;
      	}
      	public void setAddr(String addr) {
      		this.addr = addr;
      	}
      	@Override
      	public String toString() {
      		return "Person [id=" + id + ", name=" + name + ", addr=" + addr + "]";
      	}
      }
    2. <!-- 定義resultMap -->
      <resultMap type="person" id="resultMapPerson">
      	<!-- 結果集的主鍵, property是Person pojo對象的屬性名,userId是sql的列名 -->
      	<id property="id" column="userId"/>
      	<!-- 普通的列 -->
      	<result property="name" column="username"/>
      	<result property="addr" column="address"/>
      </resultMap>
      	
      <!-- 綜合查詢用戶信息,返回resultMap -->
      <select id="findUserListRetrunResultMap" parameterType="user" resultMap="resultMapPerson">
      	select * from users where username like '%${username}%' and sex = #{sex}
      </select>
    3. public void findUserListReturnResultMap() throws Exception {
              SqlSession sqlSession = sqlSessionFactory.openSession();
      	UserMapper usermapper = sqlSession.getMapper(UserMapper.class);
      		
      	User user = new User();
      	user.setUsername("Anna");
      	user.setSex("0");
      		
      	List<Person> list = usermapper.findUserListRetrunResultMap(user);
      	System.out.println(list.size());
      	Iterator<Person> iterator = list.iterator();
      	while (iterator.hasNext()) {
      		Person person = iterator.next(); 
      		System.out.println(person);
      	}
      }
相關文章
相關標籤/搜索