文章目录
前言
提示:本篇文章内容,实现按编号对User表中的数据进行查询,后续的增删改会在接下来的其他文章中体现。
以下为本文整体框架,读者可整体阅读,也可在目录中单独选择章节阅读
一、新建项目并通过Maven导入该项目相关数据包
(一)在IDEA中新建项目
点击project新建项目
按照下图所示进行操作
设置好后点击右下角Finish,即成功新建项目。
项目创建完毕后,在界面右下角,弹出提示,点击红框处,允许该项目Maven自动导入相关包。
(二)配置Maven的plu插件
1.pom.xml介绍
POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml。作用类似ant的build.xml文件,功能更强大。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。
pom文件所在位置如下图所示
2.进行Maven插件plugin的配置
进行Maven插件plugin的配置代码如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source> <!--源代码使用的开发版本-->
<target>8</target> <!--需要生成的目标class文件的编译版本-->
<!--一般而言soure与target是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码
中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况-->
</configuration>
</plugin>
</plugins>
</build>
(三)通过Maven导入该项目相关包
导入该项目相关数据包代码如下:
<!--引入项目相关数据包-->
<dependencies>
<!-- 引入MyBatis jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!--Java 连接 MySQL-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<!--引入mysql-connector-java jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!--引入Java日志框架 slf4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.0</version>
</dependency>
<!--引入Java单元测试框架 JUnit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<!--全选后代码后,Ctrl + Alt + L 格式化-->
下述代码为配置好后的pom.xml全部代码,读者可直接复制:
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>Mybaits01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--maven插件plugin的配置-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source> <!--源代码使用的开发版本-->
<target>8</target> <!--需要生成的目标class文件的编译版本-->
<!--一般而言soure与target是保持一致的,但是,有时候为了让程序能在其他版本的jdk中运行(对于低版本目标jdk,源代码
中需要没有使用低版本jdk中不支持的语法),会存在target不同于source的情况-->
</configuration>
</plugin>
</plugins>
</build>
<!--引入项目相关数据包-->
<dependencies>
<!-- 引入MyBatis jar包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<!--Java 连接 MySQL-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<!--引入mysql-connector-java jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!--引入Java日志框架 slf4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.0</version>
</dependency>
<!--引入Java单元测试框架 JUnit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
</dependencies>
<!--全选后代码后,Ctrl + Alt + L 格式化-->
</project>
至此已经成功新建项目,并通过Maven到入了该项目的所有依赖。
二、数据库中建立User表并建立相对应的User类
(一)在数据库中建立user表
本文采用Mysql workbench(一款可视化数据库管理、设计软件)进行示范,其他数据库同理,注意本文示范操作的是Mysql8。如果是Mysql5,记得在下文中jdbc.url和jdbc.driver进行相应更改,后续相关章节会提到如何更改。
上图为所建立的user数据表,可以见到它有三列,列名分别为id,user_name,attack。这三个列名后续会与我们所建立的User类中的成员变量名一一对应。
(二)在项目中建立User类(该类名字与表名对应)
建立如下项目文件结构,并创建User类(与数据库中的User表对应)
User类中的内容如下图所示:
User类代码如下:
package com.qlg.domain;
public class User {
private Integer id;
private String userName;
private Integer attack;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Integer getAttack() {
return attack;
}
public void setAttack(Integer attack) {
this.attack = attack;
}
//Alt + Insert 自动生成
//规定输出格式
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", attack=" + attack +
'}';
}
}
至此我们已经成功创建了User类与数据库中的表形成了对应
三、Mybatis连接SQL
(一)配置Mybatis全局配置文件mybatis-config.xml
按照下图操作新建mybatis-config.xml文件
配置mybatis-config.xml文件,加载jdbc外部配置文件属性
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="jdbc.properties"/><!--告知属性来源-->
<!-- 加载jdbc外部配置文件属性-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/><!--加载jdbc驱动-->
<property name="url" value="${jdbc.url}"/><!--指定连接数据库标识符号-->
<property name="username" value="${jdbc.username}"/><!--读入数据库用户名-->
<property name="password" value="${jdbc.password}"/><!--读入数据库密码-->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml"/><!--所要映射的表-->
</mappers>
</configuration>
(二)配置jdbc.properties文件提供名值对
新建jdbc.properties文件
jdbc.properties文件代码如下:
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/register_service?userSSL=true&useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT
jdbc.username=root
jdbc.password=123456
(三)配置Mybatis全局配置文件的映射文件UserMapper.xml
同理新建mybatis-config.xml中所要映射的表UserMapper.xml
UserMapper.xml所建结果如下
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">
<mapper namespace="userMapper">
<!-- 根据编号 查询用户-->
<select id="queryById" parameterType = "INT" resultType="com.qlg.domain.User">
select *,user_name as userName from user where id = #{id}
</select>
</mapper>
至此我们成功配置完成了Mybatis全局配置文件mybatis-config.xml
并提供了相应变量值使其能够连接数据库
还配置了Mybatis配置文件中的映射UserMapper.xml
四、使用log4j日志框架(可选)
新建log4j.properties,配置Java日志框架
新建后结果如下
log4j.properties代码如下:
log4j.rootLogger=DEBUG,A1
log4j.logger.com.taotao = DEBUG
log4j.logger.org.mybatis = DEBUG
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
至此,我们完成了该项目日志框架的配置
五、建立UserDao接口规范对User表的操作
下面我们来建立UserDao接口,规范我门对User表的操作。
此处我们先写入一个方法
UserDao结果如下图:
UserDao接口代码如下:
package com.qlg.dao;
import com.qlg.domain.User;
public interface UserDao {
//根据编号查询用户
//方法名:queryUserById()
//方法需不需要传参:需要传参,传编号
//方法返回值:类型User
public User queryUserById(Integer id);
}
至此,我们建立了UserDao接口,只在其中写了一个方法,按编号查询user表中的数据。读者可以根据实际情况,自行增加方法,后续我们将建立该接口的实现类。
六、建立UserDao接口的实现类UserDaoImpl
UserDaoImpl结果如下图:
UserDaoImpl代码如下:
package com.qlg.dao.impl;
import com.qlg.dao.UserDao;
import com.qlg.domain.User;
import org.apache.ibatis.session.SqlSession;
public class UserDaoImpl implements UserDao {
private SqlSession sqlSession;
public UserDaoImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;//在UserDaoImpl 实例化 传的SqlSession 赋值给了本类中的sqlSession
}
@Override
public User queryUserById(Integer id) {
return sqlSession.selectOne("userMapper.queryById",id);
}
}
此处利用了UserMapper.xml,读者可以自行回忆我们之前所应进行的java语句操作,可以对比出两者的优劣处。我们都知道html等前端页面要比高级编程语言更加简易方便,此处可以理解为sqlSession提供的方法,使我们链接到了一个类似html文本格式的命令文件中。可以仔细比较一下,体会其中好处。
七、建立UserDaoImplTest类进行测试(实现按编号进行查询)
下面我们开始进行单元测试
首先新建测试类UserDaoImplTest
点击完成后,弹出如下对话框
按上图操作完毕后,选择右下角OK,记得勾选上Member方法。
补好后代码效果如下图
UserDaoImplTest代码如下:
package com.qlg.dao.impl;
import com.qlg.dao.UserDao;
import com.qlg.domain.User;
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.junit.Before;
import org.junit.Test;
import java.io.InputStream;
public class UserDaoImplTest {
private UserDao userDao;
@Before
public void setUp() throws Exception {
//指定全局文件的路径
// String resource = "mybatis-config.xml";
// 获取输入流,关联全局配置文件
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
//构建SqlSessionFactory
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream);
//获取SqlSession
SqlSession sqlSession = sf.openSession(true);
userDao = new UserDaoImpl(sqlSession);
}
@Test
public void queryUserById() {
User user = userDao.queryUserById(1);
System.out.println(user);
}
}
上述代码完成后,按下图进行操作,查看运行结果。
总结(附项目源码)
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
一、MyBatis框架的优点:
-
与JDBC相比,减少了50%以上的代码量。
-
MyBatis是最简单的持久化框架,小巧并且简单易学。
-
MyBatis相当灵活,不会对应用程序或者数据库的现有设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,并可重用。
-
提供XML标签,支持编写动态SQL语句。
-
提供映射标签,支持对象与数据库的ORM字段关系映射。
二、MyBatis框架的缺点:
-
SQL语句的编写工作量较大,尤其是字段多、关联表多时,更是如此,对开发人员编写SQL语句的功底有一定要求。
-
SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。
三、MyBatis框架适用场合:
MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。
对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
下面为本文项目源码下载方式
链接:https://pan.baidu.com/s/1KyVd3il5_7VtT_Elf5M-6g
提取码:daoc