IDEA使用maven加载myBatis(保姆级多图)
保姆级图文全流程配置
文中使用了mybatis官网比较推荐的用法,面向了接口,更方便了操作mybatis,另一种方法这儿就不唠了
创建工程
创建一个新的工程,不使用maven模板
填写项目名和GroupId
完成后IDEA里已经生成了一些文件和目录,并自动打开了maven的pom.xml文件
注意在设置里看一眼是不是自己的maven,别用成了IDEA的maven
创建子模
可以删掉src目录,再新建一个子模块,全默认通过
创建的子模块已经自动写好了父标签
配置mybatis的maven依赖
在mavenDemo的pom.xml文件里写入mybatis,mysql驱动(注意驱动版本要和自己用的数据库对的上)和junit的依赖
可以手动去mvn这个网站去查maven的依赖怎么写,放上连接:https://mvnrepository.com/
<dependencies>
<!-- mybatis -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!-- mysql -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.13</version>
</dependency>
<!-- junit -->
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.2</version>
<scope>test</scope>
</dependency>
</dependencies>
在untitled模块下的资源目录resource下创建mybatis的配置文件:mybatis-config.xml
简单的填写一下数据库信息
<?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://127.0.0.1:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="toor"/>
</dataSource>
</environment>
</environments>
</configuration>
到此架子还差亿点点就完事了
写一个Demo
写Demo的时候依然还要搭架子
在src目录下的java文件夹里创建三个包dao、pojo、utils
再utils包下创建一个工具类MyBatisUtil
package xyz.baochao.utils;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtil {
//提升SqlSessionFactory作用域
private static SqlSessionFactory sqlSessionFactory;
static{
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//方便我们直接获取SqlSession
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
数据库里建一张表一会儿那来做测试
CREATE TABLE users(
u_id INT(20) PRIMARY KEY,
u_name char(20),
u_pwd char(20)
);
INSERT INTO users(u_id,u_name,u_pwd) VALUES
(1,'zs',123456),
(2,'ls',456789),
(3,'ww',789123);
因为mybatis传值的时候是借助了实体类,所以此时应准备一个能和数据库user对应的User类,放在pojo包下
User类里三个成员变量,IDEA自动生成get和set方法,再来个toString方法,构造方法默认无参构造
感人的IDEA,解放了双手,啥时候可以自己写代码就更好了
在dao包下再弄个接口,名字叫个UserDao吧,完美了,以后都是面向接口调方法,一个方法解决所有烦恼!
package xyz.baochao.dao;
import xyz.baochao.pojo.User;
import java.util.List;
public interface UserDao {
//查询所有用户数据
List<User> getAll();
}
在旁边再键一个UserMapper.xml,以后所有的sql语句都写在这里面了,解耦合!妙啊!
<?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="xyz.baochao.dao.UserDao">
<!-- id 接口里的方法名 resultType 返回值类型指向User类 -->
<select id="getAll" resultType="xyz.baochao.pojo.User">
select * from users
</select>
</mapper>
在mybatis-config.xml文件里写:
<!-- 把刚才是UserMapper.xml文件加载进mybatis主配置文件 -->
<mappers>
<mapper resource="xyz/baochao/dao/UserMapper.xml" />
</mappers>
此时的目录结构应该是这样的:
在进行测试之前还有一件很重要的事情, 就是maven的资源过滤!!!
把两个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>
好了,此时全部搭建完毕了,测试测试走起来!
进行测试
在测试包下新建测试类,包名和上面java文件夹下相同,类名就叫UserDaoTest吧,方便管理
package xyz.baochao.dao;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import xyz.baochao.pojo.User;
import xyz.baochao.utils.MyBatisUtil;
import java.util.List;
public class UserDaoTest {
@Test
public void test(){
//使用工具类获取SqlSession
SqlSession sqlSession = MyBatisUtil.getSqlSession();
//把接口加载进来
UserDao userDao = sqlSession.getMapper(UserDao.class);
//取出数据库中的所有数据放入集合
List<User> userList = userDao.getAll();
//遍历集合输出内容
for (User user : userList) {
System.out.println("user = " + user);
}
//关闭SqlSession
sqlSession.close();
}
}
测试走一下:
第一次居然报错了,报了ExceptionInInitializerError,检查了一下,资源过滤没错,正当一筹莫展的时候突然发现,在xml配置文件里我写了中文注释,再看字符编码:
<?xml version="1.0" encoding="UTF-8"?>
好家伙,字符编码的问题,去掉utf-8中间的“-”,就是这个小横杠
<?xml version="1.0" encoding="UTF8"?>
改完走一波测试!
一切正常,搭建过程看似麻烦,但是实际上比起jdbc手动撸代码不知道舒服了多少倍,长出一口气对IDEA说了句:“IDEA啊,你已经是一个成熟的工具了,应该会自己去改异常了……”