文章目录
  1. 1. 1. mybatis 的条件查询的三个方法实现
    1. 1.1. 1.Map 型(当传入多个参数时可以使用map型)
    2. 1.2. 2.pojo型
    3. 1.3. 3.序列号代替
  2. 2. 2. mybatis 查询时间戳类型(TIMESTAMP) 回显成时间字符串的问题
  3. 3. 3. mybatis中Date和DateTime字段的插入
  4. 4. 4.Mybatis返回list方法

本文主要对mybatis操作mysql的一些注意点进行小结,作为以后开发的参考。

1. mybatis 的条件查询的三个方法实现

Mybatis的多条件查查询,传递参数,
第一种方法 传递map 型,
第二种方法 传递pojo
带三种方法 多个参数如果不封装成Map,就用序列号代替。

如果参数比较多且乱建议用map 型,如果有定义的pojo 则建议用pojo类型,如果传递的参数不多,则建议用序列号代替的方法。

1.Map 型(当传入多个参数时可以使用map型)

例 : mapper.java

//分页查询教师信息 
public List<Teacher> findTeacherByPage(Map<String, Object> map); 
相应地,这里用到了Map接口,就应该引入此接口:import java.util.Map。
 在执行类Collection中,调用findTeacherByPage方法的相关代码如下: 
Map<String,Object> params=new HashMap<String, Object>();
//以name字段升序排序, 
params.put("sort", "name");  
params.put("dir", "asc");  
//查询结果从第0条开始,查询2条记录 
params.put("start", 0);  
params.put("limit", 2);  
//查询职称为教授或副教授的教师 
params.put("title", "%教授");  
//分页查询教师信息 
List<Teacher> teachers=mapper.findTeacherByPage(params); 

可以看出,我们先把参数放在了一个Map中,这样我们就可以在相应的SQL语句中以#{…}的形式引用这些参数了。如下所示:

<selectid="findTeacherByPage"resultMap="upervisorResultMap"
parameterType="java.util.Map">
select * from teacher where title like #{title} order by ${sort} ${dir} limit #{start},#{limit}  
</select>

2.pojo型

2.1 . mapper.xml

<sql id="query_items_where">
 <!-- 使用动态sql,通过if判断,满足条件进行sql拼接
     商品的查询条件需要通过ItemsQueryVo包装对象中itemsCustom属性传递
     ${}字符串的拼接
  -->
 <if test="itemsCustom!=null">
 <if test="itemsCustom.name!=null and itemsCustom.name!=''">
     items.name LIKE'%${itemsCustom.name}%'
 </if>
 </if>
  </sql>

<select id="findItemsList"parameterType="cn.hpu.ssm.po.ItemsQueryVo"  resultType="cn.hpu.ssm.po.ItemsCustom">
 SELECT * FROM items
 <where>
 <include refid="query_items_where"></include>
  </where>
  1. 2 Mapper.java

    public interfaceItemsMapperCustom {
     //商品类表查询
    public List<ItemsCustom> findItemsList (ItemsQueryVo itemsQueryVo)throws Exception;
    }
    

3.Serviceimpl.java 在服务实现类中调用

   public List<ItemsCustom>findItemsList(ItemsQueryVo itemsQueryVo)throws Exception {
   //通过ItemsMapperCustom查询数据库
      //itemsQueryVo从service直接传递到dao
return itemsMapperCustom.findItemsList(itemsQueryVo);
   }

2.3在controller 中调用 itemsCustom可以输入itemsCustom中的某个属性值具体看mapper.xml中的sql片段

@RequestMapping("/queryItems")
public ModelAndView queryItems(HttpServletRequest request,
ItemsQueryVo itemsCustom) throws Exception {
// 调用service查找数据库,查询商品列表,使用静态数据模
   // 测试froward后能否拿到id
   System.out.println(request.getParameter("id"));
   List<ItemsCustom> itemsList = itemsService.findItemsList(itemsCustom);
// 返回ModelAndView
ModelAndView modelAndView = new ModelAndView();
// 相当于requesr的setAttribut,在jsp页面中通过itemsList来取得数据
modelAndView.addObject("itemsList", itemsList);
   // 指定视图
   // 下边的路径在试图解析器中配置前缀和后缀
   modelAndView.setViewName("items/itemsList");
//modelAndView.setViewName("/WEBINF/jsp/items/itemsList.jsp");
   return modelAndView;
}

3.序列号代替

如果不想用map 也不想用pojo可以用序列号代替

Mapper.xml

<select id="login"parameterType="String" resultType="cn.hpu.back.po.Users">
 SELECT *  FROM users WHERE userphone= #{0} AND userpass=#{1}
 </select>

Mapper.java

Users login (String userphone ,String userpass)throwsException;
Serviceimpl.java调用
//登录
   public String logion(Stringuserphone, String userpass) throws Exception {
      // TODO Auto-generated method stub
      Usersstr= usersMapperCustom.login(userphone,userpass);
      Stringresult=null;
      if(str!=null)
        result="ok";    
      else
        result="no";
      return result;
   }

2. mybatis 查询时间戳类型(TIMESTAMP) 回显成时间字符串的问题

mybatis在select查询TIMESTAMP类型的时间时,如果resultType=”java.util.HashMap”,返回的map中时间的类型仍是TIMESTAMP类型,
想要回显成想要的字符串格式,则用时间函数 DATE_FORMAT(datetime,’%Y-%m-%d %H:%i:%s’)
此方法适用于连表查询时 想返回想要的时间串类型

<select id="selectByUserGroupId" parameterType="String" resultType="java.util.HashMap">
    SELECT 
        u.user_id userId,
        u.dept_id deptId,
        u.user_name userName,
        u.user_acc userAcc,
        u.user_pwd userPwd,
        u.user_salt userSalt,
        u.user_state userState,
        u.user_company userCompany,
        u.user_mobile userMobile,
        u.user_email userEmail,
        u.user_last_login_time userLastLoginTime,
        DATE_FORMAT(u.create_time,'%Y-%m-%d %H:%i:%s') createTime,
        u.create_by createBy,
        u.update_time updateTime,
        u.update_by updateBy,
        ud.dept_name deptName,
        ur.role_name roleName,
        ug.user_group_name userGroupName,
        uu.user_ugroup_id userUgroupId
    FROM 
    isomp_user_ugroup uu
        INNER JOIN isomp_user_group ug ON ug.user_group_id = uu.user_group_id,
    isomp_user u
        INNER JOIN isomp_dept ud 
            ON u.dept_id = ud.dept_id
        LEFT JOIN isomp_role ur 
            ON role_id = (SELECT ru.role_id FROM isomp_role_user ru WHERE ru.user_id = u.user_id)    
        WHERE uu.user_id = u.user_id AND uu.user_group_id = #{userGroupId,jdbcType=VARCHAR}
      </select>

3. mybatis中Date和DateTime字段的插入

使用MyBatis3做数据持久层,在字段中有Date和DateTime类型,在插入数据时只要将实体的属性设置成Timestamp就会对应mysql的DateTime类型,
Date会对应mysql的Date类型。

在MyBatis映射文件中要表明映射类型。

<result column="modified_date" jdbcType="TIMESTAMP" property="modified_date" javaType="java.sql.Timestamp" />  
<result column="date" jdbcType="DATE" property="date" javaType="java.util.Date" />  


<result column="modified_date" jdbcType="TIMESTAMP" property="modified_date" javaType="java.sql.Timestamp" />  
<result column="date" jdbcType="DATE" property="date" javaType="java.util.Date" />  

在使用字段的时候也要标明类型

#{modified_date,jdbcType=TIMESTAMP}、#{date,jdbcType=DATE}。

4.Mybatis返回list方法

<mapper namespace="com.mymaven.mybatisdemo.dao.DepartmentMapper">
    <!--配置一个resultMap 指定返回的类型 -->
    <resultMap id="departMent" type="Department">
        <id column="dp_id" property="dp_id" />
        <result column="dp_name" property="dp_name" />
        <result column="cost_center" property="cost_center" />
    </resultMap>


    <!-- 返回一个list的写法 -->
    <select id="queryAllDepartment"  resultMap="departMent" >
        select * from t_department
    </select>                   
</mapper>

注意

<select id=”queryAllDepartment” resultMap=”departMent” 这里返回类型是resultMap,不是ResultType.

文章目录
  1. 1. 1. mybatis 的条件查询的三个方法实现
    1. 1.1. 1.Map 型(当传入多个参数时可以使用map型)
    2. 1.2. 2.pojo型
    3. 1.3. 3.序列号代替
  2. 2. 2. mybatis 查询时间戳类型(TIMESTAMP) 回显成时间字符串的问题
  3. 3. 3. mybatis中Date和DateTime字段的插入
  4. 4. 4.Mybatis返回list方法
Fork me on GitHub