1、指定mapper接口的包名批量加载mapper
规范:保持mapper接口的名称和映射文件的名称相同,且在一个目录中
2、实例
(1)User.java
public class User {
private Integer id;
private String name;
private String password;
//get和set方法
}
(2)UserCustomer.java
public class UserCustomer extends User {
//可以扩展用户的信息
}
(3)UserQueryVo.java
public class UserQueryVo {
private UserCustomer userCustomer;
public UserCustomer getUserCustomer() {
return userCustomer;
}
public void setUserCustomer(UserCustomer userCustomer) {
this.userCustomer = userCustomer;
}
//还可以包装其他的的查询条件,例如订单信息,商品信息等等
}
(4)UserMapper.java
public interface UserMapper {
public UserCustomer findUserListById(UserQueryVo userQueryVo) throws Exception;
public Integer findUserCountById(UserQueryVo userQueryVo) throws Exception;
}
(5)UserMapper.xml
<mapper namespace="com.mybatis.mapper.UserMapper">
<!--
使用resultType进行输出映射,只有查询出来的列名和pojo中的属性名一致,该列才会映射成功
不管是输出pojo单个对象,还是一个pojo对象列表(list包括pojo),在mapper.xml中,resultType指定的类型都是一样的,
但是在mapper.java中,对应的方法返回值类型不一样,
当输出pojo单个对象时,方法返回值是pojo;当输出pojo对象列表,方法返回值是List<pojo>
-->
<select id="findUserListById" parameterType="com.mybatis.bean.UserQueryVo"
resultType="com.mybatis.bean.UserCustomer">
select id,name name_ from user where id=#{userCustomer.id}
</select>
<!-- 查询出来的结果集只有一行且一列,可以使用简单类型进行输出映射 -->
<select id="findUserCountById" parameterType="com.mybatis.bean.UserQueryVo"
resultType="Integer">
select count(*) from user where id=#{userCustomer.id}
</select>
</mapper>
(6)db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/hwd
jdbc.username=root
jdbc.password=123456
(7)mybatis-config.xml
<configuration>
<properties resource="config/db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 加载映射文件 -->
<mappers>
<!-- 通过resource加载单个的映射文件-->
<!-- <mapper resource="com/mybatis/mapper/UserMapper.xml"/> -->
<!--
通过mapper接口加载单个的映射文件
规范:保持mapper接口的名称和映射文件的名称相同,且在一个目录中
-->
<!-- <mapper class="com.mybatis.mapper.UserMapper"/> -->
<!--
指定mapper接口的包名批量加载mapper(推荐使用)
规范:保持mapper接口的名称和映射文件的名称相同,且在一个目录中
-->
<package name="com.mybatis.mapper"/>
</mappers>
</configuration>
(8)UserTest.java
public class UserTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
String resource = "config/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() throws Exception{
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserQueryVo userQueryVo = new UserQueryVo();
UserCustomer userCustomer = new UserCustomer();
userCustomer.setId(1);
userQueryVo.setUserCustomer(userCustomer);
UserCustomer uc = userMapper.findUserListById(userQueryVo);
Integer count = userMapper.findUserCountById(userQueryVo);
System.out.println(uc.toString());
System.out.println(count);
sqlSession.close();
}
}