Mybatis 02 mybatis动态代理
mybatis动态代理:
1、创建(UserMapper)Mapper接口,创建相同名称Mapper.xml映射文件,并且保证映射文件和Mapper接口在同一路径下
2、Mapper.xml映射文件的命名空间和接口的全路径一致
<mapper namespace="com.mapper.UserMapper">
3、statement语句的id和Mapper接口中方法名一致
4、parameterType与接口方法参数列表一致,resultType与接口返回值一致
配置文件
Mabytis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<!--给指定包下的所有类取别名,别名是类名首字母小写-->
<package name="com.entity"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--数据库连接信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3307/myb?useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 通过包扫描的方式添加所有的映射文件,只适用于动态代理开发-->
<package name="com.mapper"/>
</mappers>
</configuration>
UserMapper.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">
<!--
namespace:名称空间和接口的全路径一致
-->
<mapper namespace="com.mapper.UserMapper">
<!--statement-->
<select id="selectAll" resultType="com.entity.User">
select * from tb_user
</select>
</mapper>
UserMapper.java
package com.mapper;
import com.entity.User;
import java.util.List;
public interface UserMapper {
List<User> selectAll();
}
test
@Test
public void testMapper() throws IOException {
//1. 加载mybatis的核心配置文件,获取 SqlSessionFactory
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2. 获取SqlSession对象,用它来执行sql
SqlSession sqlSession = sqlSessionFactory.openSession();
//3. 执行sql
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> users = mapper.selectAll();
System.out.println(users);
//4. 释放资源
sqlSession.close();
}