mybatis实现增加操作

it2023-11-08  70

mybatis实现增加操作

文章目录

mybatis实现增加操作核心部件介绍mybatis与hibernate在使用方面的比较连接池(connection pool)mybatis的使用配置包配置mybatis-config.xml文件新建xml文件 配置db.properties文件之后设置数据库环境设置数据源 配置映射文件后mybatis-config.xml文件内容如下: 配置db.properties文件db.properties文件内容如下: 配置映射文件(存放SQL语句)新建映射文件对映射文件进行设置映射文件内容如下: 配置MybatisUtils工具类导入Mybatis库之后MybatisUtils工具类内容如下: 导入Mybatis库设置StudentDaoMybatisImpl类将原来的使用的JDBCDao替换打印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库之后

设置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)