这篇开始搭建一个Mybatis项目。
新建一个普通的maven项目,大概流程就是创建一个普通的maven项目,创建完成后删除src目录,把当前项目当作父项目,编写pom文件。
我们需要导入mybatis的依赖和mysql的依赖,pom.xml内容为:
<!-- 父工程 -->
<groupId>com.wy.studys</groupId>
<artifactId>Mybatis-Study</artifactId>
<version>1.0-SNAPSHOT</version>
<!--导入依赖-->
<dependencies>
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
</dependencies>
父工程创建完成后,开始创建子项目,流程是创建一个普通的maven项目,项目名称为mybatis-01,则父工程的pom.xml中会自动添加module的信息:
<modules>
<module>mybatis-01</module>
</modules>
子工程里面也会有父工程的信息:
<parent>
<artifactId>Mybatis-Study</artifactId>
<groupId>com.wy.studys</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
然后在src-resource里面编写核心配置文件mybatis-config.xml,用于获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)内容为:
<?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"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments>
<!--这里需要将mapper文件注册,否则会抛出 配置文件没有注册的异常--> <mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
接下来就是编写mybatis工具类通过sqlSessionFactory获取sqlSession。
/** * 获取sqlSession */ public class MybatisUtil { public static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml";//可以直接获取resource路径下的文件 InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //从sqlSessionFactory中获取SqlSession的实例 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
后面就可以编写代码了。
实体类 省略。
Mapper接口:
public interface UserMapper { public List<User> getUserList(); }
接口实现类**Mapper.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.candice.mapper.UserMapper"> <select id="UserMapper" resultType="com.candice.pojo.User"> select * from user; </select> </mapper>
编写测试类:
/** * 测试类 */ public class UserMapperTest { @Test public void test() { SqlSession sqlSession = MybatisUtil.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> list = mapper.getUserList(); for (User user : list) { System.out.println("user====" + user.toString() ); } } }
启动后可能报的错:
mysql驱动问题:将
com.mysql.jdbc.Driver 改成
com.mysql.cj.jdbc.Driver
mysql的servertimezone问题,在url中指定时区:
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/>
找不到mapper.xml文件:
resources目录下的文件路径直接写:
<mapper resource="mapper/UserMapper.xml"/>
代码结构图:

这种配置还是很繁琐的,真实项目中应该都不需要这种配置,等后面再说吧。