一.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);