1.1.mybatis

三层架构:

表现层

  用于展示数据

业务层 

  处理业务需求

持久层

  和数据库交互的

什么是mybatis?

  • mybatis 是一个优秀的基于 java 的持久层框架
  • 它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
  • 不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
  • 使用了ORM的思想实现了结果集的封装

什么是ORM思想?

  也叫对象关系映射;

简单来说:

  就是把数据库表和实体类及属性一一对应起来,让我们可以操作实体类就可以改变数据库

 
简单回顾jdbc创建过程
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取数据库链接
connection = DriverManager
.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8","ro
ot", "root");
//定义 sql 语句 ?表示占位符
String sql = "select * from user where username = ?";

//获取预处理 statement
preparedStatement = connection.prepareStatement(sql);
//设置参数,第一个参数为 sql 语句中参数的序号(从 1 开始),第二个参数为设置的
参数值
preparedStatement.setString(1, "王五");
//向数据库发出 sql 执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//遍历查询结果集
while(resultSet.next()){
 System.out.println(resultSet.getString("id")+"
 "+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

 

为什么要用?

  1. 它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,
  2. 不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
  3. 使用了ORM的思想实现了结果集的封装

特别注意:当你完成一下三个条件,那么就可以不用写实现类了

  1. mybatis的映射配置文件的位置必须要和dao接口的包结构相同
  2. 映射配置文件mapper标签的namespace属性,必须是dao接口的全限定类名
  3. 映射配饰文件的操作配置,必须是dao接口的方法名

初学mybatis的环境搭建

第一步:创建maven工程并导入依赖

<!--    打包为jar包-->
    <packaging>jar</packaging>

    <dependencies>
        <!--     导入mybatis依赖   -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>

        <!--        导入mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>

        <!--        导入日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>

        <!--    导入单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

 

第二步:创建实体类和dao的接口

第三步:创建mybatis的主配置文件(SalMapConfig.xml);注意是在resource目录下

<?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="mysql">
        <!--        配置mysql的环境-->
        <environment id="mysql">
            <!--            配置事物的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--            配置数据源连接池-->
            <dataSource type="POOLED">
                <!--                配置连接数据库的四个基本数据-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis?characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 告知 mybatis 映射配置的位置 -->
    <mappers>
        <mapper resource="com/itheima/dao/IUserDao.xml"></mapper>
        <!--之后需要,在resource同级别的目录之下,有一个同名的配置文件-->
    </mappers>

</configuration>

 

第四步:创建映射配置文件(IUserDao.xml);注意是在resource目录下,包的结构必须要和dao接口的结构一致

<?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:必须是dao接口的全限定类名-->
<mapper namespace="com.itheima.dao.IUserDao">
    
    <!--配置查询所有,id:必须是dao接口中的的方法名;
    resultType:把数据封装在哪个对象中,而且要写这个对象的全限定类名-->
    
    <select id="findALL" resultType="">
        select * from user;
    </select>
</mapper>

 

第五步:测试

//        1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");

//        2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);

//        3.使用工厂生产session对象
        SqlSession session = factory.openSession();

//        4.使用session对象创建dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);

//        5.使用代理对象执行接口中的方法
        List<User> user = userDao.findAll();
        for(User user1 : user){
            System.out.println(user1);
        }
//        6.释放资源
        session.close();
        in.close();

...

 

posted @ 2022-11-24 15:38  江南0o0  阅读(20)  评论(0编辑  收藏  举报