这里是与你共同进步的李星儿,点赞加关注,学习不迷路。让我们一起进步!!!
这段时间一直在备考JavaEE,疯狂背书的我趁空余时间整理出了这篇笔记,希望可以帮助到备考中的宝宝们。
加油!!!
😁
案例:
现有一个学生表s_student,如图所示
学生id (id) | 学生姓名(name) | 学生专业(major) | 学生学号(number) |
1 | 张三 | 计算机科学与应用 | 20211001 |
2 | 李四 | 数学与应用数学 | 20211002 |
3 | 王五 | 机械与工程 | 20211003 |
4 | 赵六 | 电子科学与技术 | 20211004 |
5 | 李雷 | 应用化工技术 | 20211005 |
6 | 麻七 | 工程测量技术 | 20211006 |
7 | 小明 | 财务管理 | 20211007 |
1.多条件查询:
当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息查询
当用户输入的学生姓名和专业都为空,则要求查询出所有学号不为空的学生信息
2.查询出id值小于5的学生信息
一、前言
Mybatis作为后端持久层框架,在互联网大厂中应用广泛,所以掌握Mybatis,可谓是必备的。最近准备系统得复习一下Mybatis框架,所以博客会更几期关于Mybatis得文章,如果觉得看完有收获,希望收藏、点赞。如果觉得写得不好,欢迎评论区指正。
二、创建数据库
(一)创建一个数据库studentSystem
#创建一个数据库studentsystem
create database studentsystem
use studentsystem
(二)创建学生表并插入数据
#创建一个学生表s_student
create table s_student(
id int PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) ,
major VARCHAR,
number INT NOT NULL
);
INSERT INTO s_student values(1,'张三',"计算机科学与应用",20211001);
INSERT INTO s_student values(2,"李四","数学与应用数学",20211002);
INSERT INTO s_student values(3,"王五","机械与工程",20211003);
INSERT INTO s_student values(4,"赵六","电子科学与技术",20211004);
INSERT INTO s_student values(5,'李雷',"应用化工技术",20211005);
INSERT INTO s_student values(6,"麻七","工程测量技术",20211006);
INSERT INTO s_student values(7,"小明","财务管理",20211007);
运行之后表格数据如下:
![](https://img-blog.csdnimg.cn/img_convert/7358c0ec3693b5745485b3b9c3509fd6.png)
s_student表数据运行结果
项目架构:
![](https://img-blog.csdnimg.cn/img_convert/a3dd0627eebb689dad54c47caf04c97a.png)
三、在IDEA中创建Maven项目
(一)配置环境
1.修改pom.xml,获取Mybatis、MySQL相关依赖
<?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>Student_Maven</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!--连接数据库的jar包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
<!--mybaties依赖包-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.2</version>
</dependency>
<!--单元测试的依赖包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
<!-- <!–在build中配置resources,来防止资源导出失败的问题–>-->
<!-- <build>-->
<!-- <resources>-->
<!-- <resource>-->
<!-- <directory>src/main/resources</directory>-->
<!-- <includes>-->
<!-- <include>**/*.properties</include>-->
<!-- <include>**/*.xml</include>-->
<!-- </includes>-->
<!-- <filtering>true</filtering>-->
<!-- </resource>-->
<!-- <resource>-->
<!-- <directory>src/main/java</directory>-->
<!-- <includes>-->
<!-- <include>**/*.properties</include>-->
<!-- <include>**/*.xml</include>-->
<!-- </includes>-->
<!-- <filtering>true</filtering>-->
<!-- </resource>-->
<!-- </resources>-->
<!-- </build>-->
</project>
2.在db.properties文件中配置Mybatis连接环境
这里的用户名跟密码按照自己的来修改,我的用户名跟密码都是root
studentsystem是数据库名
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/studentsystem?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root
3.在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="db.properties"></properties>
<!--settings配置-->
<settings>
<!--标准日志工厂的实现-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--設置别名-->
<typeAliases>
<!--给每个实体类单独取别名-->
<!--<typeAlias type="com.cz.bean.User" alias="user"/>
<typeAlias type="com.cz.bean.Person" alias="person"/>-->
<!--批量取别名,规则:把类名首字母小写-->
<package name="com.lx.bean"/>
</typeAliases>
<environments default="development">
<environment id="development">
<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>
<mappers>
<mapper resource="mapper/StudentMapper.xml"/>
</mappers>
</configuration>
<!-- // -->
4.添加mapper接口对应的xml格式的文件
这里一定要注意路径resources/mapper/StudentMapper.xml要与StudentMapper的路径格式保持一致,伙伴们一定要注意,我这里就因为路径不一致运行不了!!!
<?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">
<!-- namespace指定Dao接口的完整类名,mybatis会依据这个接口动态创建一个实现类去实现这个接口,
而这个实现类是一个Mapper对象-->
<mapper namespace="com.lx.mapper.StudentMapper">
<select id="findStudentByName" parameterType="student"
resultType="com.lx.bean.Student">
select * from s_student where 1=1
<if test="name!=null and name!=''">
and name like concat('%',#{name},'%')
</if>
</select>
<select id="findStudentByNameOrMajor" parameterType="student"
resultType="com.lx.bean.Student">
select * from s_student
<where>
<choose>
<when test="name !=null and name !=''">
and name like concat('%',#{name}, '%')
</when>
<when test="major !=null and major !=''">
and major= #{major}
</when>
</choose>
</where>
</select>
<select id="findAllStudent" parameterType="student"
resultType="com.lx.bean.Student">
select * from s_student
<where>
<choose>
<when test="name !=null and name !=''">
and name like concat('%',#{name}, '%')
</when>
<when test="major !=null and major !=''">
and major= #{major}
</when>
<otherwise>and id is not null</otherwise>
</choose>
</where>
</select>
<select id="findStudentById" parameterType="java.util.Arrays"
resultType="com.lx.bean.Student">
select * from s_student
<where>
<foreach item="id" index="index" collection="array"
open="id in(" separator="," close=")">#{id}
</foreach>
</where>
</select>
<!---->
</mapper>
(二)创建实体类
Student实体类
package com.lx.bean;
public class Student {
private int id;
private String name;
private String major;
private int number;
public Student() {
}
public Student(int id, String name, String major, int number) {
this.id = id;
this.name = name;
this.major = major;
this.number = number;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", major='" + major + '\'' +
", number=" + number +
'}';
}
}
(二)创建工具类
MyBatisUtils工具类
package com.lx.utils;
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 java.io.IOException;
import java.io.InputStream;
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try{
//获取sqlsessionfactory对象
String resource= "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession(false);
}
}
(三)创建接口类
StudentMapper接口类
package com.lx.mapper;
import com.lx.bean.Student;
import java.util.List;
import java.util.Map;
public interface StudentMapper {
List<Student> findStudentByName(Student student);
List<Student> findStudentByNameOrMajor(Student student);
List<Student> findAllStudent(Student student);
List<Student> findStudentById(Integer[] ids);
}
(四)运行测试
(1)多条件查询:
当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息查询
当用户输入的学生姓名和专业都为空,则要求查询出所有学号不为空的学生信息
(2)查询出id值小于5的学生信息
1.当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
@Test
public void findStudentsTest1(){
SqlSession session = MyBatisUtils.getSqlSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student s1 = new Student();
s1.setName("张三");
List<Student> students = mapper.findStudentByName(s1);
for(Student s : students){
System.out.println(s);
}
session.close();
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/bd98d1966dfb64ed08e1f1ac87316be2.png)
2.当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息查询
@Test
public void findStudentsTest2(){
SqlSession session = MyBatisUtils.getSqlSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student s2 = new Student();
s2.setMajor("财务管理");
List<Student> students = mapper.findStudentByNameOrMajor(s2);
for(Student s : students){
System.out.println(s);
}
session.close();
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/93e4fe856c70b6e133f7e86c94be149b.png)
3.当用户输入的学生姓名和专业都为空,则要求查询出所有学号不为空的学生信息
@Test
public void findStudentsTest3(){
SqlSession session = MyBatisUtils.getSqlSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
Student s3 = new Student();
List<Student> students = mapper.findAllStudent(s3);
for(Student s : students){
System.out.println(s);
}
session.close();
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/39486b10595ee07062a8f212f60a7a0e.png)
4.查询出id值小于5的学生信息
@Test
public void findStudentsTest4(){
SqlSession session = MyBatisUtils.getSqlSession();
StudentMapper mapper = session.getMapper(StudentMapper.class);
Integer[] Ids = {1,2,3,4};
List<Student> students = mapper.findStudentById(Ids);
for(Student s : students){
System.out.println(s);
}
session.close();
}
运行结果:
![](https://img-blog.csdnimg.cn/img_convert/9896fdae1f238faa0882e4594b168a73.png)
四、结语
通过案例的学习,完成对MyBatis注解的学习,关注我,有更多精彩!