Mybatis学习(二):入门SqlSessionFactory

Mybatis入门案例:

sql测试表准备:(自行插入数据)

CREATE TABLE `tbl_employee` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `last_name` varchar(255) DEFAULT NULL,
  `gender` char(1) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `d_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_emp_dept` (`d_id`),
  CONSTRAINT `fk_emp_dept` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

第一步pom.xml创建坐标导入依赖:

      <dependency>
            <!--MyBatis框架Jar包-->
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <!--MySQL驱动包-->
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <!--log4j日志包-->
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <!--junit测试包-->
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>

放入log4j.properties:

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

第二步:创建实体类:

@Data
public class Employee{
	private Integer id;
	private String lastName;
	private String email;
	private Integer gender;
}

dao的接口:

public interface EmployeeMapper {
    
    /**
     * 查询所有操作
     */
    List<Employee> getAllEmp();

}

第三步: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">
<!--MyBatis主配置文件-->
<configuration>
    <!--配置环境-->
    <environments default="dev_mysql">
        <!--配置mysql的环境,可以配置多个数据库-->
        <environment id="dev_mysql">
            <!--配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接数据库的4个基本信息-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>
    </environments>
       <!-- 告知mybatis映射配置的位置 -->
    <mappers>
        <mapper resource="cn/codewhite/dao/EmployeeMapper.xml"/>
    </mappers>
</configuration>

第四步:创建映射配置文件EmployeeMapper.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">
<!--配置查询所有(是Dao里面的方法)-->
<mapper namespace="cn.codewhite.dao.EmployeeMapper">
    <!--  List<Employee> getAllEmp();-->
    <select id="getAllEmp" resultType="cn.codewhite.pojo.Employee">
        select * from tbl_employee
    </select>
</mapper>

案例测试:

@Test
    public void test01() {
        InputStream is = null;
        SqlSession sqlSession = null;
        try {
            //​	第一步:读取配置文件(获取输入流)
            is = Resources.getResourceAsStream("mybatis-config.xml");
            //​	第二步:创建SqlSessionFactory工厂
            SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory = builder.build(is);
            //​	第三步:创建SqlSession.openSession();
            sqlSession = sqlSessionFactory.openSession();
            //​	第四步:创建Dao接口的代理对象
            EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
            //​	第五步:执行dao中的方法
            List<Employee> allEmp = empMapper.getAllEmp();
            //打印:
            allEmp.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //	第六步:释放资源
            sqlSession.close();
            if (is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

如果遇到bug:

1.在mybatis-config.xml没有告知mybatis映射配置的位置
Exception in thread "main" org.apache.ibatis.binding.BindingException: Type interface cn.codewhite.dao.EmployeeMapper is not known to the MapperRegistry.
答案:在SqlMapConifg.xml加入以下内容
 <!-- 告知mybatis关系映射配置的位置 -->
    <mappers>
        <mapper resource="cn/codewhite/dao/EmployeeMapper.xml"/>
    </mappers>

总结:

​ 第一步:创建maven工程并导入坐标依赖
​ 第二步:创建实体类和dao的接口
​ 第三步:创建Mybatis的主配置文件
​ mybatis-config.xml
​ 第四步:创建映射配置文件
​ EmployeeMapper.xml
环境搭建的注意事项:
​ 第一个:创建EmployeeMapper.xml和 EmployeeMapper.java时名称是为了和我们之前的知识保持一致。
​ 在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
​ 所以:EmployeeDao 和 EmployeeMapper是一样的
​ 第二个:在idea中创建目录的时候,它和包是不一样的
​ 包在创建时:com.itheima.dao它是三级结构
​ 目录在创建时:com.itheima.dao是一级目录
​ 第三个:mybatis的映射配置文件位置必须和dao接口的包结构相同
​ 第四个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
​ 第五个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名

​ 当我们遵从了第三,四,五点之后,我们在开发中就无须再写dao的实现类。
mybatis的入门案例
​ 第一步:读取配置文件
​ 第二步:创建SqlSessionFactory工厂
​ 第三步:创建SqlSession
​ 第四步:创建Dao接口的代理对象
​ 第五步:执行dao中的方法
​ 第六步:释放资源

小结问题:

1、接口式编程
原生: Dao ====> DaoImpl
mybatis: Mapper ====> xxMapper.xml

2、SqlSession代表和数据库的一次会话;用完必须关闭;close
3、SqlSession和connection一样它都是非线程安全。每次使用都应该去获取新的对象。
4、mapper接口没有实现类,但是mybatis会为这个接口生成一个代理对象。
(将接口和xml进行绑定)
EmployeeMapper empMapper = sqlSession.getMapper(EmployeeMapper.class);
5、两个重要的配置文件:
mybatis的全局配置文件:包含数据库连接池信息,事务管理器信息等…系统运行环境信息
sql映射文件:保存了每一个sql语句的映射信息:
将sql抽取出来。

  • 1、根据xml配置文件(全局配置文件)创建一个SqlSessionFactory对象 有数据源一些运行环境信息
  • 2、sql映射文件;配置了每一个sql,以及sql的封装规则等。
  • 3、将sql映射文件注册在全局配置文件中
  • 4、写代码:
  • 1)、根据全局配置文件得到SqlSessionFactory;
  • 2)、使用sqlSession工厂,获取到sqlSession对象使用他来执行增删改查
  • 一个sqlSession就是代表和数据库的一次会话,用完关闭
  • 3)、使用sql的唯一标志来告诉MyBatis执行哪个sql。sql都是保存在sql映射文件中的。

sql关系映射文件:存在dao包下的:EmployeeMapper.xml

全局配置文件:mybatis-config.xml,并且在全局配置文件中不要忘了写映射文件的地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值