文章目录
- 一、总体步骤
- 二、创建工程
- 三、配置环境
- 配置maven环境
- 然后配置我们的log4j来打印日志,我就直接放到resource文件夹下了
- 然后配置我们的数据的信息,我就直接叫jdbc.properties放再resources文件夹下了
- 接下来再来配置Mybatis的主配置文件,文件名采用它建议的sqlMapConfig.xml的形式
- 创建实体类、实体类的Dao以及相应的映射文件
- 四、测试环境
一、总体步骤
1.创建工程
2.配置环境
3.测试环境
二、创建工程
首先在IDEA中创建maven-web工程
这里没啥好说的,直接点完成就好了。
如果你是第一次创建,那么maven会去下载一些相关的配置之类的,稍微等一会儿就好了。
创建完工程之后开始创建各个包
创建好之后,接下来就该配置环境了
三、配置环境
配置maven环境
首先是配置maven的依赖:
<!--连接本地数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--日志信息-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!--mybatis导入-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!--junit单元测试导入-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
配置maven的读取日志,要把这个放到project标签下的build标签中
<!--
下面的是为了让IDEA的maven工程可以读取放在java包下的配置文件
这个也不知道是bug还是啥,反正只要是maven工程,不管你有没有resource文件夹
我的电脑都读取不到,就只好这样去配置了
-->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
然后配置我们的log4j来打印日志,我就直接放到resource文件夹下了
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
然后配置我们的数据的信息,我就直接叫jdbc.properties放再resources文件夹下了
其实这个文件夹没有那么烦人,反而很好用,但是mybatis的话我还是习惯放到dao包下。我觉得如果是全局性的配置文件就放到resources文件夹下即可,但是如果是那种对应某个包的,还是放到某个包里面好一点
# 在这里加上jdbc的原因是为了避免以后不必要的冲突
# 如果以后这个配置文件配置的数据库信息比较多的话,这样可以尽量避免名字上的冲突
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
接下来再来配置Mybatis的主配置文件,文件名采用它建议的sqlMapConfig.xml的形式
- 首先,先配置读取的配置文件,因为我们要读取我们的数据配置文件
<!--在这里加载外部的配置文件,resource表示本地的配置文件,url这表示要加载的网上的文件-->
<properties resource="jdbc.properties" ></properties>
- 配置typeAliases
<typeAliases>
<!--
package表示是使用包扫描的方式来起别名
typeAlias表示给某个类起别名,但是那样效率太低,建议直接包扫描来
在这里使用点来分割-->
<package name="com.ps.pojo"/>
</typeAliases>
- 配置数据库环境
<!--在这个里面可以配置多个数据,default就是表示你默认要使用那个数据的配置-->
<environments default="JDBC">
<!--配置一个完整的数据库环境,这里的参数可以使用我们配置文件中的参数-->
<!--这个id就是为这个环境起的一个名字,用来唯一标识这个-->
<!-- 在一个大的environment中可以配置多个environment -->
<environment id="JDBC">
<!--配置事务管理器
JDBC就表示采用jdbc的事务管理器
MANAGED表示事务交给容器管理,mybatis不管理,后续会交给spring容器管理-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库的信息,POOLED表示使用连接池,UNPOOLED表示不适用连接池-->
<dataSource type="POOLED">
<!--下面就是数据集体的信息配置了,在这里想要使用配置文件中的参数的话
就需要使用${参数名}这种方式来获取数据-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
- 配置映射文件路径,如果你全程采用注解的话,也可以不配置
<!--配置映射文件的路径-->
<mappers>
<!--package表示使用包扫描的方式,这样去配置-->
<!--mapper表示一个一个的去配置,和上面的取别名一样,效率太低,不建议这样使用-->
<package name="com.ps.dao"/>
</mappers>
那么再加上引入约束等就是这样的:
<?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>
<!--在这里加载外部的配置文件,resource表示本地的配置文件,url这表示要加载的网上的文件-->
<properties resource="jdbc.properties" ></properties>
<!--在这里是给实体类起别名,也就是简化实体类的输入
这样配置之后在mybatis的mapper配置中就不需要些类全名了
而且,改名之后它是不区分大小写的
-->
<typeAliases>
<!--
package表示是使用包扫描的方式来起别名
typeAlias表示给某个类起别名,但是那样效率太低,建议直接包扫描来
在这里使用点来分割-->
<package name="com.ps.pojo"/>
</typeAliases>
<!--在这个里面可以配置多个数据,default就是表示你默认要使用那个数据的配置-->
<environments default="JDBC">
<!--配置一个完整的数据库环境,这里的参数可以使用我们配置文件中的参数-->
<!--这个id就是为这个环境起的一个名字,用来唯一标识这个-->
<!-- 在一个大的environment中可以配置多个environment -->
<environment id="JDBC">
<!--配置事务管理器
JDBC就表示采用jdbc的事务管理器
MANAGED表示事务交给容器管理,mybatis不管理,后续会交给spring容器管理-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据库的信息,POOLED表示使用连接池,UNPOOLED表示不适用连接池-->
<dataSource type="POOLED">
<!--下面就是数据集体的信息配置了,在这里想要使用配置文件中的参数的话
就需要使用${参数名}这种方式来获取数据-->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--配置映射文件的路径-->
<mappers>
<!--package表示使用包扫描的方式,这样去配置-->
<!--mapper表示一个一个的去配置,和上面的取别名一样,效率太低,不建议这样使用-->
<package name="com.ps.dao"/>
</mappers>
</configuration>
创建实体类、实体类的Dao以及相应的映射文件
创建实体类:
这里根据你数据库的表来创建即可
package com.ps.pojo;
import java.util.List;
public class User {
private int id;
private String username;
private String birthday;
private char sex;
private String address;
}
剩下的就是一些getter、setter、构造和toString方法了,不过这里要注意构造方法建议写两个,一个是空参构造,一个是满参构造。
创建UserDao:
package com.ps.dao;
import com.ps.pojo.User;
import java.util.List;
public interface UserDao {
List<User> findUser();
}
配置映射文件:
<?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.ps.dao.UserDao">
<!--把sql语句写在两个标签之内-->
<!--
id标识接口中方法的方法名
resultType标识返回值的类型,由于之前配置了别名,所以可以直接使用小写类名来获取
-->
<!--标签根据你需要的sql语句来修改,有delete、inset、update-->
<select id="findUser" resultType="user">
select * from user
</select>
</mapper>
好的基本环境配置已经配置完了,接下来该测试代码了
四、测试环境
之前创建了test包就是用来放测试类的,那么就直接取那个包下创建类:
编写测试代码:
package com.ps.dao;
import com.ps.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.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.InputStream;
import java.util.List;
public class UserDaoTest {
private static SqlSession session = null;
private static SqlSessionFactory build = null;
//放到这里面的最好是只需要加载一次的,因为它只会加载一次
//如果把SqlSession也放到这里的话,那就只会打开一个连接,就失去了使用连接池的意义
@BeforeClass
public static void Init() throws Exception {
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");
//2.创建sqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.获得sqlSessionFactory对象
build = sessionFactoryBuilder.build(in);
}
//代码放到这里每个方法加载之前都会加载一次
@Before
public void getSession() {
//获得sqlSession,这个就相当于connection
session = build.openSession();
}
//这里建议按照test+方法名来命名,这样可以清晰的知道这个类是做什么的
//当然我自己经常弄乱,这个没有太大的问题,test在前在后都不影响
@Test
public void TestFindUser() {
//加载接口映射文件
UserDao mapper = session.getMapper(UserDao.class);
//调用实现了的方法,获得返回值
List<User> list = mapper.findUser();
//遍历返回的数组
for (User user : list) {
System.out.println(user);
}
}
//放到这里的代码,最后一个方法结束之后就会调用这个方法
@After
public void close() {
//关闭sqlSession,就相当于关闭了connection
//只不过如果设置了连接池,不会销毁连接,而是把连接放回到连接池中
session.close();
}
}
测试结果: