无数个bug我调了两个小时。
第一步,创建一个maven项目。
第一步结束,maven项目构建成功。
第二步,利用pom.xml配置文件安装一些必要的依赖。
您可以访问maven repository网站下载,也可以复制我的。
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<!--注意,如果您的数据库版本是8以上,请不要使用下面这个依赖,要去官网复制适当的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
<!--将mybatis其余的编译依赖也一并引用-->
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ognl/ognl -->
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.2.20</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
依赖复制之后,在左侧菜单栏会有对应的包被下载好。
注意,第一是容易报错的log4j问题,因为我第一次运行的时候报错说没有这个包,所以我特意上网找办法,写了一个java文件导入它,但我现在找不到相关链接了,把代码贴过来吧。
(注意,如果你最后没有报log4j的错,就不用写这个文件了)
public class initLogRecord{
public static void initLog() {
FileInputStream fileInputStream = null;
try {
Properties properties = new Properties();
fileInputStream = new FileInputStream("src/main/resources/log4j.properties");
//这个log4j.properties我会贴下面
properties.load(fileInputStream);
PropertyConfigurator.configure(properties);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
log4j.properties:
# 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
这个文件放到"src/main/resources/log4j.properties"这个目录。
下面:
1.在src文件夹下新建main文件夹,再在main文件夹下新建resources文件夹,并把它设为Resources Root
在resources下新建2个文件和一个文件夹,分别是configuration.xml,
db.properties,和mappers(这是个文件夹)
configuration.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>
<!--将数据源信息放在属性文件中统一管理-->
<properties resource="db.properties">
</properties>
<settings>
<!--配置输出日志的实现-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!--使用并能够返回数据库自动生成的主键-->
<setting name="useGeneratedKeys" value="true"/>
<!--将字段名中的下划线映射成属性名的驼峰 style : detail_address => detailAddress-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!--开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<typeAliases>
<!--给我们代表数据库表的这个类起别名,方便使用-->
<typeAlias type="edu.hrbeu.entity.Website" alias="Website"/>
<package name="edu.hrbeu.entity"/>
</typeAliases>
<!--配置MySQL数据源-->
<environments default="这里填你数据库连接的名字,可能叫mysql什么什么的">
<environment id="这个和上面引号里填的一样">
<!--事务管理器类别-->
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源是否使用数据库连接池 POOLED使用连接池,UNPOOLED不适用-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="defaultAutoCommit" value="true"></property>
<property name="poolMaximumActiveConnections" value="20"></property>
<property name="poolMaximumIdleConnections" value="3"></property>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/WebsiteMapper.xml"/>
</mappers>
</configuration>
db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
//mysql8用这个:
//?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username=root
password=0711
test.driver=com.mysql.jdbc.Driver
test.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8
test.username=root
test.password=0711
这里面就包括url,username和password,端口3306后面跟的是数据库的名字,也就是说你想查的这个表属于哪个数据库你就写哪个库的名字
接着在src下的main下新建文件夹java并将它设置为sources root
在java下新建edu.hrbeu.dao,同级的还有db和entity
在dao目录下新建接口类WebsiteMapper
package edu.hrbeu.dao;
import edu.hrbeu.entity.Website;
import java.util.List;
/**
* @version 1.0
*/
public interface WebsiteMapper {
/*根据主键ID查找站点*/
Website findByPrimaryKey(int id);
/*根据站点名称进行模糊查找*/
List<Website> findLikeName(String name);
/*添加站点*/
int insert(Website website);
/*更新站点信息*/
int update(Website website);
/*根据id删除站点*/
int delete(int id);
}
在db文件夹下新建DBUtils.java类
package edu.hrbeu.db;
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.Reader;
/**
* @version 1.0
*/
public class DBUtils {
//实例化数据库会话工厂类
static SqlSessionFactory factory;
static {
try {
//加载主配置文件
Reader reader = Resources.getResourceAsReader("configuration.xml");
//创建工厂对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(reader, "mysql0711");
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSession(){
return factory.openSession();
}
public static void close(SqlSession sqlSession){
sqlSession.close();
}
}
在entity文件夹下新建Website类,它对应了一张数据库表
package edu.hrbeu.entity;
//站点实体类--表websites
/**
* @version 1.0
*/
public class Website {
private int id;
private String name;
private String url;
private int alexa;
private String country;
public Website(){}
public Website(int id, String name, String url, int alexa, String country) {
this.id = id;
this.name = name;
this.url = url;
this.alexa = alexa;
this.country = country;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getAlexa() {
return alexa;
}
public void setAlexa(int alexa) {
this.alexa = alexa;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "Website{" +
"id=" + id +
", name='" + name + '\'' +
", url='" + url + '\'' +
", alexa=" + alexa +
", country='" + country + '\'' +
'}';
}
}
整体目录是这样的。
然后在src目录下新建一个用于测试的文件夹test
在test下也和main类似的构建目录
最下一级就是需要我们运行的测试类WebsiteMapperTest
package edu.hrbeu.dao;
import edu.hrbeu.db.DBUtils;
import edu.hrbeu.entity.Website;
import org.apache.ibatis.session.SqlSession;
import org.junit.Before;
import org.junit.Test;
/**
* @version 1.0
*/
public class WebSiteMapperTest {
WebsiteMapper websiteMapper;
@Before
public void init(){
SqlSession session = DBUtils.getSession();//获取一个会话
websiteMapper = session.getMapper(WebsiteMapper.class);
}
@Test
public void test01(){
Website website = websiteMapper.findByPrimaryKey(1);
System.out.println(website);
}
}
点击代码test01旁边的绿色三角运行测试方法,观察输出结果:
忘了让您看看数据库的目录和内部数据了。
数据库的表名叫websites,你把他放哪个库里其实无所谓
这样就把id=1的数据整行读出来了
当然还有增删改之类的问题,我还没有学到,现在只是查。