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