提示:本篇文章内容,实现按编号对User表中的数据进行查询,后续的增删改会在接下来的其他文章中体现。
以下为本文整体框架,读者可整体阅读,也可在目录中单独选择章节阅读
点击project新建项目
按照下图所示进行操作
设置好后点击右下角Finish,即成功新建项目。
项目创建完毕后,在界面右下角,弹出提示,点击红框处,允许该项目Maven自动导入相关包。
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.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>8source>
<target>8target>
configuration>
plugin>
plugins>
build>
导入该项目相关数据包代码如下:
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.2.8version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.16version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.0version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
dependency>
dependencies>
下述代码为配置好后的pom.xml全部代码,读者可直接复制:
<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.0modelVersion>
<groupId>org.examplegroupId>
<artifactId>Mybaits01artifactId>
<version>1.0-SNAPSHOTversion>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>8source>
<target>8target>
configuration>
plugin>
plugins>
build>
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.2.8version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.16version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.0version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
dependency>
dependencies>
project>
至此已经成功新建项目,并通过Maven到入了该项目的所有依赖。
本文采用Mysql workbench(一款可视化数据库管理、设计软件)进行示范,其他数据库同理,注意本文示范操作的是Mysql8。如果是Mysql5,记得在下文中jdbc.url和jdbc.driver进行相应更改,后续相关章节会提到如何更改。
上图为所建立的user数据表,可以见到它有三列,列名分别为id,user_name,attack。这三个列名后续会与我们所建立的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-config.xml文件
配置mybatis-config.xml文件,加载jdbc外部配置文件属性
mybatis-config.xml文件代码如下:
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<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.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-config.xml中所要映射的表UserMapper.xml
UserMapper.xml所建结果如下
UserMapper.xml代码如下:
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.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结果如下图:
UserDao接口代码如下:
package com.qlg.dao;
import com.qlg.domain.User;
public interface UserDao {
//根据编号查询用户
//方法名:queryUserById()
//方法需不需要传参:需要传参,传编号
//方法返回值:类型User
public User queryUserById(Integer id);
}
至此,我们建立了UserDao接口,只在其中写了一个方法,按编号查询user表中的数据。读者可以根据实际情况,自行增加方法,后续我们将建立该接口的实现类。
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
点击完成后,弹出如下对话框
按上图操作完毕后,选择右下角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