MyBatis框架快速入门(四天学会MyBatis之第二天)
今天我们来学习一个案例,通过对这个案例的学习,掌握mybatis的方法
目录
7.创建mybatis的主配置文件(xml文件):有一个,放在resources目录下
1 使用MyBatis准备
学习文档:
我们按照这个学习路线来学习
在学习此教程之前你需要会这些知识:Java基础,JDBC,Maven
2 搭建MyBatis项目八步
1.创建mysql数据库和表
数据库名:ssm;表名:student
插入一条数据:
2.在idea中创建一个空项目
然后输入项目名
创建完成之后,我们在里面添加Modules
创建一个Maven项目
输入名字:
一直点next直到创建完成项目,创建完成后我们来查看项目的结构
3.修改pom.xml文件
1)加入依赖:mybatis依赖,MySQL驱动,junit
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.13.2</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.5.7</version>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>8.0.26</version>
- </dependency>
2)在<build>加入资源插件
- <resources>
- <resource>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.properties</include>
- <include>**/*.xml</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- </resources>
4.创建一个实体类Student
首先创建一个实体包,创建一个Student实体类
定义属性,属性名和列名保持一致
- package com.lu.entity;
-
- public class Student {
- //属性名和列名保持一致
- private Integer id;
- private String name;
- private String email;
- private Integer age;
-
- public Integer getId() {
- return id;
- }
-
- public void setId(Integer id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public Integer getAge() {
- return age;
- }
-
- public void setAge(Integer age) {
- this.age = age;
- }
-
- @Override
- public String toString() {
- return "学生实体信息{" +
- "id=" + id +
- ", name='" + name + ''' +
- ", email='" + email + ''' +
- ", age=" + age +
- '}';
- }
- }
5.创建Dao接口,定义操作数据库的方法
创建dao包
代码如下:
- package com.lu.dao;
-
- import com.lu.entity.Student;
-
- public interface StudentDao {
-
- //查询一个学生
- Student selectStudentById(Integer id);
- }
6.创建xml文件(mapper文件),写sql语句
mybatis框架推荐是把sql语句和java代码分开
mapper文件:定义和dao接口在同一目录,一个表一个mapper文件
- <?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.lu.dao.StudentDao">
-
- <!--查询一个学生Student
- <select>:表示查询操作,里面是select语句
- id:要执行的sql语句的唯一标识,是一个自定义字符串
- 推荐使用dao接口中的方法名称
- resultType:告诉mybatis,执行sql语句,把数据赋值给哪个类型的Java对象
- resultType的值现在使用的Java对象的全限定名称
- -->
- <select id="selectStudentById" resultType="com.lu.entity.Student">
- select id,name,email,age from student where id = 1001
- </select>
- </mapper>
-
- <!--
- 1.约束文件
- http://mybatis.org/dtd/mybatis-3-mapper.dtd
- 约束文件的作用:定义和限制当前文件中可以使用的标签和属性,以及标签出现的顺序
- 2.mapper是根标签
- namespace:命名空间,必须有值,不能为空。唯一值
- 推荐使用Dao接口的全限定名称
- 作用:参与识别sql语句的作用。
- 3.在mapper里面可以写 <insert>,<update>,<delete>,<select>等标签
- <insert>里面是insert语句,表示执行的是insert操作
- <update>里面是update语句,表示执行的是update操作
- <delete>里面是delete语句,表示执行的是delete操作
- <select>里面是select语句,表示执行的是select操作
- -->
7.创建mybatis的主配置文件(xml文件):有一个,放在resources目录下
1)定义创建连接实例的数据源(DataSource)对象
2)指定其他mapper文件的位置
- <?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"/>
- <!--配置数据源:创建Connection对象-->
- <dataSource type="POOLED">
- <!--driver:驱动的内容-->
- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
- <!--链接数据库的url-->
- <property name="url" value="jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=utf-8"/>
- <!--用户名-->
- <property name="username" value="root"/>
- <!--密码-->
- <property name="password" value="root"/>
- </dataSource>
- </environment>
- </environments>
-
- <!--指定其他mapper文件的位置:
- 指定其他mapper文件目的是找到其他文件的sql语句
- -->
- <mappers>
- <!--
- 使用mapper的resource属性执行mapper文件的路径
- 这个路径是从target/classes路径开启的
- 使用注意:
- resource="mapper文件的路径,使用的是 做分隔路径"
- 一个mapper resource指定一个mapper文件
- -->
- <mapper resource="comludaoStudentDao.xml"/>
- </mappers>
- </configuration>
8.创建测试的内容
使用main方法,测试mybatis访问数据库
也可以使用junit访问数据库
代码如下:
- package com.lu;
-
- import com.lu.entity.Student;
- 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 java.io.IOException;
- import java.io.InputStream;
-
- public class MyTest {
- //测试mybatis执行sql语句
- @Test
- public void testSelectStudentById() throws IOException {
- //调用mybatis某个对象方法,执行mapper文件中的sql语句
- //mybatis的个心累:SqlSessionFactory
-
- //1.定义mybatis主配置文件的位置,从类路径开始的相对路径
- String config = "mybatis";
- //2.读取主配置文件,使用mybatis框架中的Resources类
- InputStream inputStream = Resources.getResourceAsStream(config);
- //3.创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder类
- SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
-
- //4.获取SqlSession对象
- SqlSession session = factory.openSession();
-
- //5.指定要执行的sql语句的id
- // sql语句的id = namespave + "." + select|update|insert|delete标签的id属性值
- String sqlId = "com.lu.dao.StudentDao" + "." + "selectStudentById";
-
- //6.通过SqlSession的方法来执行sql语句
- Student student = session.selectOne(sqlId);
- System.out.println("使用mybatis来查询一个学生:" + student);
-
- //7.关闭SqlSession对象
- session.close();
- }
- }
控制台输出:
到这里我们已经实现了第一个MyBatis的例子
下面我们来修改一下代码,体验一下占位符
3 MyBatis使用占位符
我们修改StudentDao.xml文件中select语句
- <select id="selectStudentById" resultType="com.lu.entity.Student">
- select id,name,email,age from student where id = #{studentId}
- </select>
这样我们就使用了占位符,#{}
表示从Java程序中传入过来的数据
我们修改测试代码
Student student = session.selectOne(sqlId, 1001);
重新执行代码,得到一样的输出
推荐阅读