MyBatis入门:使用MyBatis实现与数据库的连接并且实现查询,插入,删除数据

本文介绍了MyBatis入门程序,包括环境搭建、mybatis-config.xml配置、POJO类、Mapper接口与XML映射文件的编写,以及使用Log4j跟踪运行过程。通过这些步骤,实现了对数据库的查询、插入和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天是学习MyBatis的第二天,在这里把入门的程序进行总结,也是对使用MyBatis的步骤的一个总结。

1.环境搭建,导入jar包。

MyBatis的前身是Ibatis,是一个web开发持久层的框架。使用SSM(Spring+SpringMVC+MyBatis)进行web开发,是目前较为流行的一种趋势。MyBatis是Apache的一个顶级的项目。现在是把它放在GitHub进行托管,因此我们搭建环境所需要的jar包需要到GitHub上进行下载。下载的网址是:http://github.com/mybatis/mybatis-3/releases

将下载下来的压缩包进行解压,解压后得到的文件夹如下图所示:

分析一下这个文件夹。其中,mybatis-3.3.1.jar是mybatis的本身的一个核心jar包,lib目录下的jar包都是这个核心jar包的依赖jar包。

pdf文件则是mybatis的使用文档,在后面配置mybatis-config.xml,mapper.xml以及配置日志文件log4j时,可以从使用文档中获得帮助。

将以上jar包全部导入,另外,MyBatis也是对JDBC的封装,因此不要忘了导入Mysql-connector.jar包,jar包一览图如下:

至此环境搭建完毕。

2.配置mybatis-config.xml文件

这个文件是mybatis项目的核心文件,贯穿整个项目的始终。

在这边主要干了三个事情,首先是为POJO类User,定义了一个别名user。接着配置了数据库的信息,设置采用JDBC进行事务的管理,并且配置了连接池DataSource。最后定义了映射器,映射器的功能是代替了以前DAO里的userServiceImpl(),是一个功能的具体实现,现在把它写到了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>
	<!--1. 定义别名为user -->
	<typeAliases>
		<typeAlias alias="user" type="com.learn.chapter2.po.User.User"/>
	</typeAliases>
	<!-- 2.定义数据库信息,默认使用development 数据库构建环境 -->
	<environments default="development">
		<environment id="development">
			<!-- 采用JDBC事务管理 -->
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/taobao?serverTimezone=GMT%2B8"/>
				<property name="username" value="root"/>
				<property name="password" value="shenCHENG520145"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 3.定义映射器 -->
	<mappers>
		<mapper resource="com/learn/chapter2/mapper/userMapper.xml"/>
	</mappers>
</configuration>

这个配置文件也可以看作一个大纲,接下来可以一一来实现POJO类以及功能接口。

2.编写POJO类

package com.learn.chapter2.po.User;

public class User {
	int userId;
	String userName;
	String password;
	public int getUserId() {
		return userId;
	}
	public void setUserId(int userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

POJO类很简单,三个属性,分别设置了必备的get和set方法。

3.编写UserMapper()接口,相当于以前的UserService()接口。

package com.learn.chapter2.mapper;

import com.learn.chapter2.po.User.User;

public interface UserMapper {
	public User getUser(int userId);
	public int deleteUser(int userId);
	public int insertUser(User user);
}

也很简单,主要包括三个功能,根据userId查询用户,删除用户,以及增加用户。

4.编写userMapper.xml文件,相当于UserMapper()接口的具体实现。

namespace命名空间是指要实现的Mapper接口,命名空间的起到隔离的功能。

<select>、<delete>等标签分别指示要进行的操作。其中id是指对应的具体接口,parameterType是指实现的此接口的参数类型,resultType是指返回值的类型。

<?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.learn.chapter2.mapper.UserMapper">
<!-- 由于前面在mybatis-config.xml里已经为类User起了别名,所以下面参数类型或者返回类型是User时,一律写成user -->
	<select id="getUser" parameterType="int" resultType="user">
		select uid as userId, uname as userName, password from user where uid=#{userId}
	</select>
	<delete id="deleteUser" parameterType="int">
		delete from user where uid=#{id}
	</delete>
	<insert id="insertUser" parameterType="user">
		insert into user(uname,password) values (#{userName},#{password})
	</insert>
</mapper>

5.编写log4j.properties文件

# Global logging configuration 
log4j.rootLogger=DEBUG, stdout 
# MyBatis logging configuration... 
log4j.logger.org.mybatis=DEBUG
# Console output... 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

此文件的模板可以在mybatis的使用文档里找到。配置此文件,Log4j会为我们打印出Mybatis的运行轨迹,这个功能非常贴心,它将你增加用户,删除用户的过程直接翻开呈现在你的面前。

6.编写SqlSessionFactoryUtil类

这个类的功能也是非常关键的。首先,SqlSessionFactoryBuider根据mybatis-config.xml来创建一个SqlSessionFactory对象,然后调用SqlSessionFactory的openSession()方法,返回一个SqlSeesion。

package com.learn.chapter2.util;

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;
//import org.eclipse.jdt.internal.compiler.ast.NullLiteral;

public class SqlSessionFactoryUtil {
	private SqlSessionFactory sqlSessionFactory=null;
	public SqlSessionFactoryUtil() {
		String resource = "mybatis-config.xml";
		InputStream inputStream=null;
		try {
			inputStream=Resources.getResourceAsStream(resource);
			this.sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public  SqlSession openSqlSession() {
		return this.sqlSessionFactory.openSession();
	}
}

7.编写测试类,其中包括一个Main()方法。

package com.learn.chapter2.main;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;

import com.learn.chapter2.mapper.UserMapper;
import com.learn.chapter2.po.User.User;
import com.learn.chapter2.util.SqlSessionFactoryUtil;

public class chapter2Main {
	public static void main(String[] args) throws IOException{
		SqlSession sqlSession=null;
		SqlSessionFactoryUtil sqlSessionFactoryUtil=new SqlSessionFactoryUtil();
		try {
			sqlSession=sqlSessionFactoryUtil.openSqlSession();
			UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
			User user=new User();
			user=userMapper.getUser(2);
			System.out.println(user.getUserId());
			System.out.println(user.getUserName());
			System.out.println(user.getPassword());
			user.setUserName("sssccc");
			user.setPassword("sc520145");
			userMapper.insertUser(user);
			userMapper.deleteUser(3);
			sqlSession.commit();
		} catch (Exception e) {
			System.err.println(e.getMessage());
			sqlSession.rollback();
		}finally {
			sqlSession.close();
		}
	}
}

注意:在对数据库有修改的操作时,必须调用sqlSession.commit()方法,否则不会提交数据,更新不起作用。

8.运行结果

DEBUG 2019-04-13 13:06:37,961 org.apache.ibatis.logging.LogFactory: Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG 2019-04-13 13:06:37,974 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2019-04-13 13:06:37,974 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2019-04-13 13:06:37,974 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2019-04-13 13:06:37,974 org.apache.ibatis.datasource.pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
DEBUG 2019-04-13 13:06:38,047 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Opening JDBC Connection
DEBUG 2019-04-13 13:06:38,526 org.apache.ibatis.datasource.pooled.PooledDataSource: Created connection 1710989308.
DEBUG 2019-04-13 13:06:38,526 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@65fb9ffc]
DEBUG 2019-04-13 13:06:38,530 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==>  Preparing: select uid as userId, uname as userName, password from user where uid=? 
DEBUG 2019-04-13 13:06:38,554 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==> Parameters: 2(Integer)
DEBUG 2019-04-13 13:06:38,571 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <==      Total: 1
2
sc520145
520145
DEBUG 2019-04-13 13:06:38,573 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==>  Preparing: insert into user(uname,password) values (?,?) 
DEBUG 2019-04-13 13:06:38,574 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==> Parameters: sssccc(String), sc520145(String)
DEBUG 2019-04-13 13:06:38,578 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <==    Updates: 1
DEBUG 2019-04-13 13:06:38,578 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==>  Preparing: delete from user where uid=? 
DEBUG 2019-04-13 13:06:38,578 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==> Parameters: 3(Integer)
DEBUG 2019-04-13 13:06:38,580 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <==    Updates: 1
DEBUG 2019-04-13 13:06:38,581 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@65fb9ffc]
DEBUG 2019-04-13 13:06:38,588 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@65fb9ffc]
DEBUG 2019-04-13 13:06:38,588 org.apache.ibatis.transaction.jdbc.JdbcTransaction: Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@65fb9ffc]
DEBUG 2019-04-13 13:06:38,588 org.apache.ibatis.datasource.pooled.PooledDataSource: Returned connection 1710989308 to pool.

可以看到,Log4j将过程信息全部的打印出来,运行无错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值