첫째, 매핑 파일 생성
청구
- dao 패키지에 StudentDao.xml 파일 생성
- StudentDao.xml 파일 이름은 인터페이스 StudentDao와 동일해야하며 대소 문자를 구분해야합니다.
<?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.StudentDao">
<select id="selectStudens" resultType="Student">
select * from student order by id
</select>
<!--插入操作-->
<insert id="insertStudent">
insert into student values (#{id},#{name},#{email},#{age})
</insert>
</mapper>
- 내부 매개 변수를 구문 분석합니다.
- 네임 스페이스 값 :
dao 인터페이스의 정규화 된 이름을 사용하는 것이 좋습니다. 여기는 com.hcz.dao.StudentDao
- 태그 선택 :
쿼리 작업을 나타냅니다 . 또한
업데이트 레이블은 데이터베이스 업데이트 작업을,
삽입 레이블은 삽입 작업을,
삭제 레이블은 삭제 작업을 나타냅니다.
- id 값 :
실행할 SQL 문의 고유 식별자를 나타냅니다. Mybatis는이 ID의 값을 사용하여 실행할 SQL 문을 찾습니다. 사용자 정의 할 수 있지만 dao 인터페이스에서 메서드 이름을 사용해야합니다. 인터페이스 여기에서 쿼리 된 메서드 이름은selectStudens
- resultType 값 :
SQL 문이 실행 된 후 얻은 ResultSet 인 결과 유형을 나타내며 Java 객체 유형은 ResultSet를 순회하여 가져옵니다. 해당 값은 완전한 이름을 사용해야합니다. 여기는 다음과 같습니다.com.hcz.dao.Student
- jdbc의 대략적인 코드
<select id="selectStudens" resultType="Student">
select id,name from student
</select>
다음 jdbc 코드와 대략 동일
//执行查询,创建记录集
rs = st.executeQuery("select * from text ");
while (rs.next()){
Student stu = new Student();
stu.setId(rs.getInt("id"));
stu.setName(rs.getString("name"));
//从数据库取出的数据转为Student对象,封装到List集合中
stuList.add(stu);
}
둘째, 구성 파일 만들기
<?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>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--配置mybatis环境:数据库的连接信息-->
<environments default="mysql">
<!--id:数据源的名称-->
<environment id="mysql">
<!--配置事务类型:使用jdbc事务(使用Connection的提交和回滚)-->
<transactionManager type="JDBC"/>
<!--数据源dataSource:创建数据库Connection对象的commit,rollback做事务处理
type:POOLED使用数据库的连接池
-->
<dataSource type="POOLED">
<!--连接池四要数-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3366/ssm?useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/hcz/dao/StudentDao.xml"/>
</mappers>
</configuration>
- 설정 태그
mybatis.xml 파일이 로그 구성에 추가되고 실행 된 SQL 문 및 매개 변수가 콘솔에 출력 될 수 있습니다.
- 매퍼 태그 : SQL 매핑 파일의 위치
mybatis에게
클래스 경로의 루트에서 실행할 SQL 문의 위치를 알려줍니다 .대상 / 클래스클래스 경로
셋, 테스트 클래스 만들기
public class MyTest {
public static void main(String[] args) {
//访问mybatis读取student数据
try {
//1.定义mybatis主配置文件,从类路径的根开始(target/classes)
String config = "mybatis.xml";
//2.读取配置文件,Resources: mybatis中的一个类, 负责读取主配置文件
InputStream in = Resources.getResourceAsStream(config );
//3.创建SqlSessionFactoryBuilder对象 : 创建SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in);
//5.获取SqlSession对象,从SqlSessionFactory中获取SqlSession
/**
* 1. openSession() :无参数的, 获取是非自动提交事务的SqlSession对象
* 2. openSession(boolean): openSession(true) 获取自动提交事务的SqlSession.
* openSession(false) 非自动提交事务的SqlSession对象
*
*/
SqlSession sqlSession = factory.openSession();
/**
* SqlSession接口 :定义了操作数据的方法 例如 selectOne() ,selectList() ,
* insert(),update(), delete(), commit(), rollback()
*/
//6.【重要】指定要执行的SQL语句的标识,sql映射文件中的namespace+"."+标签的id值
String sqlId = "com.hcz.dao.StudentDao"+"."+"selectStudens";
//7.【重要】执行SQL语句,通过sqlId找到语句
List<Student> studentList = sqlSession.selectList(sqlId);
//8.输出结果
//studentList.forEach(student -> System.out.println(student));
for (Student student:studentList){
System.out.println(student);
}
//9.关闭连接
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 동등한 코드
//6.【重要】指定要执行的SQL语句的标识,sql映射文件中的namespace+"."+标签的id值
String sqlId = "com.hcz.dao.StudentDao"+"."+"selectStudens";
//7.【重要】执行SQL语句,通过sqlId找到语句
List<Student> studentList = sqlSession.selectList(sqlId);
jdbc 코드와 거의 동일
Connection conn = 获取连接对象
String sql=” select id,name,email,age from student”
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();