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),
现在不但可以执行更清晰和类型安全的代码,而且还不用担心易错的字符串字面值以及强制类型转换。
参考博客: