1.整合MyBatis
- 导入jar包
- junit
- mybatis
- mysql数据库
- spring相关
- AOP织入
- mybatis-spring【新知识点】
<?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">
<parent>
<artifactId>Spring-Study</artifactId>
<groupId>com.thhh</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Spring-10-MyBatis</artifactId>
<dependencies>
<!--junit依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--数据库依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--spring操作数据库,需要再导入一个spring-jdbc这个依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!--AOP织入包,简单理解,支持切入点表达式等等-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<!--mybatis-spring整合依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.5</version>
</dependency>
<!--lombok依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
</dependencies>
</project>
- 编写配置文件
- 测试
2.回忆MyBatis
使用步骤
- 编写实体类 (POJO)
- 辨析MyBatis核心配置文件 (mybatis-config.xml)
- 编写接口 (Dao)
- 编写mapper.xml (实现Dao)
- 测试
3.代码实现
-
创建一个新model:Spring-10-MyBatis
-
在resources文件夹下创建一个 [mybatis-config.xml] 配置文件
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <!--核心配置文件--> <!--配置节点--> <configuration> <!--类型别名节点--> <typeAliases> <package name="com.thhh.pojo"/><!--直接包扫描,我们可以使用类名,首字母大小写都可以--> </typeAliases> <!--环境节点--> <environments default="development"><!--environments节点的default属性指定配置的众多环境中默认使用哪一个环境--> <!--环境1,我们还可以配置其他很多的环境节点--> <environment id="development"> <transactionManager type="JDBC"/><!--事务管理,这里使用的就是JDBC中的事务管理--> <dataSource type="POOLED"> <!--属性节点,name设置属性名称,value设置属性值--> <!--这里配置的就是JDBC4大参数--> <property name="driver" value="com.mysql.jdbc.Driver"/><!--驱动--> <!--注意:在XML中使不能直接使用&连接参数,我们需要转义,使用&代替&--> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8"/><!--数据库的URL--> <property name="username" value="root"/><!--连接数据库的账号--> <property name="password" value="123"/><!--连接数据库的密码--> </dataSource> </environment> </environments> <mappers> <mapper resource="com/thhh/dao/UserMapper.xml"/> </mappers> </configuration>
-
按照数据库中的表创建pojo,这里我们就使用mybatis数据库中的user表来回忆
package com.thhh.pojo; import lombok.Data; @Data public class User { private int id; private String name; private String pwd; }
-
有一个pojo,不管用不用,就去为它创建一个mapper文件,这里就创建一个UserMapper(就是原来Dao中操作user表的UserDao接口)
package com.thhh.mapper; import com.thhh.pojo.User; import java.util.List; //Dao接口,在mybatis中使用mapper命名来代替dao命名 public interface UserMapper { public List<User> queryUserList(); }
-
有一个mapper创建了,我们就为其创建一个mapper.xml文件,这里就创建一个UserMapper.xml文件(就是原来Dao接口的实现类UserDaoImpl),在mybatis中我们使用xml文件来实现Dao接口
<?xml version="1.0" encoding="UTF8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper> </mapper>
这个文件创建的时候,我们可以直接去拷贝mybatis-config.xml文件的内容来修改
-
有一个mapper.xml文件,我们就去mybatis核心配置文件mybatis-config.xml中注册一个(这是在告诉mybatis去哪里找SQL语句)
<mappers> <mapper resource="com/thhh/mapper/UserMapper.xml"/> </mappers>
mapper注册有3种方式,其中使用class注册最好用,因为使用class注册,既适用于我们使用xml文件写sql,又适用于我们在mapper文件中直接使用注解写sql语句;而resource只支持我们使用xml文件写sql;第3种方式就是包扫描,它的作用等同于为这个整个包的POJO都写了一个class注册
使用的时候还要注意,整个mybatis中,只有使用resource注册mapper的时候,路径才使用"/“分开,其他的都是使用”."来分隔
-
为mapper.xml文件绑定接口,这就相当于原来使用java文件实现接口的时候的"implement DAOinterface",这一点很容易忘记,但是在测试的时候会报错提示
-
我们要测试的功能是查询,所以在mapper.xml中使用select节点
- 测试
import com.thhh.mapper.UserMapper; import com.thhh.pojo.User; 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; import java.util.List; public class MyTest { @Test public void test01() throws IOException { //获取sqlsession对象,原来将它封装成了工具类 String resources = "mybatis-config.xml"; InputStream in = Resources.getResourceAsStream(resources); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); SqlSession sqlSession = factory.openSession(true); //测试开始 UserMapper mapper = sqlSession.getMapper(UserMapper.class);//获取dao实现类对象 List<User> userList = mapper.queryUserList();//执行dao中的方法 for (User user : userList) { System.out.println(user); } sqlSession.close();//关闭sqlSession,其实就是将conn归还到pool中方便下次使用 } }
- 解决办法:在pom.xml中加上如下配置
<build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>true</filtering> </resource> </resources> </build>
- 再次测试