MyBatis框架概述:
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
MyBatis官网:http://www.mybatis.org/mybatis-3/
MyBatis框架使用步骤:
1.创建maven工程,导入对应依赖坐标
主要包括mybatis依赖,mysql驱动依赖,单元测试依赖
pom.xml
<!--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.6</version>
</dependency>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
2.创建对应User实体类,数据库user表,属性与数据库表对应
User.java
public class User implements Serializable{
private int id; //用户id
private String username;// 用户姓名
private String password;// 密码
}
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,-- 自增主键
`username` varchar(255) ,
`password` varchar(255) ,
PRIMARY KEY (`id`) -- 主键
);
3.创建Dao接口 (UserDao)
UserDao 接口就是我们的持久层接口(也可以写成 UserMapper)
public interface UserDao {
//自定义的方法,方法名与后面xml映射文件中SQL语句的id保持一致
public List<User> findAll();
}
4. 创建UserDao.xml映射文件
文件名必须与前面定义的接口名相同,UserDao
<?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">
<!--namespace属性: 接口类的全限定名-->
<mapper namespace="com.dao.UserDao">
<!--select标签: 查询
id属性: UserDao中的方法名,该方法会执行这条SQL语句
resultType属性: 方法返回值类型(如果是list,直接写实体类的全限定名)
标签体: sql语句
-->
<select id="findAll" resultType="com.bean.User">
select * from user;
</select>
</mapper>
5.创建 mybatis-config.xml 配置文件
mybatis-config.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>
<settings>
<!--控制台打印SQL语句-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--environments标签: 用来配置数据库环境 default属性: 用来指定使用哪个环境-->
<environments default="development">
<!--environment标签: 配置数据库环境 id属性:为当前环境指定唯一标识,可以配置多个数据库环境-->
<environment id="development">
<!--transactionManager标签: 配置Mybatis事务 type:用来指定事务的类型 JDBC:使用的是JDBC的事务-->
<transactionManager type="JDBC"/>
<!--dataSource标签: 用来配置数据源-->
<!--type属性: 用来指定数据源的类型 POOLED: 表示使用连接池(mybatis内置的) UNPOOLED:表示不使用连接池-->
<dataSource type="POOLED">
<!--配置连接参数-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/db01"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--引入mapper/dao包===批量引入映射文件-->
<package name="com.mapper"/>
</mappers>
</configuration>
6 测试
public class Demo01 {
@Test
public void Test01() throws Exception {
//1. 读取mybatis-config.xml获得输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.创建SqlSessionFactory
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = builder.build(is);
//3. 获得SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//4.获得UserDao代理对象
UserDao userDao = sqlSession.getMapper(UserDao.class);
//5.调用方法
List<User> list = userDao.findAll();
//打印查询到的数据
System.out.println(list);
//6.释放资源
sqlSession.close();
}
}
7 注意事项
Mapper接口开发需要遵循以下规范:
-
Mapper.xml文件的文件名尽量和mapper(Dao)接口的名字一样
-
Mapper.xml文件的文件名尽量和mapper(Dao)接口的名字一样
-
Mapper.xml文件中的namespace必须和mapper(Dao)接口的全限定名相同(包名+类名)
-
Mapper.xml文件中select,update等的标签id的值必须和mapper(Dao)接口中对应的方法名相同
-
Mapper.xml文件中select,update等的标签的parameterType必须和mapper(Dao)接口的方法的形参类型对应,如果不对应需要手动设置别名,一般parameterType属性可以省略不写
-
Mapper.xml文件中select,update等的标签的resultType必须和mapper(Dao)接口的方法的返回值类型对应,否则需要在mapper.xml使用resultMap标签设置结果映射