Mybatis篇二:MyBatis实战

MyBatis实战

光看不练容易迷糊,先写个实例试试,在回去读文档,或许体会会多一些。

1、实例准备

jar包:

mybatis-3.4.5.jar(mybatis)

mysql-connector-java-5.1.21.jar(数据库驱动)

junit-4.4.jar(测试,不想用这个junit,用main方法测试也行)

项目结构

数据库

-- 用户表结构
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userName` varchar(20) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
 
-- 初始化数据
INSERT INTO user (id,userName,age) VALUES(1,one,25);
INSERT INTO user (id,userName,age) VALUES(2,two,25);
INSERT INTO user (id,userName,age) VALUES(3,three,25);
代码实例

UserMapper对应的接口:

package com.lanhuigu.mybatis.mapper;
 
import com.lanhuigu.mybatis.entity.User;
/**
 * Mapper接口
 * @author yihonglei
 * @date 2018/11/20 19:00
 */
public interface UserMapper {
    /**
     * xml实现方式
     * @author yihonglei
     * @date 2018/11/20 19:00
     */
    User queryUserById(int id);
 
}

MyBatisInterfaceTest(基于接口实现的测试代码)

package com.lanhuigu.mybatis;
 
import com.lanhuigu.mybatis.entity.User;
import com.lanhuigu.mybatis.mapper.UserMapper;
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;
 
/**
 * Mapper基于接口测试
 * @author yihonglei
 * @date 2018/11/20 17:43
 */
public class MyBatisInterfaceTest {
    @Test
    public void testMyBatis() throws IOException {
        // 从SqlSessionFactoryBuilder中获取的SqlSessionFactory工厂实例
        SqlSessionFactory sqlSessionFactory = null;
        // 从SqlSessionFactory工厂中获取的sqlSession实例,包括了MyBatis操作数据库SQL命令的所有方法
        SqlSession session = null;
        try {
            // 1、MyBatis的配置文件路径,这里放在classpath下,相当于src下
            String resource = "mybatis-config.xml";
            // 2、读取mybatis配置文件,同时构建SqlSessionFactoryBuilder,然后获取SqlSessionFactory工厂实例
            // 使用MyBatis提供的Resources类加载mybatis的配置文件
            InputStream is = Resources.getResourceAsStream(resource);
            //构建SqlSessionFactory工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
 
            // 3、从SqlSessionFactory工厂实例获取sqlSession,sqlSession中包含执行sql命令的所有方法
            session = sqlSessionFactory.openSession();
            /**
             * 映射sql的标识字符串:
             * com.lanhuigu.mybatis.mapper.UserMapper是UserMapper.xml文件中mapper标签的namespace属性的值,
             * queryUserById是UserMapper.xml文件select标签的id属性值,通过select标签的id属性值,
             * 通过这两个的组合就可以找到要执行的SQL
             */
            // 执行查询返回一个唯一user对象的sql,注意:"com.lanhuigu.mybatis.mapper.UserMapper.queryUserById"为映射sql的标识字符串
            UserMapper userMapper = session.getMapper(UserMapper.class);
            User user = userMapper.queryUserById(1);
            System.out.println(user);
        } catch (Exception e) {
            System.out.println("e:" + e);
        } finally {
            session.close();
        }
    }
}

代码分析:

UserMapper userMapper = session.getMapper(UserMapper.class);

User user = userMapper.queryUserById(1);

使用对于给定语句能够合理描述参数和返回值的接口(比如说UserMapper.class),

现在不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。

参考博客:

经验分享 程序员 微信小程序 职场和发展