Mybatis学习笔记
一、引言
1.框架的三层架构
表现层:是用于展示数据(SpringMVC)
业务层:是处理业务需求
持久层:是和数据库交互(MyBatis)
2.持久层技术解决方案
JDBC技术:
①Connection ②PreparedStatement ③ ResultSet
Spring的JdbcTemplate:
Spring中对jdbc的简单封装
Apache的DBUtils:
它和Spring的JdbcTemplate很像,也是对Jdbc的简单封装
以上这些都不是框架,JDBC是规范。 Spring的JdbcTemplate和Apache的DBUtils都只是工具类。
3.MyBatis的概述
MyBatis是一个持久层框架,用Java编写。它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动,创建连接等繁杂过程。它使用了ORM思想实现了结果集的封装。
ORM (Object Relational Mapping): 对象关系映射。 就是把数据库和实体类及实体类的属性对应起来,让我们可以操作实体类就实现操作数据库表
二、MyBatis入门
1.MyBatis环境搭建
1)创建数据库
CREATE TABLE `user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(32) NOT NULL COMMENT '用户名称',
`birthday` DATETIME DEFAULT 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`,`birthday`,`sex`,`address`) VALUES (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');
2)IDEA中创建Project,导入Maven工程
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
3)创建实体类和dao的接口
//按照数据库中表的属性名创建
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
接口:
/*
用户的持久层接口
*/
public interface IUserDao {
/*
查询所有操作
*/
List<User> findAll();
}
4)创建MyBatis的主配置文件(SqlMapConfig.xml)
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql的环境-->
<environment id="mysql">
<!-- 配置事务的类型-->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis_study"/>
<property name="username" value="root"/>
<property name="password" value="wh456159"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="com/wuhao/dao/IUserDao.xml"/>
</mappers>
</configuration>
5)创建映射配置文件(IUserDao.xml)
<mapper namespace="com.wuhao.dao.IUserDao">
<!--配置查询所有-->
<!--其中属性id ,写接口中方法的名称 -->
<select id="findAll" resultType="com.wuhao.domain.User">
select * from user
</select>
</mapper>
环境搭建的注意事项:
①在MyBatis中它把持久层的操作接口名称和映射文件也叫作:Mapper 所以:IUserDao和IUserMapper是一样的
②在idea中创建目录的时候,它和包是不一样的。
包在创建时: com.wuhao.dao 它是三级结构
目录在创建时:com.wuhao.dao 是一级结构
③MyBatis的映射配置文件位置必须和dao接口的包结构相同
④映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
⑤映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
当我们遵守了③④⑤点之后,就可以在开发中无须再写dao的实现类
2.入门案例
思路流程:
1)读取配置文件来连接数据库
2)创建SqlSessionFactory工厂
3)有了Factory就可以创建SqlSession对象,有了SqlSession对象就可以操作数据库
4)但我们不用SqlSession直接操作而是用Dao操作,所以用SqlSession创建Dao接口的代理对象
5)有了Dao对象就可以实现方法
6)释放资源
注:不要忘记在映射配置中告知MyBatis要封装到哪个实体类中(配置文件中Select 的ResultType属性)
配置的方式:指定实体类的全限定类名
//1.读取配置文件
InputStream in= Resources.getResourceAsStream("SqlMapConfig.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
SqlSessionFactory factory=builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session=factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
IUserDao userDao=session.getMapper(IUserDao.class);
//5.使用代理对象执行方法
List<User> users=userDao.findAll();
for(User user:users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
结果:
入门案例解析:
创建Dao接口的代理对象的分析:
还没有评论,来说两句吧...