MyBatis的使用(二)

这里写图片描述

mybatis全局配置参数,全局参数将会影响mybatis的运行行为。
这里写图片描述

<insert id="addCatregory" parameterType="category"  useGeneratedKeys="true" keyProperty="id">
        insert into category(categoryName) values(#{categoryName})
    </insert>
System.out.println(category.getId());//可以获得刚刚加入数据库中数据的id
MyBatis传入参数为list、数组、map的写法

1.foreach
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束,

//dao层接口
public List<BookInfo> findbooks(int[] array);
public BookInfo findbookId(int id);
<!--BookDao.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="dao.BookDao">
<!--解决数据库中字段名与实体类中属性名不同从而无法获值的问题-->
<resultMap type="BookInfo" id="bookinfo">
    <id column="id" property="id"/>
    <result column="book" property="bookName"/>
</resultMap>
<!--sql代码片封装共同的where条件-->
<sql id="book">
    id=#{id}
</sql> 

<select id="findbooks"  resultMap="bookinfo">
select bookName from bookinfo where id in
<foreach collection="array" item="ec" index="di" open="(" separator="," close=")">
    #{ec}
</foreach>      
</select> 

<select id="findbookId" parameterType="int" resultMap="bookinfo">
        select id,book  from bookinfo 
         <where>
        <include refid="book"></include>
        </where>
    </select>

</mapper>

collection属性是在使用foreach的时候最关键的也是最容易出错的,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
(1)如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
(2)如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
(3)如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

2.实体类

public class Employees {  
    private Integer employeeId;  
    private String firstName;  
    private String lastName;  
    private String email;  
    private String phoneNumber;  
    private Date hireDate;  
    private String jobId;  
    private BigDecimal salary;  
    private BigDecimal commissionPct;  
    private Integer managerId;  
    private Short departmentId; 

3.实践-XML

<select id="getEmployeesListParams" resultType="Employees">  
        select *  
        from EMPLOYEES e  
        where e.EMPLOYEE_ID in  
        <foreach collection="list" item="employeeId" index="index"  
            open="(" close=")" separator=",">  
            #{employeeId}  
        </foreach>  
    </select>  

    <!--Array:forech中的collection属性类型是array,collection的值必须是:array,item的值可以随意,Dao接口中参数名字随意 -->  
    <select id="getEmployeesArrayParams" resultType="Employees">  
        select *  
        from EMPLOYEES e  
        where e.EMPLOYEE_ID in
        <foreach collection="array" item="employeeId" index="index"  
            open="(" close=")" separator=",">  
            #{employeeId}  
        </foreach>  
    </select>  

    <!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId -->  
    <select id="getEmployeesMapParams" resultType="Employees">  
        select *  
        from EMPLOYEES e  
        <where>  
            <if test="departmentId!=null and departmentId!=''">  
                e.DEPARTMENT_ID=#{departmentId}  
            </if>  
            <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">  
                AND e.EMPLOYEE_ID in  
                <foreach collection="employeeIdsArray" item="employeeId"  
                    index="index" open="(" close=")" separator=",">  
                    #{employeeId}  
                </foreach>  
            </if>  
        </where>  
    </select>  

4.实践-Mapper(接口)

public interface EmployeesMapper {   

    List<Employees> getEmployeesListParams(List<String> employeeIds);  

    List<Employees> getEmployeesArrayParams(String[] employeeIds);  

    List<Employees> getEmployeesMapParams(Map<String,Object> params);  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值