Mybatis的入门案例以及基于注解的入门案例

一、Mybatis的入门案例

  1. 首先,先在数据库demo里面创建一个user的表
    在这里插入图片描述
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
  `birthday` datetime(0) NULL DEFAULT NULL COMMENT '生日',
  `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别',
  `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 49 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `user` VALUES (41, '老王', '2018-02-27 17:47:08', '男', '北京');
INSERT INTO `user` VALUES (42, '小二王', '2018-03-02 15:09:37', '女', '北京金燕龙');
INSERT INTO `user` VALUES (43, '小二王', '2018-03-04 11:34:34', '女', '北京金燕龙');
INSERT INTO `user` VALUES (45, '传智播客', '2018-03-04 12:04:06', '男', '北京金燕龙');
INSERT INTO `user` VALUES (46, '老王', '2018-03-07 17:37:26', '男', '北京');
INSERT INTO `user` VALUES (48, '小马宝莉', '2018-03-08 11:44:00', '女', '北京修正');

SET FOREIGN_KEY_CHECKS = 1;
  1. 然后,创建测试类MybatisTest:
    第一步:读取配置文件
    第二步:创建SqlSessionFactory工厂
    第三步:创建SqlSession
    第四步:创建Dao接口的代理对象
    第五步:执行dao中的方法
    第六步:释放资源

  2. 结合上篇Mybatis入门相关概念及环境搭建文章,然后在test文件里面创建测试类MybatisTest,目录结构如下:
    在这里插入图片描述

package com.itheima.test;

import com.itheima.dao.IUserDao;
import com.itheima.domain.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 java.io.InputStream;
import java.util.List;

/**
 * mybatis的入门案例
 */
public class MybatisTest {
    public static void main(String[] args) throws Exception {
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for (User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}
  1. 入门案例的分析:
    在这里插入图片描述

  2. 控制台输出:

2020-04-20 22:33:37,461 0      [           main] DEBUG ache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2020-04-20 22:33:37,500 39     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-04-20 22:33:37,500 39     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-04-20 22:33:37,500 39     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-04-20 22:33:37,500 39     [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2020-04-20 22:33:37,576 115    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
2020-04-20 22:33:39,414 1953   [           main] DEBUG source.pooled.PooledDataSource  - Created connection 210506412.
2020-04-20 22:33:39,414 1953   [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@c8c12ac]
2020-04-20 22:33:39,417 1956   [           main] DEBUG m.itheima.dao.IUserDao.findAll  - ==>  Preparing: select * from user; 
2020-04-20 22:33:39,438 1977   [           main] DEBUG m.itheima.dao.IUserDao.findAll  - ==> Parameters: 
2020-04-20 22:33:39,456 1995   [           main] DEBUG m.itheima.dao.IUserDao.findAll  - <==      Total: 6
User{id=41, username='老王', birthday=Wed Feb 28 01:47:08 CST 2018, sex='男', address='北京'}
User{id=42, username='小二王', birthday=Fri Mar 02 23:09:37 CST 2018, sex='女', address='北京金燕龙'}
User{id=43, username='小二王', birthday=Sun Mar 04 19:34:34 CST 2018, sex='女', address='北京金燕龙'}
User{id=45, username='传智播客', birthday=Sun Mar 04 20:04:06 CST 2018, sex='男', address='北京金燕龙'}
User{id=46, username='老王', birthday=Thu Mar 08 01:37:26 CST 2018, sex='男', address='北京'}
User{id=48, username='小马宝莉', birthday=Thu Mar 08 19:44:00 CST 2018, sex='女', address='北京修正'}
2020-04-20 22:33:39,461 2000   [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@c8c12ac]
2020-04-20 22:33:39,461 2000   [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@c8c12ac]
2020-04-20 22:33:39,461 2000   [           main] DEBUG source.pooled.PooledDataSource  - Returned connection 210506412 to pool.

Process finished with exit code 0
  1. 注意事项:
    不要忘记在映射配置中告知mybatis要封装到哪个实体类中
    配置的方式:指定实体类的全限定类名

二、Mybatis基于注解的入门案例:

  1. 结构目录:
    在这里插入图片描述
  2. 把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句
    在这里插入图片描述
  3. 同时需要在SqlMapConfig.xml中的mapper配置时,使用class属性指定dao接口的全限定类名。
    在这里插入图片描述
  4. 明确:
    我们在实际开发中,都是越简便越好,所以都是采用不写dao实现类的方式。
    不管使用XML还是注解配置。
    但是Mybatis它是支持写dao实现类的。
发布了54 篇原创文章 · 获赞 17 · 访问量 2405

猜你喜欢

转载自blog.csdn.net/qq_44096670/article/details/105623204