原始JDBC存在如下问题:
① 数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能
② sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变java代码。
③ 查询操作时,需要手动将结果集中的数据手动封装到实体中。插入操作时,需要手动将实体的数据设置到sql语句的占位符位置
上述问题给出的解决方案:
① 使用数据库连接池初始化连接资源
② 将sql语句抽取到xml配置文件中
③ 使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射
Mybatis开发步骤:
①添加mybatis坐标依赖
②创建实体类及对应表
③编写映射文件xxxMapper.xml
④配置核心文件SqlMapConfig.xml
1 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN“ "http://mybatis.org/dtd/mybatis-3-config.dtd"> 2 <configuration> 3 <environments default="development"> 4 <environment id="development"> 5 <transactionManagertype="JDBC"/> 6 <dataSourcetype="POOLED"> 7 <property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///test"/> 8 <property name="username" value="root"/><property name="password" value="root"/> 9 </dataSource> 10 </environment> 11 </environments> 12 <mappers> <mapper resource="com/itheima/mapper/UserMapper.xml"/> </mappers> 13 </configuration>
测试代码:
1 // 加载核心配置文件 2 InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml"); 3 // 获得 sqlSession 工厂对象 4 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream); 5 // 获得 sqlSession 对象 6 SqlSession sqlSession = sqlSessionFactory.openSession(); 7 // 执行 sql 语句 8 List<User> userList = sqlSession.selectList("userMapper.findAll"); 9 // 打印结果 10 System.out.println(userList); 11 // 释放资源 12 sqlSession.close();
mybatis映射文件概述:
Mybatis的插入数据操作:
- 使用insert标签
- parameterType属性指定要插入的数据类型
- SQL语句中使用#{实体属性名}方式引用实体的属性值
- 插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象)
- 操作涉及数据库数据变化,要使用sqlSession对象显示的提交事务,即sqlSession.commit()
#{实体属性名}方式引用实体的属性值同样也用在update,delete