首页 > 代码库 > MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)

MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)

一、字段名与属性名(数据库的名字)不一样怎么办?

  方案一:在小配置中配置一个resultMapper

<!--方案一:resultMapper 字段名与属性名不一致 -->
     <resultMap type="Student" id="StudentMapper">
        <result column="stuname2" property="stuname"/>
    </resultMap> 


   <!-- 查询所有 -->
 <select id="findAll" resultMap="StudentMapper">
      select * from student
    </select>

  方案二:在小配置中的查询语句用as

<!-- 方案二:as别名的方式 -->
 <select id="findAll" resultType="Student">
      select stuname2 as stuname from student
    </select>

 二、Mapper动态代理剔除实现类

第一步改动的地方是小配置的<mapper namespace="cn.happy.dao.IStudentDAO">写到接口

<?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="cn.happy.dao.IStudentDAO">
 
 <!-- 方案二:as别名的方式 -->
 <select id="findAll" resultType="Student">
      select stuname2 as stuname from student
    </select>


</mapper>

第二步是在测试类调用接口的时候用getMapper获取一个接口实现类

public class MyTest {
    IStudentDAO dao;
    @Before
    public void initData() throws IOException{
        SqlSession session = MybatisUtil.getSession();
        //动态踢出实现类
        //首先要改StudentDAO.xml改成<mapper namespace="cn.happy.dao.IStudentDAO">
        dao=session.getMapper(IStudentDAO.class);
    }
    
    /**
     * selectALl学生
     * @throws IOException
     */
    
    @Test
    public void findAll() throws IOException{
        List<Student> list = dao.findAll();
        for (Student student : list) {
            System.out.println(student.getStuname());
            /*System.out.println(student.getStuage());*/
        }
        
    }
    }

三、用Map集合取值和使用索引号

(一)用map集合获取值

  1在接口IStudentDAO定制一个方法

 //多条件查询封装成map
   public List<Student> findStudentMore(Map<String, Object> map);

2在小配置中id=“findStudentMore”要和接口的方法法名要一样

 <!-- 多条件查询-->
<select id="findStudentMore" resultType="Student">
  <!--   mysql数据库 -->
      <!--  select * from student where stuname like % #{stuname} % and stuage>#{stuage} -->
     <!--   orcl数据库 -->
     select * from student where stuname like %||#{stuname}||% and stuage>#{stuage}
    </select>

3在测试类中

/**
     * 多条件查询
     * @throws IOException
     */
    
    @Test
    public void findStudentMore(){
        
        Map<String, Object> maplist=new HashMap<String, Object>();
        maplist.put("stuname", "123");
        maplist.put("stuage", 11);
        List<Student> list = dao.findStudentMore(maplist);
        for (Student student : list) {
            System.out.println(student.getStuname());
        }
        
    }

(二)使用索引

1在接口IStudentDAO定制一个方法

//多条件查询引号
   public List<Student> findStudentByCondition(String name,int age);

2在小配置中id=“findStudentMore”要和接口的方法法名要一样

<select id="findStudentByCondition" resultType="Student">
        <!--  mysql数据库        
         select * from student where stuname like % #{0} % and stuage>#{1}
        orcl数据库 -->
        select * from student where stuname like %||#{0}||% and stuage>#{1}
        
    </select>

3在测试类中

@Test
    public void findStudentByCondition() throws IOException{
        String name="人";
        int age=12;
        List<Student> list = dao.findStudentByCondition(name,age);
        for (Student student : list) {
            System.out.println(student.getStuname());
        }
        
    }

  小总结:

      技术分享

四、智能标签

他们共同用到的是如下

    1定义一个方法在接口中

 public List<Student> findStudentByif(Student stu);

   2测试类

public class MyTest {
    IStudentDAO dao;
    @Before
    public void initData() throws IOException{
        SqlSession session = MybatisUtil.getSession();
        //动态踢出实现类
        //首先要改StudentDAO.xml改成<mapper namespace="cn.happy.dao.IStudentDAO">
        dao=session.getMapper(IStudentDAO.class);
    }
    

    
    
    /**
     * 多条件查询
     * @throws IOException
     */
    
    
    @Test
    public void findStudentByCondition() throws IOException{
        String name="人";
        int age=12;
        Student stu=new Student();
        stu.setStuage(age);
        stu.setStuname(name);
        List<Student> list = dao.findStudentByif(stu);
        for (Student student : list) {
            System.out.println(student.getStuname());
        }
        
    }
    

  3在小配置中的配置

if标签

<!-- 多条件查询 -->
    <select id="findStudentif" resultType="Student">
        select * from student  where 1=1
        
            <if test="stuname!=null">
                and stuname like %||#{stuname}||%
            </if>
            <if test="stuage!=null">
                and stuage>#{stuage}
            </if>
        
    </select>

where标签     注意如果有<where>标签就不需要where 1=1

<!-- 多条件查询 -->
    <select id="findStudentBychoose" resultType="Student">
        select * from student <!-- where 1=1如果有where标签就不需要 -->
        <where>
            <if test="stuname!=null">
                and stuname like %||#{stuname}||%
            </if>
            <if test="stuage!=null">
                and stuage>#{stuage}
            </if>
        </where>
    </select>

choose标签

    <!--多条件查询where 1=1  如果有where标签就不需要-->
    <select id="findStudentByif" resultType="Student">
        select * from student  
        <where>
        <choose>
            <when test="stuname!=null">
            and stuname like %||#{stuname}||%
            
            </when>
            <otherwise>
            </otherwise>
        </choose>
            
            
        </where>
    </select>

 

MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法)