从零开始搭建Mybatis框架

Mybatis是一个基于java的持久型框架,有了Mybatis,终于可以不用写jdbc代码这种东西了,写个搭建Mybatis框架过程,就当做个笔记吧。

(一)新建一个web项目,起好项目名之后一路next,finish。下面是项目建好后的工程目录(图中用的Eclipse工具,项目名FirstMybatis)

(二)加入Mybatis框架需要的jar包,我这里添加了4个,分别是:

jstl-1.2.jar   //jstl标准标签库,后面使用jsp页面来显示数据

log4j-1.2.17.jar  //日志包

mybatis-3.2.0.jar  //Mybatis的jar包,必须加入上面log4j-1.2.17.jar这个jar包,否则会报错,Mybatis更高的版本可能不用

mysql-connector-5.1.8.jar  //mysql驱动包,要连接mysql数据库必须加入

把上面的jar包放WebContent/WEB-INF/lib下添加依赖

为了便于管理,我在src下新建了5个包,包名可以自己定义

这里的Controller包用来存放控制器类,Service包用来处理业务,Pojo包存放实体类,Mapper包作为数据访问层,Utils包作为工具包

在src目录下再新建一个mybatis-config.xml文件,用来配置Mybatis的各种配置

下面贴图

(三)下面就是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即环境 -->
	<!-- 为了方便数据库配置,使用多种配置environment时,可以通过environments中的default
	来声明默认使用哪种配置 -->
  <environments default="mysql">
  
    <environment id="mysql">
      <transactionManager type="JDBC"/>
      <!-- pooled即池,配置连接池 -->
      <dataSource type="POOLED">
      	<!-- 配置驱动 -->
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <!-- 配置连接地址 -->
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
        <!-- 配置数据库用户名 -->
        <property name="username" value="root"/>
        <!-- 配置数据库密码 -->
        <property name="password" value="123456"/>
      </dataSource>
    </environment>
    
  </environments>
  
  <!-- 关联配置映射文件 -->
  <mappers>
  	<!-- 包扫描关联映射文件 -->
  	<package name="Mapper"/>
  </mappers>
  
</configuration>

配置文件中的连接地址、用户名、密码改成自己的

其中的<mappers></mappers>标签用来关联映射文件,因为要在Mapper包下建立映射文件来进行数据操作,所以要关联的映射文件就直接写上这个包名就可以了,它会自动扫描这个包下所有的用到Mybatis的文件。

配置文件已经完成了,对于上面的配置,还可以用另一种方式配置

如果觉得麻烦的话可以忽略下面内容,直接跳到(四)

在src目录下建个后缀为properties的文件,比如我新建一个db.properties

db.properties文件中写你的配置参数

比如我的数据库配置参数

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/hibernatedb
username=root
password=123456

然后在mybatis-config.xml文件的<configuration>标签中加入这句代码

<!-- 加载全局配置文件 -->
	<properties resource="db.properties"></properties>

申明db.properties文件作为全局配置

配置完成后我们就可以用${driver}(表示db.properties中driver对应的值)来配置数据库了

例如可以将上面的数据库配置写成下面这样

<environments default="mysql">
  
    <environment id="mysql">
      <transactionManager type="JDBC"/>
      <!-- pooled即池,配置连接池 -->
      <dataSource type="POOLED">
      	<!-- 配置驱动 -->
        <property name="driver" value="${driver}"/>
        <!-- 配置连接地址 -->
        <property name="url" value="${url}"/>
        <!-- 配置数据库用户名 -->
        <property name="username" value="${username}"/>
        <!-- 配置数据库密码 -->
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
 </environment>

这样,在数据库配置参数有所变动时,也可以直接在db.properties中修改

(四)然后再来写个工具类,用来获取SqlSession的连接工厂

在Utils包下新建一个SqlSessionFactoryUtils.class,名字自定义

代码如下

public class SqlSessionFactoryUtils {
	//定义一个变量保存mybatis框架的连接工厂
	private static SqlSessionFactory sqlSessionFactory;
	
	//初始化连接工厂
	//静态代码块,与类一起加载,访问类的时候与类一起加载
	//读取配置文件来做Mybatis连接工厂
	static {
		try {
			String resource = "mybatis-config.xml";
			//读取配置文件,自动到src类路径下寻找配置文件
			InputStream inputStream = Resources.getResourceAsStream(resource);
			//将inputStream转换成Mybatis的连接工厂
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	//定义一个获取连接的方法
	public static SqlSession getSqlSession()
	{
		return sqlSessionFactory.openSession();
	}
	
	//释放连接,关闭资源
	public static void close(SqlSession sqlSession)
	{
		if(sqlSession!=null)sqlSession.close();
	}
	
}

(五)...一大堆配置完成了,后面是具体的使用

首先在Pojo中新建一个User类,保存用户信息,这里示范的数据库名为test,有一张user表,id,name,address三个字段

User类用来存放从user表中取出来的数据,字段必须对应

public class User {
	int id;
	String name;
	String 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;
	}
}

在Mapper包下面新建一个接口类UserMapper.java(必须在Mapper包下,之前配置文件中配置扫描此包,不写在这里是找不到这个文件的)

在接口类中写一个用来查询数据的方法

为这个方法加上注解(@Select注解:执行查询操作,写入查询的sql语句)

public interface UserMapper {
	@Select("select * from user")
	public List<User> findAll();
}

(六)在Service包下新建一个UserService.java作为用户的业务处理类

public class UserService {
	public List<User> findAll()
	{
		//从sqlSession工具类中获取SqlSession
		SqlSession sqlSession = SqlSessionFactoryUtils.getSqlSession();
		//从sqlSession中获取映射文件
		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
		//调用userMapper中的findAll方法,执行查询语句,并返回一个List<User>数据
		return userMapper.findAll();
	}
}

终于到最后一部分了...

接下来要新建一个控制器,再调用UserService业务类中的finAll方法,拿到数据,再绑到jsp页面中显示

先到Controller包下建一个servlet控制器,比如我这里叫UserController.java

在Get方法中调用UserService中的findAll方法,获得返回的数据,跳转到jsp页面展示数据

@WebServlet("/UserController")
public class UserController extends HttpServlet {
	private static final long serialVersionUID = 1L;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UserController() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		UserService userService = new UserService();
		//获取返回的数据
		request.setAttribute("users", userService.findAll());
		//跳转页面显示
		request.getRequestDispatcher("/WEB-INF/jsp/user.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

在WEB-INF目录下新建个jsp文件夹,在其中建立个user.jsp文件

把请求的数据绑定到jsp页面上

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 这里要用到jstl标签库中的标签,必须加上下面这行代码 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<table>
<!-- 使用forEach标签循环绑定数据 -->
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.address}</td>
</tr>
</c:forEach>
</table>
</body>
</html>

(七)最后,启动服务器,在浏览器中输入http://localhost:8080/FirstMyBatis/UserController(写你自己的项目名和地址)

数据表中添加几条数据用于测试,页面正常显示,搭建成功

对于UserMapper类中的增删改查,与注解@Select同理,改成@Insert、@Update、@Delete即可。

UserMapper类中的数据操作除了可以用注解方式实现外,还可以通过xml文件来实现,有空再补充上去。。。

最后,贴一张完整的项目路径图

猜你喜欢

转载自blog.csdn.net/weixin_39885435/article/details/82055938