什么是框架?
JDBC:
Connection,preparedStatement,ResultSet
Sping的JDBC Template:
Spring中对JDBC的简单封装
Apache的DBUtils:
和Spring的Template相似,也是对JDBC的简单封装。
以上都不是框架,JDBC是规范,其他两个是工具类。
Mybatis 是一个持久层框架,使用java编写,它封装了很多细节,是我们专注于sql语句本身,而不用关注驱动注册,建立连接等繁杂过程。
它使用了ORM思想实现了结果集的封装。Object Relational Mapping,对象关系映射,就是把数据库表和实体类及实体类的属性对应起来,让我们可以实现操作实体类就操作数据库表.
mybatis的环境搭建
1,创建maven工程,并添加依赖
2,生成实体类和dao层接口
实体类
/**
* @author lzr
* @date 2020 05 15 22:25
* @description 实体类
*/
public class User implements Serializable {
private int id;
private String username;
private String sex;
private String address;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
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;
}
}
mapper
/**
* @author lzr
* @date 2020 05 15 22:28
* @description 用户的持久层接口
*/
public interface UserMapper {
/**
* 查询所有操作
* @return
*/
public List<User> findAll();
}
3,配置mybatis主配置文件sqlMapConfig
sqlMapConfig
<?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">
<!--mybatis的主配置文件-->
<configuration>
<typeAliases>
<package name="com.maaoooo.bean"/>
</typeAliases>
<!--配置环境-->
<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://localhost:3306/eesy_mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--指定映射配置文件的位置-->
<mappers>
<!--resource用于指定文件位置-->
<mapper resource="com/maaoooo/mapper/UserMapper.xml"/>
</mappers>
</configuration>
4,配置映射配置文件Mapper.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="com.maaoooo.mapper.UserMapper">
<!--配置查询所有 public List<User> findAll();-->
<select id="findAll" resultType="com.maaoooo.bean.User">
select * from user
</select>
</mapper>
Mybatis环境搭建的注意事项
1,mapper就是dao,在mybatis中把持久层的接口名称和映射文件也叫做:mapper,所以UserDao和UserMapper是一样的。
2,在idea创建目录时,和包是不一样的。包在创建时 Com.maaoooo.mapper是三级目录,而目录在创建时 com.maaoooo.mapper是一级目录
3,mybatis的映射配置文件位置必须和mapper接口的包结构相同。
4,映射配置文件的mapper标签namespace属性的取值必须是mapper接口的全限定名。
5,映射配置文件的操作配置(select),id属性的取值必须是mapper接口的方法名。
遵循了3,4,5,点后,我们无需再写dao的实现类。
mybatis入门测试:
1,加载配置
2,创建sqlSessionFactory工厂
3,创建SqlSession
4,创建Mapper接口的代理对象
5,执行mapper的方法
6,释放资源.
/**
* @author lzr
* @date 2020 05 17 09:43
* @description
*/
public class MybatisTest {
/**
* 测试
*/
public static void main(String[] args) {
//读取配置文件
InputStream in= null;
try {
in = Class.forName("MybatisTest").getClassLoader().getResourceAsStream("SqlMapConfig.xml");
} catch (ClassNotFoundException e) {
System.out.println("读取配置文件失败");
e.printStackTrace();
}
//创建sqlSessionFactoryBuilder
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
//创建sqlSessionFactory
SqlSessionFactory ssf=ssfb.build(in);
//生产Session
SqlSession session=ssf.openSession();
//操作数据库 (实际上通过代理进行方法增强)
UserMapper userMapper=session.getMapper(UserMapper.class);
List<User> userList=userMapper.findAll();
//遍历集合
for (User user : userList) {
System.out.println(user.toString());
}
session.close();
}
}
Mapper.xml的ResultType是为了告知mybatis要封装到哪个实体类中.
mybatis的注解配置:
不需要mapper.xml,在mapper接口的方法上,使用@Select(“sql语句”),并且在sqlMapperConfig里配置mapper时使用classs属性指定接口全限定名。
userMapper
/**
* @author lzr
* @date 2020 05 15 22:28
* @description 用户的持久层接口 注解方式
*/
public interface UserMapper {
/**
* 查询所有操作
* @return
*/
@Select("select * from user")
public List<User> findAll();
}
sqlMapConfig
<mappers>
<!--注解-->
<mapper class="com.maaoooo.mapper.UserMapper"/>
</mappers>
</configuration>