九点钟☆方向

记录成长点滴

欢迎来到我的个人博客~


Mybatis笔记(二) Mybatis入门案例

目录

Mybatis简介

Mybatis是一个持久层框架,java语言编写的,他封装了jdbc操作的很多细节,是开发者只需要关注sql语句本身而无需关注注册驱动、创建连接等复杂过程,他使用了ORM思想实现了结果集的封装。

ORM:Object Relationl Mapping对象关系映射。简单的说就是把数据库表和实体类及属性对应起来,让我们操作实体类就实现操作数据库表

Mybatis入门(xml方式)

  1. 引入依赖(Mybatis,Mysql)

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
        	<version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>
    
  2. 实体类 User和SQL语句(入门案例为了简单,将数据库表的字段名称与实体类属性保持一致)

    SQL语句:

    CREATE TABLE `user` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(255) DEFAULT NULL,
      `birthday` date DEFAULT NULL,
      `sex` varchar(255) DEFAULT NULL,
      `address` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
    

    实体类:

    import java.io.Serializable;
    import java.util.Date;
    public class User implements Serializable {    
        private Integer id;
        private String username; 
        private Date birthday; 
        private String sex; 
        private String address;
        //  get/set方法省略
        @Override
        public String toString() {
            return "User [id=" + id + ", username=" + username + ", birthday=" + birthday
            + ", sex=" + sex + ", address="
            + address + "]";
            }
    }
    
  3. dao接口 IUserMapper

    public interface IUserDao {
    	//查询所有用户
     	List<User> findAll();
    } 
    
  4. 编写持久层接口的映射文件 IUserMapper.xml

    要求:要和dao接口的路径和名称保持一致

    1602558087865

    <?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.mg.dao.IUserMapper">
        <!-- select标签的id属性取值是dao接口的方法名 -->
        <select id="findAll" resultType="com.mg.entity.User">
            select * from user
        </select>
    </mapper>
    
  5. 编写mybatis主配置文件 SqlMapConfig.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="mysql">
            <environment id="mysql">
                <!-- 配置事务类型 -->
                <transactionManager type="JDBC"></transactionManager>
                <!-- 配置数据源(连接池) -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"></property>
                    <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
                    <property name="username" value="root"></property>
                    <property name="password" value="root"></property>
                </dataSource>
            </environment>
        </environments>
        <!-- mapper文件的注册:指定持久层接口映射文件的位置 -->
        <mappers>
            <mapper resource="com/mg/dao/IUserMapper.xml"></mapper>
        </mappers>
    </configuration>
    
  6. 编写测试类,测试使用

    import com.mg.dao.IUserMapper;
    import com.mg.entity.User;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
       
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
       
    public class MyTest {
        @Test
        public void test1() {
            try {
                //读取配置文件
                InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
                //创建工厂对象。构建者模式,builder就是构建者。好处:把对象的创建细节隐藏,使用者直接调用方			  法即可拿到对象
                SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
                //使用工厂生产SqlSession 工厂模式,可以解耦,降低类之间的依赖关系
                SqlSession sqlSession = factory.openSession();
                //使用SqlSession 创建 dao 接口的代理对象。代理模式,好处是不修改源码的基础上对已有方法增强
                IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
                //使用代理对象执行查询所有方法
                List<User> users = mapper.findAll();
                for(User user:users) {
                    System.out.println(user);
                }
                //释放资源
                sqlSession.close();
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

Resource 作用:读取mybatis相关配置文件的。打开IO
建议:一次性 通过IO读取 所有的数据

SqlSessionFactory 作用:通过SqlSessionFactory 这个工厂 创建SqlSession 特点:重量级资源 内存占用多 功能多 每一个应用只创建一个对象 线程安全

SqlSession 特点:轻量级资源 不能被多线程共享 作用:

  1. 根据程序员书写的mapper文件,自动的创建mapper文件对应的Java类(DAO接口的实现类)

  2. SqlSession 内部 封装 Connection对象 (一一对应的关系)

    1. SqlSession 控制事务 SqlSession.commit(); –相当于– Connection.commit(); SqlSession.rollback(); –相当于– Connection.rollback(); 注意:实战中,查询操作不需要控制事务。增删改操作必须要控制事务

      查询所有的原理分析图

    1602568659059

    Mybatis入门(注解方式)

    1. 引入依赖(和xml方式一致)

    2. 实体类(和xml方式一致)

    3. dao接口(和xml方式一致)

    4. 持久层接口的映射文件 IUserMapper.xml 不需要了,要在dao接口的方法上使用相应注解

      import com.mg.entity.User;
      import org.apache.ibatis.annotations.Select;
            
      import java.util.List;
      public interface IUserMapper {
          //查询所有
          @Select("select * from user")
             List<User> findAll();
         }
      
    5. 编写mybatis主配置文件 SqlMapConfig.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="mysql">
                 <environment id="mysql">
                     <transactionManager type="JDBC"></transactionManager>
                     <dataSource type="POOLED">
                         <property name="driver" value="com.mysql.jdbc.Driver"></property>
                         <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
                         <property name="username" value="root"></property>
                         <property name="password" value="root"></property>
                     </dataSource>
                 </environment>
             </environments>
             <mappers>
              <!--使用注解方式,mapper文件的注册需要变化-->
                 <!--<mapper resource="com/mg/dao/IUserMapper.xml"></mapper>-->
                 <mapper class="com.mg.dao.IUserMapper"></mapper>
             </mappers>
         </configuration>
      

      注意: 我们在实际开发中都是偏向简单,所以无论是xml方式还是注解方式,我们都是不写dao实现类 的,但是Mybatis也是支持写dao实现类的

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦