mybatis第二天

mybatis第二天

  • 1.mybatis 别名设置和sql片段
      • 1.1对别名进行设置
      • 1.2sql片段设置
  • 2.动态sql
    • 2.1动态组合查询
      • 2.1.1查询类的编写
      • 2.1.2映射文件的编写
      • 2.1.3测试类
    • 2.2动态修改
      • 2.2.1集合在sql中的使用(添加数据)

1.mybatis 别名设置和sql片段

1.1对别名进行设置

在sqlMapConfig.xml中可以对类型设置别名
<typeAliases>
        <typeAlias type="model.Emp" alias="emp"/>
        <typeAlias type="model.Person" alias="peson"/>
    </typeAliases>

1.2sql片段设置

   设置sql片段一般是提取公用的sql在映射文件中写
 <sql id="colums">
        person_id,name,gender,person_addr,birthday
    </sql>

引用sql片段

 <select id="selectAllEmp" resultMap="baseResultMap">
        select <include refid="colums"/> from person
    </select>

2.动态sql

2.1动态组合查询

2.1.1查询类的编写

 设置查询类用来接收属性字段的值
public class PersonQueryCondition extends Person{
    private String name;
    private Integer gender;
    private Date birthday;
    private String personAddr;

    @Override
    public String getName() {
        return name;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Integer getGender() {
        return gender;
    }

    @Override
    public void setGender(Integer gender) {
        this.gender = gender;
    }

    @Override
    public Date getBirthday() {
        return birthday;
    }

    @Override
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String getPersonAddr() {
        return personAddr;
    }

    @Override
    public void setPersonAddr(String personAddr) {
        this.personAddr = personAddr;
    }
}

2.1.2映射文件的编写

这儿的qc是别名
 
<!--
    <where>用于动态条件组合查询,可以去掉where后的第一个and
    -->
    <select id="selectPeron" parameterType="qc" resultMap="baseResultMap">
        select *from person p
        <where>
            <if test="name!=null">
                p.name like '%${name}%'
            </if>
            <if test="gender!=null">
                and p.gender=#{gender}
            </if>
            <if test="personAddr!=null">
                and p.person_addr like '%${personAddr}%'
            </if>
            <if test="birthday!=null">
            <![CDATA[
                and p.birthday< #{birthday}
              ]]>
            </if>
        </where>
    </select>

2.1.3测试类

  @Test
    public void test() {
        SqlSession session = sf.openSession();
        try {
            PersonQueryCondition qc = new PersonQueryCondition();
            qc.setName("信");
            qc.setPersonAddr("打");
            qc.setBirthday(new Date());
            qc.setGender(1);
            List<Person> personList = session.selectList("configure.mapper.PersonMapper.selectPeron",qc);
            for (Person person : personList) {
                System.out.println(person);
            }
        }finally {
            session.close();
        }
    }

2.2动态修改

配置文件

 <!--动态修改 可以去掉where前的第一个“,”-->
    <update id="dynamicUpdate" parameterType="person">
            update person p
            <set>
            /*
            加p.person_id=#{personId}是防止所有条件为空的情况下的,
            不要忘记加上 p.person_id=#{personId},mybatis逆向工程没有这个
            必须手动加上
            */
                 p.person_id=#{personId},
                <if test="name!=null">
                    p.name=#{name},
                </if>
                <if test="gender!=null">
                    p.gender=#{gender},
                </if>
                <if test="personAddr!=null">
                    p.person_addr=#{personAddr},
                </if>
                <if test="birthday!=null">
                    p.birthday=#{birthday}
                </if>
            </set>
            <where>
                 p.person_id=#{personId}
            </where>
    </update>

测试类

 @Test
    public void update() {
        SqlSession session = sf.openSession();
        try {
            Person person = new Person();
            person.setPersonId(1);
            //person.setGender(1);
            session.update("configure.mapper.PersonMapper.dynamicUpdate", person);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }finally {
            session.close();
        }
    }

2.2.1集合在sql中的使用(添加数据)

 解决select *from 表 t where t.xxx in();的问题
 例如:select *from person p where p.person_id in(1,2,3);

配置文件

parameterType只能是map类型 map.put("ids",value),value的值可以是数组,list
foreach是遍历集合组装sql
oepn:以某种字符开始
close:以某种字符结束
separator:以某种字符做分隔
 <!--parameterType只能是map类型 map.put("ids",value),value的值可以是数组,list-->
    <select id="selectPersonByIn" parameterType="map" resultMap="baseResultMap">
         select * from person p  where p.person_id in
        <foreach collection="ids" open="(" close=")" item="id" separator=",">
             #{id}
         </foreach>
    </select>    

测试类

 @Test
    public void selectPerson() {
        SqlSession session = sf.openSession();
        try {
            Integer[] id=new Integer[]{1,2,3};
            Map<String,Object> map=new HashMap<>();
            map.put("ids",id);
            List<Person> personList = session.selectList("configure.mapper.PersonMapper.selectPersonByIn", map);
            for (Person person : personList) {
                System.out.println(person);
            }
        }finally {
            session.close();
        }
    }
批量做入库处理

测试类

 @Test
    public void insertPerson() {
        SqlSession session = sf.openSession();
        try {
            Map<String,Object> map=new HashMap<>();
            List<Person> personList=new ArrayList<>();
            for (int i = 0; i <1000008; i++) {
                Person person = new Person();
                person.setName("张三"+i);
                person.setGender(1);
                SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:SS");
                String date = format.format(new Date());
                person.setBirthday(format.parse(date));
                person.setPersonAddr("北京"+i);
                personList.add(person);
                if (i%100==0) {
                    map.put("personList",personList);
                    session.insert("configure.mapper.PersonMapper.insertPerson", map);
                    //将集合清空
                    personList.clear();
                }
            }
            map.put("personList",personList);
            session.insert("configure.mapper.PersonMapper.insertPerson",map);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }finally {
            session.close();
        }
    }

你可能感兴趣的:(MyBatis)