MyBaits概念
ORM:对象关系映射,是一个程序设计技术,用于实现面向对象编程语言里不同类型的数据之间的转换。
mybaits:对象关系映射(ORM)框架。常见的ORM框架还有:Hibernate,EclipseLink,JFinal等。
MyBatis的使用案例
- 添加依赖
- mybaits依赖
- 数据库驱动
- junit
- 创建数据库映射的实体类
- 配置mybatis-config.xml配置文件
- 配置mapper.xml接口映射的配置文件
测试
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.quail</groupId>
<artifactId>MyBatis-01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
</dependencies>
<!--
此配置用于编译mapper.xml
如果没有这个配置,将映射文件配置在接口下时,编译器不会读取
这个配置是告诉编译器去这个目录找xml,进行编译
-->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
<?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:控制mybatis全局行为。 setting name=“logImpl”:设置mybatis输出日志 --> <!-- <settings>--> <!-- <setting name="logImpl" value="STDOUT_LOGGING"/>--> <!-- </settings>--> <!-- 环境配置:数据库的连接信息 default:必须和某个environment的id值一样。 告诉mybatis使用哪个数据库的连接信息。就是访问哪个数据库 --> <environments default="mybatis"> <!-- environment:一个数据库信息的配置,环境 id:唯一值,自定义,表示环境名称 --> <environment id="mybatis"> <!-- transactionManager:mybatis的事务类型 type:JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理) --> <transactionManager type="JDBC"></transactionManager> <!-- dataSource:表示数据源,连接数据库 type:表示数据源的类型,POOLED表示使用连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mis?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--sql mapper(sql映射文件)的位置--> <mappers> <mapper resource="com/quail/dao/TeacherMapper.xml"/> </mappers> </configuration>
```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">
```java
package com.quail.test;
import com.quail.pojo.Teacher;
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.InputStream;
/**
* @author quail
* @date 2021/3/19 20:53
* @TODO
*/
public class MybatisTest {
@Test
public void test(){
// 获取配置文件流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("mybatis-config.xml");
// 创建连接
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = factory.openSession();
// 执行sql语句
Teacher teacher = sqlSession.selectOne("TeacherDao.queryById", 3l);
System.out.println(teacher);
}
}
MyBatis实现简单的CRUD
tips:-
- (DML)增删改操作需要提交事务
- 模糊查询时使用${}替换符,因为#{}占位符在’’(单引号)中不生效
像分页查询这样需要传入多个参数的方法,要使用map来配合。mybatis的sqlSession执行sql语句的方法中没有可以创多个参数的方法,所以只能用map。
<?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="TeacherDao"> <select id="queryById" resultType="com.quail.pojo.Teacher"> select * from teacher where teacherId = #{teacherId}; </select> <insert id="create" parameterType="com.quail.pojo.Teacher"> insert into teacher(teacherName,loginPass,teacherGender,teacherTel,status) values(#{teacherName},#{loginPass},#{teacherGender},#{teacherTel},#{status}) </insert> <delete id="delete" parameterType="long"> delete from teacher where teacherId = #{teacherId} </delete> <update id="update" parameterType="com.quail.pojo.Teacher"> update teacher set teacherName = #{teacherName} where teacherId = #{teacherId} </update> <select id="limitQuery" parameterType="int" resultType="com.quail.pojo.Teacher"> select * from teacher limit #{start},#{count} </select> <select id="likeQuery" parameterType="string" resultType="com.quail.pojo.Teacher"> select * from teacher where teacherName like '%${value}%' </select> </mapper>
```java package com.quail.test;
import com.quail.pojo.Teacher; 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.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map;
/**
- @author quail
- @date 2021/3/19 20:53
@TODO */ public class MybatisTest { // 获取配置文件流 private InputStream in = this.getClass().getClassLoader().getResourceAsStream(“mybatis-config.xml”); // 创建连接 private SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); private SqlSession sqlSession = factory.openSession();
private String mapper = “TeacherDao.”;
@Test public void test(){
Teacher teacher = sqlSession.selectOne("TeacherDao.queryById", 3l); System.out.println(teacher);
}
@Test public void testCreate(){
Teacher teacher = new Teacher(); teacher.setLoginPass("123"); teacher.setStatus(1); teacher.setTeacherGender(2); teacher.setTeacherName("quail"); teacher.setTeacherTel("1829392123"); int insert = sqlSession.insert(mapper + "create", teacher); System.out.println(insert); // 增删改操作需要手动提交事务,DML sqlSession.commit();
}
@Test public void testDelete(){
int delete = sqlSession.delete(mapper + "delete", 20l); sqlSession.commit();
}
@Test public void testUpdate(){
Teacher teacher = new Teacher(); teacher.setTeacherId(18l); teacher.setTeacherName("鹌鹑"); int delete = sqlSession.delete(mapper + "update", teacher); System.out.println(delete); sqlSession.commit();
}
@Test public void testLimitQuery(){
Map<String,Integer> map = new HashMap<String,Integer>(); map.put("start",0); map.put("count",5); List<Teacher> list = sqlSession.selectList(mapper + "limitQuery",map); System.out.println(list);
}
@Test public void testLikeQuery(){
String data = "双虎"; List<Teacher> list = sqlSession.selectList(mapper + "likeQuery",data); System.out.println(list);
} }
```