MyBatis_Day02
第一节、什么是MyBatis
myBatis是一个优秀的持久层框架,在操作数据库是几乎避免了所有的JDBC代码。我们操作数据库时通过对象操作(ORM框架),支持自定的SQL语句(半自动的ORM框架)。
第二节、三层模型(MVC模型)
注意:每一层代码应该严格分离
controller代码—controller包
service代码–service包
持久层代码–dao包
第三节、MyBatis环境搭建
引入相关JAR包
mybatis-3.4.5.jar myBatis核心包
mysql-connector-java-5.1.37.jar 数据库连接包
编写实体类及新建数据库表
private int id;
private String name;
private String pass;
编写对实体类对象操作的接口
//编写数据库操作的接口
public interface UserMapper {
//查询所有用户
List<User> getAllUser();
}
注意:接口本身不具备业务处理能力,要让接口能具有操作数据库的能力,必须对接口进行实现。我们可以通过XML的配置将接口的实现交给MyBaits
问题:怎么交给MyBatis
解决:每一个DAO接口都必须有一个对应的XXXMapper.xml配置文件
编写对应接口Mapper.xml
问题:我不知道怎么写
解决:去官网 https://mybatis.org/mybatis-3/zh/getting-started.html
<?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 声明该文件为一个mapper映射文件
1 每一个mapper有且只能有一个Mapper标签
问题:我怎么映射接口
解决:每一个mapper标签有一个属性 namespace
namespace指向需要映射接口 通过接口的全类名
注意:全类名不要写错 检测:ctrl+鼠标 必须能够跳转
-->
<mapper namespace="com.wnxy.dao.UserMapper">
<!-- mapper中写数据库的操作
注意:myBaits不同的数据库操作有不同的标签
select 查询
delete 删除
insert 插入
update 更新
根据不同的数据库操作,需要选择不同的标签
-->
<!--由于List<User> getAllUser();是一个查询,所有我们用
select
问题:每一个标签上有一id属性 作用:指向特定的方法
问题:MyBatis肯定会将结果集转为对象- 反射-告诉封装规则
解决:resultType 告诉MyBatis
-->
<select id="getAllUser" resultType="com.wnxy.entity.User">
<!-- 需要执行的SQL -->
SELECT * FROM t_user;
</select>
</mapper>
全局配置文件
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。
注意:全局配置文件没有特定的命名,但是我们一般命名为mybatis-config.xml(官网推荐的)
问题:全局配置文件怎么写
解决:找DTD
<?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">
通过xml文件获得SqlFactory
public class SqlSessionFactoryUtil {
private static SqlSessionFactory sqlSessionFactory;
static {
String resource = "config/mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
}