1背景:用来取代传统的jdbc
2原始jdbc开发存在的问题如下:
①. 数据库连接创建、释放频繁造成系统资源浪费从⽽影响系统性能 。
②. sql 语句在代码中硬编码,造成代码不易维护,实际应⽤ sql 变化的可能较⼤,sql 变动需要改变java代码 。
③. 查询操作时,需要⼿动将结果集中的数据⼿动封装到实体中。插⼊操作时,需要⼿动将实体的数据设置到sql语句的占位符位置 。
应对上述问题给出的解决⽅案:
①. 使⽤数据库连接池初始化连接资源 。
②. 将sql语句抽取到xml配置⽂件中 。
③. 使⽤反射等底层技术,⾃动将实体与表进⾏属性与字段的⾃动映射 。
3总结:mybatis框架执⾏sql并将结果映射为java对象并返回,采⽤ORM思想( 对象关系映射(Object Relational Mapping)解决了实体和数据库映射的问题,对jdbc 进⾏了封装,屏蔽了jdbc api 底层访问细节,使我们不⽤与jdbc api 打交道,就可以完成对数据库的持久化操作 。
具体使用步骤:
1 导⼊依赖
<!--mybatis坐标-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--mysql驱动坐标-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--单元测试坐标-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--lombok坐标-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<!--⽇志坐标-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
2 准备数据库环境
create database mybatis;
use mybatis;
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL COMMENT '⽤户名称',
`sex` char(1) DEFAULT NULL COMMENT '性别',
`address` varchar(256) DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user` (`id`, `username`, `sex`, `address`)
values(NULL,'Tom','男','北京');
insert into `user` (`id`, `username`, `sex`, `address`)
values(NULL,'Jack','男','上海');
insert into `user` (`id`, `username`, `sex`, `address`)
values(NULL,'Rose','⼥','⻄安');
insert into `user` (`id`, `username`, `sex`, `address`)
values(NULL,'Poll','⼥','利⽐亚');
3 编写User实体
@Data
public class User {
private Integer id;
private String username;
private String sex;
private String address; }
4 编写MyBatis核⼼⽂件
⽂件名 : SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--配置数据库运⾏环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--配置关联的SQL语句的映射⽂件-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
5 编写UserMapper映射⽂件
⽂件名 : UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="userMapper">
<!--查询所有⽤户-->
<select id="findAll" resultType="com.kkb.pojo.User">
select * from user
</select>
</mapper>
6 查询所有⽤户
public class UserTest {
@Test
public void findAllTest() throws IOException {
//加载核⼼配置⽂件 SqlMapConfig.xml
InputStream inputStream =
Resources.getResourceAsStream("SqlMapConfig.xml");
//构造SQLSessionFactory对象
SqlSessionFactory sqlSessionFactory = new
SqlSessionFactoryBuilder().build(inputStream);
//构造SQLSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执⾏查询语句
List<User> userList = sqlSession.selectList("userMapper.findAll");
for (User user : userList) {
System.out.println("user = " + user);
}
//释放资源
sqlSession.close();
}
}