MyBatis-传参数问题


/mybatisv2/src/main/resources/mapper/InterfaceMapper.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">
<!--映射文件,写SQL,namespace唯一标识 -->
<mapper namespace="dao.UserMapperDao">
<!--按名字执行分页查询-->
    <select id="findByPage" resultType="User">
        select * from user where name like concat("%",#{name},"%")
        limit #{startIndex},#{pageSize}
    </select>
</mapper>

/mybatisv2/src/main/resources/sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--xml约束信息 -->
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--引入数据源的配置文件 resource指定文件的位置 -->
    <properties resource="db.properties"></properties>

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>


    <!-- 设置别名 -->
    <typeAliases>
        <typeAlias type="pojo.User" alias="User" />
    </typeAliases>
    <!-- 配置开发环境 ,default用来设置默认的开发环境 -->
    <environments default="test">
        <!--测试环境 -->
        <environment id="test">
            <!--事务管理器:mybatis的事务交个jdbc处理 -->
            <transactionManager type="jdbc"></transactionManager>
            <!--连接池:配置数据源,连接池 -->
            <dataSource type="pooled">
                <!--数据库驱动的名字 -->
                <property name="driver" value="${driver}" />
                <!-- 数据库的url地址 -->
                <property name="url" value="${url}" />
                <!-- 数据库的用户名 -->
                <property name="username" value="${username}" />
                <!-- 数据库的密码 -->
                <property name="password" value="${password}" />
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件 -->
    <mappers>
        <!--引入UserMapper文件 resource指定文件的位置 -->
        <mapper resource="mapper/InterfaceMapper.xml" />
    </mappers>
</configuration>

UserMapperDao

package dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import pojo.User;

/**
 * 这个类用来完成用户表的业务
 * 
 * @author Administrator
 *
 */
public interface UserMapperDao {
    public List<User> findByPage(@Param("name") String name,@Param("startIndex") int startIndex,@Param("pageSize") int pageSize);
}

对应测试类

public class InterfaceTest {
    SqlSessionFactory ssf=null;
    @Before
    public void init(){
        //获取会话工厂
        try {
            InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
            ssf = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    @Test
    public void findByPage(){
        //获取sqlsession,执行SQL
        SqlSession session = ssf.openSession();
        //利用接口方法
        UserMapperDao dao = session.getMapper(UserMapperDao.class);
        List<User> list = dao.findByPage("张三", 0, 3);
        //处理结果
        for (User user : list) {
            System.out.println(user);
        }
        //释放资源
        session.close();
    }
}   

如果这么写参数

public List<User> findByPage(String name,int startIndex,int pageSize);

会有如下绑定异常



当然你还可以这样写

    <select id="findByPage" resultType="User">
        select * from user where name like concat("%",#{0},"%")
        limit #{1},#{2}
    </select>

甚至可以这样写

    <select id="findByPage" resultType="User">
        select * from user where name like concat("%",#{param1},"%")
        limit #{param2},#{param3}
    </select>

但是上述两种方法可读性不好,推荐最上面的写法。

注意,如果用了if标签

    <select id="findOne" parameterType="int" resultType="User">
        select * from user
        <where>
            <if test="id!=0">id=#{id}</if>
        </where>
    </select>

也要用以下写法

    public User findOne(@Param("id")int id);
@Test
        public void findOne(){
            // 2.创建sqlsession对象,执行sql
            SqlSession session = ssf.openSession();
            UserMapperDao dao = session.getMapper(UserMapperDao.class);
            User user=dao.findOne(1);
            System.out.println(user);
            // 4.释放资源
            session.close();
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容