初学Mybatis Part 3 入门案例

Mybatis入门案例

整合log4j

默认的mybatis不能打印出sql日志,不便于查看调试
在resources下导入log4j.properties这一部分大家可以网上查查,我也不知道有没有用,不是很懂,可以评论告诉我
我把我的代码放在下面(我也是copy的别人的)

# 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

Main函数执行入门案例

在test文件夹下面创建一个MybatisTest.java哦
位置
上一p说了不用写dao实现类了
步骤:

  1. 读取配置文件
  2. 创建SqlSessionFactory工厂
  3. 使用工厂生产SqlSession对象
  4. 使用SqlSession对象创建dao接口的代理对象
    不改变源码的基础上对已有方法的增强(动态代理)
  5. 使用代理对象执行方法
  6. 释放资源

Mybatis基本步骤

步骤解释

第一步

有连接数据库的信息

in = Resources.getResourceAsStream("SqlMapConfig.xml");

第二步

有了工厂就可以操作生产对象

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
/**有了工厂就可以操作生产对象*/
SqlSessionFactory factory = builder.build(in);

SqlSessionFactory是接口不能直接new,得找他的实现
Mybatis在创建工厂的时候把细节省略了,准备了一个SqlSessionFactoryBuilder的对象可以直接new。
就可以builder.build(in)构建工厂把流传进去
然后怎么解析文件怎么封装都和我们无关了,全部交给Mybatis。(我变强了再看源码吧)

第三步

session对象就可以操作数据库

sqlSession=factory.openSession();

第四步

不是直接操作而是用dao操作,但是我们只有dao接口,所以需要创建代理对象

userDao = sqlSession.getMapper(IUserDao.class);

session给我们创建的代理对象,用的getMapper传的自己的,根据这个生成代理对象,有了代理对象就说明方法已经增强过了,能实现功能了。

第五步

调用方法实现功能,这里是findAll

List<User> users =userDao.findAll();
        for(User user: users){
            System.out.println(user);//打印的功能
        }

第六步

释放资源

		session.close();
        in.close();

优化!!!

可能很有疑惑你没一个方法都这样写 重复的步骤也太多了!!!!

可以这样
有个 @Before@After的很给力

	//搞个全局变量
    private InputStream in;
    private SqlSession sqlSession;
    private IUserDao userDao;
	@Before//用于在测试方法执行方法执行之前执行
    public void init()throws Exception{
        //1.读取配置文件 目的是将SqlMapConfig.xml的信息加载进去
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        /**链接数据库的信息*/
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        /**有了工厂就可以操作生产对象*/
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        //  只有Dao的接口没有具体功能的实现所以得想办法把实现加出来
        sqlSession=factory.openSession();
        /**这个对象就可以操作数据库(非直接,用dao操作)*/
        //4.使用SqlSession创建Dao接口的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
        /**括号内的dao接口,我们只有dao接口所以要创建代理对象*/
	}
 @After//用于在方法执行之后执行
    public void destory()throws Exception{
        //提交事务
        sqlSession.commit();
        //6.释放资源
        sqlSession.close();
        in.close();
    }

执行方法

/**
     * 测试查询所有
     */
    @Test
    public void testFindAll(){
    List<User> users =userDao.findAll();
        for(User user: users){
            System.out.println(user);//打印的功能
        }
	}

这样就好啦

其实在SqlMapConfig中采用注解的方式

<mappers>
        <mapper class="com.bruce.dao.IUser"/>
    </mappers>

我们下一Part再捋一捋

坚持就是胜利奥利给

(点个赞吧求求了)

发布了8 篇原创文章 · 获赞 5 · 访问量 657

猜你喜欢

转载自blog.csdn.net/weixin_42727032/article/details/104222176