WHCSRL 技术网

MyBatis框架快速入门(四天学会MyBatis之第二天)

今天我们来学习一个案例,通过对这个案例的学习,掌握mybatis的方法

目录

1 使用MyBatis准备

2 搭建MyBatis项目八步

1.创建mysql数据库和表

 2.在idea中创建一个空项目

3.修改pom.xml文件 

4.创建一个实体类Student

5.创建Dao接口,定义操作数据库的方法

6.创建xml文件(mapper文件),写sql语句

7.创建mybatis的主配置文件(xml文件):有一个,放在resources目录下

8.创建测试的内容

3 MyBatis使用占位符


1 使用MyBatis准备

学习文档:

mybatis – MyBatis 3 | 入门

我们按照这个学习路线来学习

在学习此教程之前你需要会这些知识:Java基础,JDBC,Maven

2 搭建MyBatis项目八步

1.创建mysql数据库和表

数据库名:ssm;表名:student

插入一条数据:

 

 2.在idea中创建一个空项目

然后输入项目名

  

创建完成之后,我们在里面添加Modules

 创建一个Maven项目

 输入名字:

一直点next直到创建完成项目,创建完成后我们来查看项目的结构

3.修改pom.xml文件 

1)加入依赖:mybatis依赖,MySQL驱动,junit

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.13.2</version>
  5. <scope>test</scope>
  6. </dependency>
  7. <dependency>
  8. <groupId>org.mybatis</groupId>
  9. <artifactId>mybatis</artifactId>
  10. <version>3.5.7</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>mysql</groupId>
  14. <artifactId>mysql-connector-java</artifactId>
  15. <version>8.0.26</version>
  16. </dependency>

2)在<build>加入资源插件

  1. <resources>
  2. <resource>
  3. <directory>src/main/java</directory>
  4. <includes>
  5. <include>**/*.properties</include>
  6. <include>**/*.xml</include>
  7. </includes>
  8. <filtering>false</filtering>
  9. </resource>
  10. </resources>

4.创建一个实体类Student

首先创建一个实体包,创建一个Student实体类

 

定义属性,属性名和列名保持一致

  1. package com.lu.entity;
  2. public class Student {
  3. //属性名和列名保持一致
  4. private Integer id;
  5. private String name;
  6. private String email;
  7. private Integer age;
  8. public Integer getId() {
  9. return id;
  10. }
  11. public void setId(Integer id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public String getEmail() {
  21. return email;
  22. }
  23. public void setEmail(String email) {
  24. this.email = email;
  25. }
  26. public Integer getAge() {
  27. return age;
  28. }
  29. public void setAge(Integer age) {
  30. this.age = age;
  31. }
  32. @Override
  33. public String toString() {
  34. return "学生实体信息{" +
  35. "id=" + id +
  36. ", name='" + name + ''' +
  37. ", email='" + email + ''' +
  38. ", age=" + age +
  39. '}';
  40. }
  41. }

5.创建Dao接口,定义操作数据库的方法

创建dao包

代码如下: 

  1. package com.lu.dao;
  2. import com.lu.entity.Student;
  3. public interface StudentDao {
  4. //查询一个学生
  5. Student selectStudentById(Integer id);
  6. }

6.创建xml文件(mapper文件),写sql语句

mybatis框架推荐是把sql语句和java代码分开

mapper文件:定义和dao接口在同一目录,一个表一个mapper文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="com.lu.dao.StudentDao">
  6. <!--查询一个学生Student
  7. <select>:表示查询操作,里面是select语句
  8. id:要执行的sql语句的唯一标识,是一个自定义字符串
  9. 推荐使用dao接口中的方法名称
  10. resultType:告诉mybatis,执行sql语句,把数据赋值给哪个类型的Java对象
  11. resultType的值现在使用的Java对象的全限定名称
  12. -->
  13. <select id="selectStudentById" resultType="com.lu.entity.Student">
  14. select id,name,email,age from student where id = 1001
  15. </select>
  16. </mapper>
  17. <!--
  18. 1.约束文件
  19. http://mybatis.org/dtd/mybatis-3-mapper.dtd
  20. 约束文件的作用:定义和限制当前文件中可以使用的标签和属性,以及标签出现的顺序
  21. 2.mapper是根标签
  22. namespace:命名空间,必须有值,不能为空。唯一值
  23. 推荐使用Dao接口的全限定名称
  24. 作用:参与识别sql语句的作用。
  25. 3.在mapper里面可以写 <insert>,<update>,<delete>,<select>等标签
  26. <insert>里面是insert语句,表示执行的是insert操作
  27. <update>里面是update语句,表示执行的是update操作
  28. <delete>里面是delete语句,表示执行的是delete操作
  29. <select>里面是select语句,表示执行的是select操作
  30. -->

7.创建mybatis的主配置文件(xml文件):有一个,放在resources目录下

1)定义创建连接实例的数据源(DataSource)对象

2)指定其他mapper文件的位置

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6. <environments default="development">
  7. <environment id="development">
  8. <transactionManager type="JDBC"/>
  9. <!--配置数据源:创建Connection对象-->
  10. <dataSource type="POOLED">
  11. <!--driver:驱动的内容-->
  12. <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
  13. <!--链接数据库的url-->
  14. <property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&amp;characterEncoding=utf-8"/>
  15. <!--用户名-->
  16. <property name="username" value="root"/>
  17. <!--密码-->
  18. <property name="password" value="root"/>
  19. </dataSource>
  20. </environment>
  21. </environments>
  22. <!--指定其他mapper文件的位置:
  23. 指定其他mapper文件目的是找到其他文件的sql语句
  24. -->
  25. <mappers>
  26. <!--
  27. 使用mapper的resource属性执行mapper文件的路径
  28. 这个路径是从target/classes路径开启的
  29. 使用注意:
  30. resource="mapper文件的路径,使用的是 做分隔路径"
  31. 一个mapper resource指定一个mapper文件
  32. -->
  33. <mapper resource="comludaoStudentDao.xml"/>
  34. </mappers>
  35. </configuration>

8.创建测试的内容

使用main方法,测试mybatis访问数据库

也可以使用junit访问数据库 

 代码如下:

  1. package com.lu;
  2. import com.lu.entity.Student;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.Test;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. public class MyTest {
  11. //测试mybatis执行sql语句
  12. @Test
  13. public void testSelectStudentById() throws IOException {
  14. //调用mybatis某个对象方法,执行mapper文件中的sql语句
  15. //mybatis的个心累:SqlSessionFactory
  16. //1.定义mybatis主配置文件的位置,从类路径开始的相对路径
  17. String config = "mybatis";
  18. //2.读取主配置文件,使用mybatis框架中的Resources类
  19. InputStream inputStream = Resources.getResourceAsStream(config);
  20. //3.创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类
  21. SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
  22. //4.获取SqlSession对象
  23. SqlSession session = factory.openSession();
  24. //5.指定要执行的sql语句的id
  25. // sql语句的id = namespave + "." + select|update|insert|delete标签的id属性值
  26. String sqlId = "com.lu.dao.StudentDao" + "." + "selectStudentById";
  27. //6.通过SqlSession的方法来执行sql语句
  28. Student student = session.selectOne(sqlId);
  29. System.out.println("使用mybatis来查询一个学生:" + student);
  30. //7.关闭SqlSession对象
  31. session.close();
  32. }
  33. }

控制台输出:

 

到这里我们已经实现了第一个MyBatis的例子

下面我们来修改一下代码,体验一下占位符

3 MyBatis使用占位符

我们修改StudentDao.xml文件中select语句

  1. <select id="selectStudentById" resultType="com.lu.entity.Student">
  2. select id,name,email,age from student where id = #{studentId}
  3. </select>

这样我们就使用了占位符,#{}

表示从Java程序中传入过来的数据

我们修改测试代码

Student student = session.selectOne(sqlId, 1001);

重新执行代码,得到一样的输出

推荐阅读