MyBatis学习笔记——MyBatis的输入核心(掌握)
完整学习路线:https://blog.csdn.net/qq_40163148/article/details/89668242
输入映射
注意这里我们按照mybatis开发规范使用的是mapper动态代理的方法
需求:完成用户信息的综合查询,需要传入查询条件很复杂(可能包括用户信息,其他信息,比如商品,订单的)
这种方式很重要也很常用
1.自定义包装类型pojo
针对上边的需求,建议使用自定义的pojo
在包装类型的pojo中将复杂的查询条件包装进去
在这里我们定义了一个名为UserQueryVo的baen表示把表示层和持久层结合的简单bean
package com.lipengge.mybatis.bean;
public class UserQueryVo {
/*
* UserQueryVo是一种是表现层和持久层结合的简单javabean
*/
private UserCustom userCustom;
public UserCustom getUserCustom() {
return userCustom;
}
public void setUserCustom(UserCustom userCustom) {
this.userCustom = userCustom;
}
//这里根据需求还可以创建许多这样的类型
}
里面的UserCustom是一个继承User的类用来丰富User的属性因为以后User(MyBatis逆向工程)会自动生成,所以尽量不要修改User而是通过继承来实现自己所需要的bean
package com.lipengge.mybatis.bean;
public class UserCustom extends User{
//针对User逆向工程会生成我们最好不要改而是通过继承来创建我们自己需要的对象比如UserCustom类
}
2.mapper.xml
在UserMapper.xml中定义用户信息综合查询(查询条件复杂,通过高级查询进行复杂关联查询)
<!--
UserQueryVo:这里之所以可以直接用类名是因为在SqlMapConfig里定义了别名
UserCustom:同上
这里输入的参数是我们定义好的包装的pojo类
输出映射是我们的UserCustom
#{userCustom.user_sex}取出包装pojo的性别这里的userCustom一定要和UserQueryVo里定义的一模一样
${userCustom.user_name}取出包装pojo的姓名
-->
<select id="findUserList" parameterType="UserQueryVo" resultType="UserCustom">
select * from userdb where userdb.user_sex=#{userCustom.user_sex} and userdb.user_name like '%${userCustom.user_name}%'
</select>
3.mapper.java
package com.lipengge.mybatis.mapper;
import java.util.List;
import com.lipengge.mybatis.bean.User;
import com.lipengge.mybatis.bean.UserCustom;
import com.lipengge.mybatis.bean.UserQueryVo;
public interface UserMapper {
/*要写mapper.xml映射文件(和User.xml文件是相同的只不过改动了namespace)
* mybatis自动代理开发规范:
* 特别重要:mapper.xml中的namespace必须和mapper.java中的全限定性名一致(com.lipengge.mybaits.UserMapper)
* 不要忘了在SqlMapConfig.xml中配置mapper.xml
* 1.mapper.java接口函数名必须和statement的id一致
* 2.mapper.java接口函数参数必须和mapper.xml中的一致
* 3.mapper.java接口函数返回类型必须和mapper.xml中的一致
* 使用须知:
* 4.如果mapper返回单个pojo对象则代理对象内部通过selectOne()来实现
* 5.如果mapper返回多个pojo对象则代理对象内部通过selectList()来实现
*/
//1.根据id查询用户
public User findUserById(int id) throws Exception;
//2.根据name查询用户模糊查询
public List<User> findUserByName(String name) throws Exception;
//3.插入用户
public void insertUserById(User user) throws Exception;
//4.删除用户
public void deleteUserById(int id) throws Exception;
//5.用户信息综合查寻
public List<UserCustom> findUserList(UserQueryVo userQueryVo) throws Exception;
//6.用户信息综合查询总数
public int findUserCount(UserQueryVo userQueryVo) throws Exception;
//7.根据id查询用户(别名查询)
public User findUserByIdResultMap(int id) throws Exception;
}
4.测试类
package com.lipengge.mybatis.first;
import static org.junit.Assert.*;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import com.lipengge.mybatis.bean.User;
import com.lipengge.mybatis.bean.UserCustom;
import com.lipengge.mybatis.bean.UserQueryVo;
import com.lipengge.mybatis.mapper.UserMapper;
public class TestMapper {
private SqlSessionFactory ssf;
@Before
public void setUp() throws Exception {
String resource="SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
ssf= new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void test() throws Exception {
SqlSession openSession = ssf.openSession();
//mybatis自动生成usermapper代理对象
UserMapper um=openSession.getMapper(UserMapper.class);
// System.out.println(um.findUserById(6));
// System.out.println(um.findUserByName("振川"));
// User user=new User();
// user.setUser_age(63);
// user.setUser_name("王八蛋");
// user.setUser_name("男");
// um.insertUserById(user);
// System.out.println(user.getId());
um.deleteUserById(22);
UserQueryVo userQueryvo=new UserQueryVo();
UserCustom userCustom=new UserCustom();
userCustom.setUser_sex("男");
userCustom.setUser_name("振川");
userQueryvo.setUserCustom(userCustom);
System.out.println(um.findUserCount(userQueryvo));
System.out.println(um.findUserList(userQueryvo));
// System.out.println(um.findUserByIdResultMap(6));
openSession.close();
}
}