mybatis实现增加操作

mybatis实现增加操作


------------------------------------在Java将数据存入数据库的功能已经实现的情况下, 将项目文件中的JDBCDao替换为使用MybatisDao

核心部件介绍

sqlSessionFactory–顾名思义, 这是一个sqlSession工厂可以产生很多sqlSession

mybatis与hibernate在使用方面的比较

在让mybatis知道数据库的位置, 并且写入相应SQL语句, 将对象交付给sqlSession, 由sqlSession来负责将将对象转化, 并将转化后的对象存放进数据库

与之相比hibernate只需知道数据库的位置, 将对象交付给它, 它就会自动生成SQL语句, 但自动生成的SQL语句往往不尽如人意, 一些SQL语句往往无法通过DBA(数据库管理员)的审核

因此, 我们更多建议使用mybatis

连接池(connection pool)

数据池化, 所有数据库连接会一次取出很多数据放在连接池中缓存,可以大幅提高创建连接的效率

数据源本质上就是连接池, 一个存储结构, 内部放了很多连接对象

mybatis的使用

配置包

新建包, 包名为"edu.mju.stuwork.config"

配置mybatis-config.xml文件

新建xml文件

一般mybatis的配置文件我们命名为mybatis-config.xml

mybatis文件中记录了: 1.数据库位置等信息

注:并不是在文件中直接把数据的接口, 地址, 操作用户直接写死. 具体的信息一般放在一个名为db.properties的文件中, mybatis文件只需与之关联, 就可以获取相应的数据. 当数据库位置修改时,只需要修改db.properties文件中的数据即可

​ 2.说明mybatis映射文件所在位置(mapper文件信息)(一个Dao一个映射文件, 可能一般放在domain文件夹中)

注:映射文件中存放所有业务需要的SQL语句

新建xml文件, 命名为mybatis-config

将头文件信息复制出来

接下来配置db.properties文件

配置db.properties文件

配置db.properties文件之后

导入和关联数据库信息存储的属性文件(导入db.properties), 文件路径通过"Copy Qualified Name"复制, 并将最前面的工程名路径与src删除

设置数据库环境

配置多种数据库, 一般使用两个数据库, 一个为"开发库", 一个为"产品库", 一般会将默认数据库环境设置为开发库, 让工程师测试运行, 产品"上线"的时候会将默认数据库设定为"产品库", 从开发到上传上去给用户使用, 这个过程被称为"上线"

设置数据源

设置数据源的类型, 为POLLED(池化)(连接池)

根据变量名, 使用$将数据从数据库信息存储的属性文件中取出, 架构透过name进而获取到value的值, 进而获取数据库信息存储的属性

接下来配置映射文件

配置映射文件(存放SQL语句)

配置映射文件后

将映射文件导入, 文件地址设定为, 相对包的根目录的路径, 以将映射文件导入

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>

	<properties resource="edu/mju/stuwork/config/db.properties"></properties>
	<!-- 设置默认实体包路径, 以避免之后在Mapper文件中书写完整实体路径的繁琐 -->
	<typeAliases>
		<package name="edu.mju.stuwork.domain"/>
	</typeAliases>
	<environments default="mysql-dev">
		<environment id="mysql-dev">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="${mysql.driver}"/>
				<property name="url" value="${mysql.url}"/>
				<property name="username" value="${mysql.username}"/>
				<property name="password" value="${mysql.password}"/>
			</dataSource>
		</environment>
	</environments>
	<!-- 导入mapper(映射文件) -->
	<mappers>
		<!--  使用Copy Qualified Name复制StudentMapper.xml的路径防止出错-->
		<mapper resource="edu/mju/stuwork/domain/StudentMapper.xml"/>
	</mappers>
</configuration>

配置db.properties文件

在文件里填写用于连接数据库的信息, 包括数据库的IP, 端口, 用于连接数据库的用户名以及密码

配置db.properties文件之后

db.properties文件内容如下:
############### mysql connection profile ###############
#Copy Qualified Name about jdbc
mysql.driver=com.mysql.cj.jdbc.Driver
#Set the database url
mysql.url=jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
#set username
mysql.username=root
#set password
mysql.password=123456

配置映射文件(存放SQL语句)

新建映射文件

一般来说, 一个domain一个映射文件

在domain包下新建一个xml文件, 命名为StudentMapper.xml

映射文件当中包含着所有的Dao操作

对映射文件进行设置

将相应头文件信息复制出来, 对mapper设定namespace, 这是这个mapper唯一的名字.

目的是为了标识当前Mapper, 避免执行时, 本Mapper与其他Mapper下的映射条目名称相同, 进而产生冲突.

设定映射条目, 映射条目的标签名对应你想要的操作, 例如: insert, update, select, delete.

映射文件中存放着所有的Dao方法, Dao方法中有几个, 映射条目就有几个

对映射条目设定id, 一般设定为具体的操作目的, 例如: “addStudent”

设定映射条目的parameterType, 要求内容为完全路径, mapper 的"namespace" + “.” + 映射条目的"id"

但为了书写方便, 并且能够不重复写那么长一串类名, 我们通常在配置文件里设定一个默认package, 默认选用这个包

之后在映射条件中书写SQL语句, 其中原本SQL语句中的问号改为"#{实体类型中的数据变量名}"

配置映射文件后

映射文件内容如下:
<?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="edu.mju.stuwork.StudentMapper">
 	<!-- 此处parameterType应该写上完整的类的路径, 但我们在"配置文件"中写好默认路径之后就可以简写,只写类的名称即可 -->
 	<insert id="addStudent" parameterType="Student">
 		insert into tbl_student values(#{stuNo}, #{stuName}, #{stuMark})
 	</insert>
 </mapper>

配置MybatisUtils工具类

该类主要作用时启动mybatis, 得到session, 及关闭session

在Utils包下新建一个类, 命名为"MybatisUtils"

在导入包之前应先导入mybatis库

导入Mybatis库

导入Mybatis库之后

声明相应SQL session Factory对象, eclipse中使用CTRL+shift+o组合键自动导入相应库

此时会发现库文件名称里居然有"ibatis"而没有"mybatis"—据说"mybatis"以前叫"ibatis"

MybatisUtils工具类内容如下:
/**
 * 
 */
package edu.mju.stuwork.utils;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * @author XKF
 *
 */
public class MybatisUtils {
//	声明SQL Session Factory对象, 初始化值为null
	private static SqlSessionFactory sessionFactory = null;
	
//	设置静态类
	static {
		Reader reader;
		

			try {
//				读取mybatis文件
				reader = Resources.getResourceAsReader("edu/mju/stuwork/config/mybatis-config.xml");
//				使用读取进来的配置文件建立一个SQL Session Factory
				sessionFactory = new SqlSessionFactoryBuilder().build(reader);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("mybatis Sql Session Factory is created ok!");

	}
	
	/**
	 * 提供一个mybatis session
	 * @return
	 */
	public static SqlSession getSession() {
		return sessionFactory.openSession();
	}
	
	/**
	 * 释放一个mybatis session
	 * @param session
	 */
	public static void closeSession(SqlSession session) {
		session.close();
	}
}

导入Mybatis库

在GitHub下载,点击链接

Releases · mybatis/mybatis-3 · GitHub

选择版本下载压缩包并解压, 在解压后的文件夹中找到(我下载的是3.5.6)

mybatis-3.5.6.jar

打开文件夹lib, 在文件夹中找到

log4j-1.2.17.jar

commons-logging-1.2.jar

这两个库mybatis在运行过程中用来做日志

将这三个文件复制到工程中的WebContent->WEB-INF->lib中

导入Mybatis库之后

导入Mybatis库

设置StudentDaoMybatisImpl类

在dao包中新建StudentDaoMybatisImpl类, 添加接口StudentDao

将函数重写

public class StudentDaoMybatisImpl implements StudentDao {

	@Override
	public void addStu(Student stu) {
		// TODO Auto-generated method stub
//		新建一个SQL session
		SqlSession session = MybatisUtils.getSession();
//		将对象通过session进行新增
//		括号中的字符串代表的是使用的映射条目全称, stu是要导入数据库的实体
		session.insert("edu.mju.stuwork.StudentMapper.addStudent", stu);
//		将对数据库的修改进行提交
		session.commit();
//		通过相应函数将session释放
		MybatisUtils.closeSession(session);
	}
}

将原来的使用的JDBCDao替换

找到原来调用JDBCDao进行新增的函数, 将JDBCDao替换为StudentDaoMybatisImpl

public void regStudent(Student stu) {
//		StudentDao stuDao = new StudentDaoJDBCImpl();
//		替换Dao, 接口的好处显现出来了, 除了修改了类其他什么都不影响
		StudentDao stuDao = new StudentDaoMybatisImpl();
		stuDao.addStu(stu);
		// TODO Auto-generated method stub

	}

打印Mybatis的日志信息

建立一个log4j.properties文件, 将以下内容粘贴至项目的src目录下

并将

log4j.appender.dailyRollingFile.File = 此处替换为你为日志文件设置的存储路径/log.txt

里的中文替换为你为日志文件设置的存储路径

注:电脑文件管理器地址栏中复制进来的路径不可直接使用

原因是: Java中的 ”\“ 为转义字符, 无法用来表示路径

因此: 需将电脑文件管理器地址栏中复制进来的路径中的所有 “\” 替换为 “/” 才可以达到目的效果

#
# Log4J Settings for log4j 1.2.x (via jakarta-commons-logging)
#
# The five logging levels used by Log are (in order):
#
#   1. DEBUG (the least serious)
#   2. INFO
#   3. WARN
#   4. ERROR
#   5. FATAL (the most serious)


# Set root logger level to WARN and append to stdout
log4j.rootLogger=debug, stdout,dailyRollingFile

#appender: stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n

#appender: dailyRollingFile
log4j.appender.dailyRollingFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.dailyRollingFile.File = 此处替换为你为日志文件设置的存储路径/log.txt
log4j.appender.dailyRollingFile.Append = true
log4j.appender.dailyRollingFile.Threshold = DEBUG
log4j.appender.dailyRollingFile.layout = org.apache.log4j.PatternLayout
log4j.appender.dailyRollingFile.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

# Print only messages of level ERROR or above in the package noModule.
log4j.logger.noModule=FATAL

#log4j.logger.com.opensymphony.xwork2=INFO
#log4j.logger.com.abc.test=debug

最后执行项目, 测试是否能够成功执行增加操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值