Mybatis入门
配置maven依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
创建数据库,数据表
DROP DATABASE IF EXISTS mybatis;
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8;
USE mybatis;
CREATE TABLE student(
id int(11) NOT NULL AUTO_INCREMENT,
studentID INT(11) NOT NULL UNIQUE,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO student VALUES(null,1,"我没有三颗心脏");
INSERT INTO student VALUES(null,2,"我没有三颗心脏");
INSERT INTO student VALUES(null,3,"我没有三颗心脏");
SELECT * FROM student;
创建实体类
创建实体类Student,添加set,get方法
创建配置文件
db.properties 数据库信息
db.properties 前缀“mysql” 可以自定义,用来保存数据相关信息
mysql.driver=com.mysql.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/sakila
mysql.username=root
mysql.password=1234
mybatis.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>
<!--使用属性读取配置数据-->
<properties resource="db.properties"/>
<typeAliases>
<package name="pojo"/>
</typeAliases>
<environments default="mysql_developer">
<environment id="mysql_developer">
<!--使用jdbc管理方式-->
<transactionManager type="jdbc"/>
<!--设置数据源,配置驱动,连接字符串,用户名,用户密码-->
<dataSource type="pooled">
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
mapper.xml 文件的创建
方式一:文件创建位置一般为对于实体类所在的包下,通过mave中的maven-resources-plugin插件
拷贝mapper.xml 资源文件到对应的包下(没有生效)
方式二:直接在resource目录下创建对应的包,maven在构建的时候会自动将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="pojo">
<select id="listStudent" resultType="Student">
select * from student
</select>
</mapper>
- 在mybatis.xml中声明了别名typeAliases,resultType就不需要使用完全限定名称,直接写类名
- id 是这条sql语句的唯一标识,java代码中使用 session.select(),session.update() 等语句执行对应sql
在mybatis.xml中添加mapper
<mappers>
<mapper resource="pojo/Student.xml"/>
</mappers>
解析配置文件,拿到Session对象
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import pojo.Student;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class StudentTest {
@Test
public void getStudent() throws IOException {
String resource = "mybatis_cfg.xml";
//使用ibatis包下得Resources工具类解析加载mybatis_cfg.xml
InputStream inputStream = Resources.getResourceAsStream(resource);
//使用SqlSessionFactoryBuilder-->SqlSessionFactory-->SqlSession
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<Student> liststudent = sqlSession.selectList("listStudent");
for (Student stu :
liststudent) {
System.out.println(stu);
}
}
}
mybatis能够做什么?
mybatis 再mybatis中配置数据库连接,在mapper.xml中写sql,获取到session后执行对应的sql,并且返回值是mapper中配置实体类对象,不需要手动实例化对象之后再封装到集合中
mybatis的优点
- 从数据库中查询出来的数据不需要手动再封装,自动实例化到实体类
- 在代码中不包含sql语句,sql语句的集中管理
mybatis使用总结
-
配置maven依赖
-
配置文件:db.properties, mybatis.xml, mapper.xml
-
创建对应的实体类
-
拿到session会话,执行对应的sql语句,拿到查询结果
问题:
新建mybatis_cfg.xml, entity_mapper.xml的时候,命名空间那么长一串怎么记得住?