1 准备工作
1.1 导入依赖
<dependencies>
<dependency>
<groupId>org.mybatisgroupId>
<artifactId>mybatisartifactId>
<version>3.5.9version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.29version>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.24version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13.2version>
<scope>testscope>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
dependencies>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
1.2 配置java文件夹和resource资源文件夹都能输出到target目录中
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes>
<include>**/**include>
includes>
resource>
<resource>
<directory>src/main/resourcesdirectory>
<includes>
<include>**/**include>
includes>
resource>
resources>
build>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
1.3 创建需要查询的实体类(全部引用数据类型)
package entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Emp {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private String hiredate;
private Double sal;
private Double comm;
private Integer deptno;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
1.4 在resource资源文件夹下面创建jdbc.properties文件
# key-value 形式的文件 注意:笔者使用的mysql8版本的数据库
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/数据库名称
jdbc.username=账户
jdbc.password=密码
1.5 在resource资源文件夹下创建log4j.properties文件
#代表root节点整个工程下所有输出日志的地方配置的输出的级别和输出的位置。
log4j.rootLogger=DEBUG,Console,D
#代表配置控制台的类。
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=INFO
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/mybatis.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss} [ %t\:%r ] - [ %p ] %m%n
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
1.6 在resource资源文件夹下面创建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">properties>
<typeAliases>
<package name="entity"/>
typeAliases>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
dataSource>
environment>
environments>
<mappers>
<package name="mapper"/>
mappers>
configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
注意: mybatis-config.xml文件中导入jdbc.properties文件的指令
<properties resource="jdbc.properties">properties>
1.7 创建SqlSessionFactoryFactory工具类
package util;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class SqlSessionFactoryUtil {
private static String resource = "mybatis-config.xml";
private static SqlSessionFactory sf=null;
static {
try {
InputStream inputStream = Resources.getResourceAsStream(resource);
sf = new SqlSessionFactoryBuilder().build(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
}
public static SqlSessionFactory sf(){
return sf;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
1.8 创建EmpMapper接口和EmpMapper.xml文件
1.9 主配置文件引入其他配置文件(扫描该配置文件的根目录)
<mappers>
<package name="mapper"/>
mappers>
2 查询全部
2.1 在EmpMapper接口中的方法名
List<Emp> findAll();
2.2 在EmpMapper.xml中准备的sql语句
<select id="findAll" resultType="entity.Emp">
select * from emp
select>
2.3 在test文件夹下写的测试代码
public void t1(){
SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
SqlSession sqlSession = sf.openSession();
EmpMapper em = sqlSession.getMapper(EmpMapper.class);
List<Emp> all = em.findAll();
for (Emp emp : all) {
System.out.println(emp);
}
sqlSession.close();
}
2.4 查询结果
2.5 知识点总结
接口里面的方法名必须与xml中select标签中的id值保持一致,不然查询的时候就会报错
select标签中必须要有id和resultType,其resultType是查询结果的返回类型,不支持多表多字段查询
3 带条件查询
3.1 在EmpMapper接口中的方法名
Emp findById(int id);
3.2 在EmpMapper.xml中准备的sql语句
<select id="findById" resultType="emp">
select * from emp WHERE empno=#{id}
select>
3.3 在test文件夹下写的测试代码
@org.junit.Test
public void t2(){
SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
SqlSession sqlSession = sf.openSession();
EmpMapper em = sqlSession.getMapper(EmpMapper.class);
Emp byId = em.findById(7369);
System.out.println(byId);
sqlSession.close();
}
3.4 查询结果
3.5 知识点总结
4 模糊查询
4.1 单参数查询
4.1.1 在EmpMapper接口中的方法名
List<Emp> likeEname(String name);
4.1.2 在EmpMapper.xml中准备的sql语句
<select id="likeEname" resultType="emp">
select * from emp WHERE ename like '%${name}%'
</select>
4.1.3 在test文件夹下写的测试代码
public void t2(){
SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
SqlSession sqlSession = sf.openSession();
EmpMapper em = sqlSession.getMapper(EmpMapper.class)
List<Emp> a = em.likeEname("A");
for (Emp emp : a) {
System.out.println(emp);
}
sqlSession.close();
}
4.1.4 查询结果
4.1.5 知识点总结
模糊查找只能用${name}的形式
其是采用'%${模糊查找的值}%'去进行模糊查找的
虽然是一个参数,但是xml文件(mapper文件夹下)中的字段名必须与接口中方法的形参的字段名保持一致
4.2 多参数查询(采用@Para注解的方式)
4.2.1 在EmpMapper接口中的方法名
List<Emp> like(@Param("a")String name, @Param("b")String job);
4.2.2 在EmpMapper.xml中准备的sql语句
<select id="like" resultType="emp">
/*模糊查询两个%拼接在一起*/
select * from emp WHERE ename like '%${a}%' OR job like '%${b}%'
select>
4.2.3 在test文件夹下写的测试代码
public void t2(){
SqlSessionFactory sf = SqlSessionFactoryUtil.sf();
SqlSession sqlSession = sf.openSession();
EmpMapper em = sqlSession.getMapper(EmpMapper.class);
List<Emp> a = em.like("A","B");
for (Emp emp : a) {
System.out.println(emp);
}
sqlSession.close();
}
4.2.4 查询结果
4.2.5 知识点总结
mybatis有多个参数时,有以下三种方式
/*多个形参
方式一 arg0 表示第一个 arg1 表示第二个
方式二 param1 表示第一个 param2表示第二个
方式三 在接口里面使用注解@para,本次示例里面所采用的就是第三种
*/