Mybatis入门2

2019-04-12  本文已影响0人  itzhouq的笔记

mybatis02

1. 映射文件

1.1 输入映射

/mybatis-day02/src/com/itzhouq/mybatis/mapper/UserMapper.xml

<?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="com.itzhouq.mybatis.mapper.UserMapper">
  <!-- statementId -->
  <select id="findById" parameterType="int" resultType="com.itzhouq.mybatis.pojo.User" >
      select * from user where id = #{id}
  </select>
  
  <insert id="insertUser" parameterType="com.itzhouq.mybatis.pojo.User">
      <selectKey resultType="int" keyProperty="id" order="AFTER">
          <!-- 返回当前事务最后产生的id值 -->
          SELECT LAST_INSERT_ID();
      </selectKey>
      insert into user(username, birthday, sex, address) values(#{username}, #{birthday}, #{sex}, #{address});
  </insert>
  <select id="findUserByMap" parameterType="map" resultType="com.itzhouq.mybatis.pojo.User">
      select * from user where username like '%${username}%' and sex = #{sex} and address=#{address}
  </select>
  
</mapper>


/mybatis-day02/src/com/itzhouq/mybatis/mapper/UserMapper.java

package com.itzhouq.mybatis.mapper;

import java.util.List;
import java.util.Map;

import com.itzhouq.mybatis.pojo.User;

public interface UserMapper {
  public User findById(int id);
  
  public void insertUser(User user);
  //映射参数为map类型
  public List<User> findUserByMap(Map<String, Object> map);
}


/mybatis-day02/src/com/itzhouq/mybatis/test/UserMapperTest.java

package com.itzhouq.mybatis.test;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.itzhouq.mybatis.mapper.UserMapper;
import com.itzhouq.mybatis.pojo.User;

public class UserMapperTest {
  SqlSessionFactory sqlSessionFactory = null;
  @Before
  public void init() throws IOException {
      SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
      sqlSessionFactory = builder.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
  }
  
  @Test
  public void testFindById() {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      User user = mapper.findById(28);
      System.out.println(user);
      sqlSession.close();
  }
  
  @Test
  public void testFindByMap() {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      HashMap<String, Object> map = new HashMap<String, Object>();
//        select * from user where username like '%张%' and sex = '1' and address='河南郑州'
//        select * from user where username like '%${username}%' and sex = #{sex} and address=#{address}
      map.put("username", "张");
      map.put("sex", "1");
      map.put("address", "河南郑州");
      
      List<User> users= mapper.findUserByMap(map);
      System.out.println(users);
      sqlSession.close();
  }
  
}


在pojo中新建一个类QueryVo

/mybatis-day02/src/com/itzhouq/mybatis/pojo/QueryVo.java

package com.itzhouq.mybatis.pojo;

public class QueryVo {
  private User user;

  public User getUser() {
      return user;
  }
  public void setUser(User user) {
      this.user = user;
  }
}

接口中/mybatis-day02/src/com/itzhouq/mybatis/mapper/UserMapper.java

package com.itzhouq.mybatis.mapper;

import java.util.List;
import java.util.Map;

import com.itzhouq.mybatis.pojo.QueryVo;
import com.itzhouq.mybatis.pojo.User;

public interface UserMapper {
  public User findById(int id);
  
  public void insertUser(User user);
  //映射参数为map类型
  public List<User> findUserByMap(Map<String, Object> map);
  //映射参数为包装的POJO类型
  public List<User> findUserByQueryVo(QueryVo queryVo);

}

测试文件中/mybatis-day02/src/com/itzhouq/mybatis/mapper/UserMapper.xml添加


  <select id="findUserByQueryVo" parameterType="queryVo" resultType="user">
  <!-- queryVo
          user
              username -->
      select * from user where username like '%${user.username}%'
  </select>

测试类/mybatis-day02/src/com/itzhouq/mybatis/test/UserMapperTest.java

@Test
  public void testFindByQueryVo() {
      SqlSession sqlSession = sqlSessionFactory.openSession();
      UserMapper mapper = sqlSession.getMapper(UserMapper.class);
      QueryVo queryVo = new QueryVo();
      User user = new User();
      user.setUsername("张");
      queryVo.setUser(user);
      List<User> users= mapper.findUserByQueryVo(queryVo);
      System.out.println(users);
      sqlSession.close();
  }

1.2 输出映射

1.3 resultMap

resultMap作用:当实体类的属性名和表的字段名不一致时,需要手动映射。

复制数据库中的user表为user_copy1,更改其中的username和sex字段,这时候这两个字段和实体类User中的属性名就不一致了。

更改后的表和类需要正常映射的话,需要手动配置resultMap

<resultMap id="findById3ResultMap" type="user">
    <id column="id" property="id"/>
    <result column="user_name" property="username"/>
    <result column="gender" property="sex"/>
    <!-- <result column="birthday" property="birthday"/>
  <result column="address" property="address"/> -->
</resultMap>

<select id="findById3" parameterType="int" resultMap="findById3ResultMap" >
    select * from user_copy1 where id = #{id}
</select>

2. 动态SQL

2.1 if和where

2.2 foreach循环

2.3 sql片段 sql+include

2.4 set

4. 关联查询

4.1 商品订单数据模型

商品订单数据模型

4.2 一对一查询

4.2.1 方法一:

4.2.2 方法2:

4.3 一对多查询


上一篇 下一篇

猜你喜欢

热点阅读