MyBatis框架快速入门
下载MyBatis
http://github.com/mybatis/mybatis-3/releases
中文文档:
https://mybatis.org/mybatis-3/zh/index.html
第一个mybatis例子
实现步骤:
- 新建的student表
MyBatis依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
mysql驱动
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>x.x.x</version>
</dependency>
-
加入maven的MyBatis坐标 ,MySQL驱动的坐标
-
创建实体类,student–保存表中的一行数据
//推荐和表明一样,容易记忆
//定义属性,目前要求是属性名和类名一样
-
创建持久层的dao接口,定义操作数据库的方法
//接口 操作student表
//查询student表中的所有数据
-
创建一个MyBatis使用的配置文件
叫做SQL映射文件: 写SQL语句的. 一般一个表一个SQL映射,这个文件叫xml文件.
1. 在接口所在的目录中. 2. 文件名称和接口保持一致.
-
创建mybatis的主配置文件:
一个项目就一个主配置文件.
主配置文件提供了数据库的链接信息和SQL映射文件的位置信息.
-
创建使用MyBatis类,
通过MyBatis访问数据库.
流程和代码
- 在数据库中创建Student类
-
创建student类
package com.bipt.domain; 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 "Student{" + "id=" + id + ", name='" + name + '\'' + ", email='" + email + '\'' + ", age=" + age + '}'; } }
-
创建StudentDao接口
package com.bipt.dao; import com.bipt.domain.Student; import java.util.List; //接口,操作student表 public interface StudentDao { //查询student表的所有数据 public List<Student> selectStudents(); }
-
配置StudentDao.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="com.bipt.dao.StudentDao"> <!-- select:表示查询操作 id:你要执行的sql语法的唯一标识,MyBatis会使用这个id的值来找到要执行的SQL语句 可以自定义,但是要求你使用接口中的方法名称 resultType:表示结果的类型,是SQL语句执行后得到的Resultset,便利这个Resultset得到的Java对象的类型 值为类型的全限定名称. --> <select id="selectStudents" resultType="com.bipt.domain.Student"> select id,name,email,age from Student order by id </select> </mapper> <!-- SQL映射文件:写SQL语句的,MyBatis会执行这些SQL 1.指定约束文件 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> mybatis-3-mapper.dtd是约束文件的名称,扩展名为.dtd的 2.约束文件的作用: 限制,检查在当前文件中出现的标签,属性必须符合MyBatis的要求. 3.mapper 是当前文件的根标签,是必须的 namespace 叫命名空间,是惟一的,可以是自定义的字符串 要求你使用dao接口的全限定名称 4. 在当前文件中,可以使用特定的标签,便是数据库的特定操作 <select>:表示执行查询 <update>:表示恒信数据可的操作,就是在<update>标签中 写的是update语句 <insert>:表示插入,放的是insert语句 <delete>:表示删除,执行的是delete语句 -->
-
配置MyBatis主配置文件
<?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> <!--环境配置:数据可的链接信息 default:必须和某个environment的id值一样. 告诉MyBatis使用哪个数据库的连接信息,也就是访问哪个数据库 --> <environments default="mydov"> <!--environment:一个数据库信息的配置,环境 id:一个唯一的值,自定义,表示环境的名称 --> <environment id="mydov"> <!--transactionManager :mybatis的事务类型 type:JDBC(表示使用jdbd中的Connection对象的commit,roilback做事务处理) --> <transactionManager type="JDBC"/> <!-- dataSource :表示数据源,链接数据库的 type:表示数据源的类型,POOLED表示使用连接池 --> <dataSource type="POOLED"> <!-- driver,user,username,password 是固定的,不能自定义 --> <!--数据库的驱动类名--> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <!--链接数据库的url字符串--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/> <!--访问数据库的用户名--> <property name="username" value="root"/> <!--密码--> <property name="password" value="123"/> </dataSource> </environment> </environments> <!--sql mapper(SQL映射文件)的位置--> <mappers> <!--一个mapper标签指定一个文件的位置. 从类路径开始的路径信息. --> <mapper resource="com/bipt/dao/StudentDao.xml"/> </mappers> </configuration> <!-- mybatis的主配置文件:主要定义了数据库的配置信息,SQL映射文件的位置 1.约束文件 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> mybatis-3-mapper.dtd是约束文件的名称,扩展名为.dtd的 2.configuration -->
-
编写测试类
package com.bipt; import com.bipt.domain.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 java.io.IOException; import java.io.InputStream; import java.util.List; public class MyApp { public static void main(String[] args) throws IOException { //访问MyBatis读取Student数据 //1.定义MyBatis主配置问价你的名称 String config = "mybatis.xml"; //2.读取config文件 InputStream in = Resources.getResourceAsStream(config); //3.创建SqlSessionFactoryBuilder SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //4.创建SqlSessionFactory对象 SqlSessionFactory factory = builder.build(in); //5.[重要]获取SqlSession对象,从SQLSessionFactory中获取SqlSession SqlSession sqlSession = factory.openSession(); //6.指定执行SQL语句的标识 SQL映射文件中的namespace+"."+标签的id值 String sqlId = "com.bipt.dao.StudentDao.selectStudents"; //7.执行SQL语句,通过sqlId找到语句 List<Student> studnetList = sqlSession.selectList(sqlId); //8.输出结果 studnetList.forEach(stu -> System.out.println(stu)); //9.关闭SQLSession对象 sqlSession.close(); } }
结果:
遇到的问题
在运行是日志会打印一个提醒异常:
Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
这是在提醒我们,新的JDBC驱动程序在com.mysql.cj.jdbc.Driver,我们改过来就能消除该条日志
增加案例
-
在StudentDao中增加insert接口
public int insertStudent(Student student);
-
在StudentDao.xml中增加语句
<insert id="insertStudent"> insert into student value (#{id},#{name},#{email},#{age}) </insert>
-
更改插入语句
//访问MyBatis读取Student数据 //1.定义MyBatis主配置问价你的名称 String config = "mybatis.xml"; //2.读取config文件 InputStream in = Resources.getResourceAsStream(config); //3.创建SqlSessionFactoryBuilder SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); //4.创建SqlSessionFactory对象 SqlSessionFactory factory = builder.build(in); //5.[重要]获取SqlSession对象,从SQLSessionFactory中获取SqlSession SqlSession sqlSession = factory.openSession(); //6.指定执行SQL语句的标识 SQL映射文件中的namespace+"."+标签的id值 String sqlId = "com.bipt.dao.StudentDao.insertStudent"; //7.执行SQL语句,通过sqlId找到语句 Student student = new Student(); student.setId(1003); student.setName("张飞"); student.setEmail("19261847238@qq.com"); student.setAge(24); int num = sqlSession.insert(sqlId, student); //8.输出结果 System.out.println("共计插入了"+num+"行"); //MyBatis默认不自动提交数据,所以在insert,delete,update后要手动提交事务 sqlSession.commit(); //9.关闭SQLSession对象 sqlSession.close();
更换标识Id和调用的方法即可
配置日志功能
在mabatis.xml(maybtic-config文件)中进行配置~
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>