为什么要学习MyBatis
1.传统的JDBC存在硬编码问题(驱动地址、密码、sql语句很麻烦)
2.访问数据的步骤繁琐(set和get)
MyBatis是什么
1.MyBatis是一款优秀的持久层框架
2.MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作
3.MyBatis可以通过简单的XML或注解来配置和映射
4.POJO(简单的JavaBean)
MyBatis的入门
1.建立数据库和表。并初始化表中的记录
DROP DATABASE
IF EXISTS mybatis;
CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE student (
sid INT PRIMARY KEY auto_increment,
sname VARCHAR (64) NOT NULL,
note VARCHAR (255) NOT NULL
);
INSERT INTO student (sname, note)
VALUES
(
'颜回',
'一箪食,一瓢饮,在陋巷,人不堪其忧,回也不改其乐;不迁怒不贰过'
);
INSERT INTO student (sname, note)
VALUES
(
'闵损',
'二十四孝之芦衣顺母;母在一子寒,母去三子单'
);
INSERT INTO student (sname, note)
VALUES
(
'冉伯牛',
'不幸患麻风病,端正正派,善于待人接物'
);
INSERT INTO student (sname, note)
VALUES
(
'仲弓',
'冉雍出身贫贱,但气量宽宏,沉默厚重'
);
INSERT INTO student (sname, note)
VALUES
(
'冉求',
'冉求个性谨慎,做事畏缩;力不足者,中道而废。今女画'
);
INSERT INTO student (sname, note)
VALUES
(
'子路',
'生性豪爽,为人耿直,有勇力才艺,闻过则喜'
);
INSERT INTO student (sname, note)
VALUES
(
'子贡',
'子贡与子路一文一武,犹如孔子的左右手,尤善经商,首富,但不是君子,因为君子不器'
);
INSERT INTO student (sname, note)
VALUES
(
'子我',
'口齿伶俐,能说善辩,被孔子骂朽木不可雕也'
);
INSERT INTO student (sname, note)
VALUES
(
'子游',
'割鸡焉用牛刀典故主角,割鸡焉用牛刀;君子学道则爱人,小人学道则易使也'
);
INSERT INTO student (sname, note)
VALUES
(
'子夏',
'学而优则仕提出者;巧笑倩兮,美目盼兮,素以为绚兮’,何谓也?”子曰:“绘事后素'
);
SELECT
*
FROM
student;
2.搭建开发环境(基于Maven)
1.四个依赖包:junit、mysql-connector-java、mybatis、log4j
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
</dependencies>
2.编写数据库的配置文件:mybatis-config.xml(写在resources目录下)
<?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://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="StudentMapper.xml"/>
</mappers>
</configuration>
3.编写sql语句的映射文件(StudentMapper.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="org.lanqiao.StudentMapper">
<select id="selectStudent" resultType="org.lanqiao.Student">
select * from student where sid = #{id}
</select>
</mapper>
4.编写接口(对应的是映射文件中的namespace属性的值)
package org.lanqiao;
public interface StudentMapper {
Student selectStudent(Integer sid);
}
5.编写POJO(javaBean)
package org.lanqiao;
public class Student {
private Integer sid;
private String sname;
private String note;
@Override
public String toString() {
return "Student{" +
"sid=" + sid +
", sname='" + sname + '\'' +
", note='" + note + '\'' +
'}';
}
public Student() {
}
public Student(Integer sid, String sname, String note) {
this.sid = sid;
this.sname = sname;
this.note = note;
}
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
6.编写测试文件
package org.lanqiao;
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 java.io.IOException;
import java.io.InputStream;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args ) throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
Student stu = (Student) session.selectOne("org.lanqiao.StudentMapper.selectStudent", 2);
System.out.println(stu);
}
}
}
7.效果如下