eclipse创建maven项目,使用Mybatis

第一个Mybatis程序

搭建环境

1、搭建数据库
create database mybatis;
use mybatis;
CREATE TABLE `user`(
	id int(20) not null auto_increment,
	`name` varchar(30) DEFAULT null,
	`password` varchar(30) DEFAULT null,
	 PRIMARY key(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT into `user` VALUES(1,'张三','123456'),(2,'李四','123123'),(3,'王五','123321'),(4,'崔瀚','654321');
2、新建maven项目

file->new other->maven project->next->勾上Create a simple project->next->填写Group Id和Artifact Id,选择打包方式(web项目用war包)->finish

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在Navigator视图下文件夹目录如下:

在这里插入图片描述

Eclipse打开navigator视图的方法:window–>show view–>navigator

3、导入maven依赖

在pom.xml文件中增加依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" 
		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  
  <groupId>com.study</groupId>
  <artifactId>MybatisStudy</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <!-- 导入依赖 -->
  <dependencies>
  		<!-- Mysql驱动 -->
  		<dependency>
  			<groupId>mysql</groupId>
  			<artifactId>mysql-connector-java</artifactId>
  			<version>8.0.17</version>
  		</dependency>
  		<!-- Mybatis -->
  		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
  		<dependency>
  			<groupId>org.mybatis</groupId>
  			<artifactId>mybatis</artifactId>
  			<version>3.5.5</version>
  		</dependency>
  		<!-- junit -->
  		<dependency>
  			<groupId>junit</groupId>
  			<artifactId>junit</artifactId>
  			<version>4.12</version>
  		</dependency>
  </dependencies>
    
</project>

创建模块

1、编写mybatis核心文件

在src/main/resources下新建一个file,名字为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.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=true&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="admin"/>
      </dataSource>
    </environment>
  </environments>
<!--每一个mapper.xml文件都要在config文件中注册  -->
  <mappers>
    <mapper resource="mapper/UserMapper.xml"/>
  </mappers>
  
</configuration>

resource中的路径在后面说到。

2、编写mybatis工具类

在src/main/java文件夹下新建一个package,名字为utils

在utils包下新建一个类,名字为MybatisUtils

package utils;

import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/*
 * 从config文件中构建SqlSessionFactory ---> 创建SqlSession
 * SqlSession就相当于JDBC中的PreparedStatement,用来执行SQL语句的
 * */
public class MybatisUtils {
	
	private static SqlSessionFactory sqlSessionFactory;
	static {
		try {
			//使用Mybatis第一步:获取SqlSessionFactory对象
			String resource="mybatis-config.xml";//获取config文件
			InputStream inputStream = Resources.getResourceAsStream(resource);//加载文件资源
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//使用Mybatis第二步:获取SqlSession对象,执行SQL命令	
	//既然有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
	//SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
	public static SqlSession getSqlSession() {
		/*
		SqlSession sqlSession=sqlSessionFactory.openSession();
		return sqlSession;
		*/
		return sqlSessionFactory.openSession();
	}
}

此时发现有错误,因为maven依赖没有导入,我们需要导入一下pom.xml中一开始配置的一些jar包。右击项目名->maven->update maven->选择update project configuration from pom.xml->ok

在这里插入图片描述

千万注意此时只能这一个框,不要选择另个两个,但是默认另外两个是勾上的,所以要手动去掉,因为选择这两个框后,很多target下的空文件直接被删除掉了,导致后面无法进行。

编写代码

1、编写实体类

实体类与数据库表相对应

在src/main/java下新建一个包pojo,该包下新建一个类User

package pojo;

public class User {
	private int id;
	private String name;
	private String password;
	
	public User() {}
	public User(int id,String name,String password) {
		this.setId(id);
		this.setName(name);
		this.setPassword(password);
	}
	
	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 getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	@Override
	public String toString() {
		return "User{"+
				"id="+id+
				",name='"+name+'\''+
				",password='"+password+'\''+
				'}';
	}
}

2、实现mapper层

实现dao层,由于Mybatis中使用的是Mapper命名,所以这次可以迎合Mybatis,新建一个mapper层,即为之前所说的dao层

mapper接口–>接口实现类(Dao接口 --> 接口实现类)

在src/main/java下新建一个mapper包,该包下新建一个接口UserMapper,该接口提供一个抽象方法

//接口
package mapper;

import java.util.List;
import pojo.User;

public interface UserDao {
	List<User> getUserList();//接收数据库返回的数据
}

在mapper包下在新建一个file文件,名字为UserMapper.xml 。这个xml文件就想相当于是之前的实现类。并且这个UserMapper.xml必须在mybatis.config.xml文件中注册,否则会报错,所以在config文件中的resource中需要写上UserMapper.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">
  
<!--namespace =绑定一个对应的Dao/Mapper接口  -->
<mapper namespace="mapper.UserMapper">

<!-- 查询语句 : id=接口中执行的方法, resultType=返回结果的类型-->
  <select id="getUserList" resultType="pojo.User">
    select * from mybatis.user;
  </select>
</mapper>

注意:mapper文件中namespace和resultType要完整的名字,即带上报名,虽然UserMapper接口和UserMapper.xml文件在同一个包下,也必须要带上包名。

测试

junit工具类测试

在src/test/main/java下新建一个mapper包(dao包,随便写名字也可以,这里只是为了和上面对称),该包下新建一个测试类UserMapperTest

package mapper;

import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import dao.UserDao;
import pojo.User;

import utils.MybatisUtils;

public class UserDaoTest {
	@Test
	public void test() {
		
		//第一步:获取SqlSession对象
		SqlSession sqlSession=MybatisUtils.getSqlSession();
		
		//执行SQL语句
		//方式1:getMapper
		UserMapper mapper=sqlSession.getMapper(UserMapper.class);  //获取接口对象
		List<User> userList=mapper.getUserList();  //执行接口中的抽象方法
        
        //方式二:直接使用接口方法名
		//List<User> userList=sqlSession.selectList("mapper.UserMapper.getUserList");
		
        for(User user:userList) {
			System.out.println(user);
		}
		//关闭SqlSession
		sqlSession.close();
	}
}

右键选择Run AS–>Junit test,如果前面配置均无错误的话,会显示如下结果:

在这里插入图片描述

此时在navigator视图下,整个文件目录如下:

在这里插入图片描述

在Package Explorer下,目录文件如下:可以看到有一个Maven Dependencies,这就是之前导入的maven依赖包

在这里插入图片描述

有时可能会存在以下错误

错误1:java.io.IOException: Could not find resource mybatis-config.xml

1、这是因为maven项目的过滤问题,maven项目默认的根目录是src,按照我上面的流程那么所有的xml文件都在src下,默认一定会寻找到的,但有时如果将xml新建了一个文目录存放,而不是放在src下就会找不动config文件,此时右击文件夹–>Build path–>选择为默认根目录即可。

2、或者是在pom.xml文件下添加如下代码:

<!-- 在pom.xml文件中配置resources,来防止资源导出失败问题 -->
  <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>

错误2:pom.xml文件显示红叉(web.xml is missing and is set to true)

从前面的整个项目文件图中也能看到pom.xml文件左下角有个红色的,这并不影响整个程序的运行,但是也可以解决。

在这里插入图片描述

出现错误的原因是因为:默认的是war包的项目打包方式,而war包是web项目,需要web.xml文件,但是整个项目文件中没有。解决办法:右击项目,选择Java EE Tools–>Generate development Descriptor Stub即可,系统会自动在src/main/webapp下添加WEB-INF/web.xml文件,此时错误消除

或者该项目中不需要web.xml文件,可以在pom.xml文件中添加以下配置:

<!-- 项目中不需要配置web.xml,则使用下面语句设置成false -->    
  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
    </plugins>
</build>

总结

target文件夹是项目运行的目标文件夹,所有的程序的class文件都应该在target存在,以及用到的xml文件等,都在target目录下时,运行才不会报错。

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值