用maven和mybatis连接数据库的简单例子

无数个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的数据整行读出来了
在这里插入图片描述
当然还有增删改之类的问题,我还没有学到,现在只是查。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值