Mybatis的SQL查询语法

一.mybatis之SQL语句

1.pojo定义
public class User {
    private String userRegisterId;
    private String userPassword;
    private String userNickName;

    public User() {
    }

    public User(String userRegisterId, String userPassword, String userNickName) {
        this.userRegisterId = userRegisterId;
        this.userPassword = userPassword;
        this.userNickName = userNickName;
    }
2.查询语法

2.1.Map多参数查询

映射.xml:

 <!--map接口多参数查询-->
    <select id="findUserByMap" parameterType="map" resultType="user">
        SELECT user_register_id as userRegisterId ,user_password as userPassword FROM [user] WHERE user_register_id = #{userRegisterId} AND user_nickname like CONCAT('%', #{userNickName},'%')
    </select>

java接口:

//map传递多个参数,根据Id和昵称查用户
    public List<User> findUserByMap(Map<String ,Object> MapSelect);

实现:

Map<String, Object> MapSelect = new HashMap<String, Object>();
            MapSelect.put("userRegisterId", "1");
            MapSelect.put("userNickName", "n");
            List<User> users = userDao.findUserByMap(MapSelect);
            System.out.println("Map多参数查询:" + users);

2.2.Param多参数查询

<!--@Param多参数查询,不需要parameterType,@Param参数名字代替Pojo名字-->
    <select id="findUserBaseByParam"  resultType="user">
        SELECT user_register_id as userRegisterId ,user_password as userPassword FROM [user] WHERE user_register_id = #{userRegisterId} AND user_nickname like CONCAT('%', #{userNick},'%')
    </select>
//@Param多参数查询,@Param给参数命名,代替pojo名字,根据名字得到参数值,传到Sql中
    public List<User> findUserBaseByParam(@Param("userRegisterId") String userRegisterId,@Param("userNick") String userNickNam);
 //3..@Param多参数
            List<User> ParamSelect = userDao.findUserBaseByParam("1", "n");
            System.out.println("Param多参数查询:" + ParamSelect);

2.3.Bean多参数查询

<!--Java bean多参数查询-->
    <select id="findUserByBean"  resultType="user">
        SELECT user_register_id as userRegisterId ,user_password as userPassword FROM [user] WHERE user_register_id = #{userRegisterId} AND user_nickname like CONCAT('%', #{userNickName},'%')
    </select>
 //JavaBean传递多个参数,可以另外定义一个参数的pojo
    public List<User> findUserByBean(User user);
//4..JavaBean多参数查询
            User BeanSelect = new User();
            BeanSelect.setUserId("2");
            BeanSelect.setUserNickName("n");
            List<User> selectByBean = userDao.findUserByBean(BeanSelect);
            System.out.println("Bean查询:" + selectByBean);

2.4.混合查询

分页pojo

public class PageParam {
    private int start;
    private int limit;

    public PageParam() {
    }

    public PageParam(int start, int limit) {
        this.start = start;
        this.limit = limit;
    }
<!--混合查询-->
    <!--Top后面是不允许使用问号占位符的,‘@P0’附近有语法错误就是由此引起的。-->
    <!--将Top后面的占位符改为${}的方式,相当于字符串拼接-->
    <select id="findByMix"  resultType="user">
        SELECT TOP ${page.start} user_register_id as userRegisterId ,user_password as userPassword FROM [user] WHERE user_register_id = #{params.userRegisterId} AND user_nickname like CONCAT('%', #{params.userNickName},'%') AND
        user_register_id NOT IN(SELECT TOP ${page.limit} user_register_id FROM [user])
    </select>
 //混合查询
    public List<User> findByMix(@Param("params") User user, @Param("page") PageParam pageParam);
//5.混合查询
            PageParam pageParam = new PageParam();
            pageParam.setStart(2);
            pageParam.setLimit(1);
            List<User> userByMix = userDao.findByMix(BeanSelect, pageParam);
            System.out.println("userByMix:" + userByMix);

2.5.RowBounds分页查询

<!--RowBounds分页-->
    <select id="findByRowBounds" resultType="user">
        <!--只有传入的参数才用别名,不然结果为null-->
        SELECT user_nickname as userNickName FROM [user] WHERE  user_nickname LIKE CONCAT('%', #{uNick}, '%')
    </select>
 //分页参数RowBounds
    public List<User> findByRowBounds(@Param("uNick")String userNickName, RowBounds rowBounds);
//RowBounds
            RowBounds rowBounds = new RowBounds(0,3);
            List<User> userList = userDao.findByRowBounds("nb",rowBounds);
            for(User user:userList)
            System.out.println("RowBounds查询:"+user);

2.6.ResultMap结果集映射

id代表它的标识,type代表使用哪个类作为其映射的类,可以是别名或者全限定名
<resultMap id="userMap" type="user">
        <!--id代表主键,property代表pojo的名称,column代表SQL字段名-->
        <id property="userRegisterId" column="user_register_id"/>
        <result property="userPassword" column="user_password"/>
        <result property="userNickName" column="user_nickname"/>
    </resultMap>
<!--Sql语句段-->
    <sql id="selectUser">
        user_register_id ,user_nickname  ,user_password 
    </sql>
    <!--resultMap制定采用哪个resultMap-->
    <select id="getUserResultMap" parameterType="string" resultMap="userMap" >
        <!--Select后面直接是数据库列名就行了-->
        SELECT <include refid="selectUser"/> FROM [user] WHERE user_register_id = #{userRegisterId}
    </select>
//ResultMap
    public List<User> getUserResultMap(String userRegisterId);
//resultMap
            List<User> resultMapSelect = userDao.getUserResultMap("1");
            System.out.println("resultMap查询:"+resultMapSelect);

猜你喜欢

转载自blog.csdn.net/sirius_hly/article/details/80286337
今日推荐