接口代理的方式实现mybaties
(1)创建表,并加入依赖
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
(2)创建数据模型
@Data
public class User {
private Integer uid;
private String uname;
private String uphone;
}
(3)创建接口
public interface UserMapper {
public List<User> getInfo();
}
(4)创建配置文件(代码基本与昨天一致)
mybatis-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>
<environments default="mydevelopment">
<environment id="mydevelopment">
<!--事务管理-->
<transactionManager type="JDBC"/>
<!--连接池配置-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/>
</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">
<mapper namespace="com.offcn.mapper.UserMapper">
<!--查询-->
<select id="getInfo" resultType="com.offcn.bean.User">
select * from user
</select>
</mapper>
(5)测试代码
public class MybatisTest {
/*使用框架提供的工具类 完成数据操作:查询*/
@Test
public void test1(){
try {
String resource = "mybatis-config.xml";
//将配置文件 读取成为一个输入流对象
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过一个输入流对象和sqlSessionFactoryBuilder构建sqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建一个会话对象
SqlSession session = sqlSessionFactory.openSession();
//List<User>objectList = session.selectList("douser.getInfo");
//UserMapper mapper = MapperProxy类型的对象
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> info = mapper.getInfo();
System.out.println(info.size());
/*数据库的更新操作必须添加事务提交*/
//session.commit();
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
1.第一步:
2.第二步:
解释:帮我们创建接口对象
代理对象=sqlSession.getMapper(userMapper.class);
java设计模式:23种
mybatis用的是代理模式:用的是jdk的动态代理
Proxy–动态代理的核心类 ------>ProxyMapper:代理对象
UserMapper mapper = MapperProxy 类型的对象
涉及到源码
MapperProxy接口的代理对象类型
反射执行接口方法
执行的接口方法具体对应的sql操作
代理的设计模式有一个简单的认识。