这篇开始搭建一个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"/>
代码结构图:
这种配置还是很繁琐的,真实项目中应该都不需要这种配置,等后面再说吧。