@AllArgsConstructor
@NoArgsConstructor
@Data
public class Team {
private Integer teamId;
private String teamName;
private String location;
private Date createTime;
}
7、编写 mapper 接口
public interface TeamMapper {
/**
* 获取全部 team 信息
* @return
*/
List getAll();
}
# 学生表
drop table if exists `student`;
CREATE TABLE `student` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '学生 id',
`name` varchar(50) DEFAULT NULL COMMENT '学生姓名',
`tid` int DEFAULT NULL COMMENT '学生所属老师 id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
insert into student value (1,'jojo',1);
insert into student value (2,'dio',1);
insert into student value (3,'faro',2);
insert into student value (4,'kkk',2);
insert into student value (5,'ttt',3);
# 老师表
drop table if exists `teacher`;
CREATE TABLE `teacher` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '老师 id',
`name` varchar(50) DEFAULT NULL COMMENT '老师姓名',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1003 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
insert into teacher value (1,'老师1');
insert into teacher value (2,'老师2');
insert into teacher value (3,'老师3');
学生:
public class Student {
private int id;
private String name;
private Teacher teacher;
}
老师:
public class Teacher {
private int id;
private String name;
}
1)、按照查询嵌套处理
接口:
List getAll();
.xml 实现
相当于在 resultMap 中,再执行一次查询
测试:
@Test
public void getAllTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 使用动态代理的方式,生成 mapper 的实现类
*/
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List all = mapper.getAll();
for (Student student : all) {
System.out.println(student);
}
sqlSession.close();
}
2)、按照结果嵌套处理
这种方法类似于 联表查询
按照方便程度来说,明显是第一种方式比较方便(sql写的少)
但是按照性能来说,是第二种性能更好(毕竟只要查询一次数据库)
2、对多关系
一对多的方式和多对一差不多
比如:一个老师拥有多个学生
环境搭建,和刚才一样编写实体类
public class Student {
private int id;
private String name;
private int tid;
}
public class Teacher {
private int id;
private String name;
//一个老师多个学生
private List students;
}
1)、按照查询嵌套查询
接口:
List getAll();
.xml 实现
这里的 ofType,指明的是集合中元素的泛型
测试:
@Test
public void getAllTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 使用动态代理的方式,生成 mapper 的实现类
*/
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
List all = mapper.getAll();
for (Teacher teacher : all) {
System.out.println(teacher);
}
sqlSession.close();
}
2)、按照结果嵌套查询
接口:
List getAll();
.xml 实现:
测试:
@Test
public void getAllTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 使用动态代理的方式,生成 mapper 的实现类
*/
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
List all = mapper.getAll();
for (Teacher teacher : all) {
System.out.println(teacher);
}
sqlSession.close();
}
十、动态 SQL
使用动态 SQL ,避免了 SQL 拼接的烦恼
where标签在select中的使用
注意: 在 mybatis 的 xml 实现中 >可以直接使用,但是 <不可以直接使用,必须使用转移符号
模糊查询:
使用模糊查询的时候,一定要使用 concat 函数,将字符串进行拼接,不能使用 + 号
set标签在update中的使用
update team
teamName=#{teamName},
location=#{location},
createTime=#{createTime},
where teamId=#{teamId}
forEach标签
批量添加
INSERT INTO team (teamName,location) VALUES
(#{t.teamName},#{t.location})
批量删除
delete from team where teamId in
#{teamId}
SQL 片段
提取SQL片段:
title = #{title}
and author = #{author}
引用SQL片段:
注意:
①、最好基于 单表来定义 sql 片段,提高片段的可重用性
②、在 sql 片段中不要包括 where
十一、分页插件
分页插件,我们使用 pageHelper
1、快速开始
1)、Maven 依赖
com.github.pagehelperpagehelper5.1.10
2)、Mybatis全局配置文件中添加插件配置
3)、使用插件
2、PageHelper 介绍
PageHelper 会拦截查询语句,然后添加分页语句
@Test
public void getAllTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 使用动态代理的方式,生成 mapper 的实现类
*/
TeamMapper mapper = sqlSession.getMapper(TeamMapper.class);
/**
* 查询页数为1,查询5条
*/
PageHelper.startPage(2,5);
List all = mapper.getAll();
for (Team team : all) {
System.out.println(team);
}
sqlSession.close();
}
3、PageInfo 介绍
可以用来打印分页的相关信息,如总条数,当前页数,总页数等
@Test
public void getAllTest() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
/**
* 使用动态代理的方式,生成 mapper 的实现类
*/
TeamMapper mapper = sqlSession.getMapper(TeamMapper.class);
/**
* 查询页数为1,查询5条
*/
PageHelper.startPage(2,5);
List all = mapper.getAll();
for (Team team : all) {
System.out.println(team);
}
PageInfo pageInfo = new PageInfo<>(all);
System.out.println("分页信息如下:");
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页数:"+pageInfo.getPageNum());
System.out.println("每页条数:"+pageInfo.getPageSize());
sqlSession.close();
}
eclipse中使用maven插件的时候,运行run as maven build的时候报错
-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
可以设一个环境变量M2_HOME指
1.建好一个专门放置MySQL的目录
/mysql/db数据库目录
/mysql/data数据库数据文件目录
2.配置用户,添加专门的MySQL管理用户
>groupadd mysql ----添加用户组
>useradd -g mysql mysql ----在mysql用户组中添加一个mysql用户
3.配置,生成并安装MySQL
>cmake -D
好久没有去安装过MYSQL,今天自己在安装完MYSQL过后用navicat for mysql去厕测试链接的时候出现了10061的问题,因为的的MYSQL是最新版本为5.6.24,所以下载的文件夹里没有my.ini文件,所以在网上找了很多方法还是没有找到怎么解决问题,最后看到了一篇百度经验里有这个的介绍,按照其步骤也完成了安装,在这里给大家分享下这个链接的地址
import java.io.UnsupportedEncodingException;
/**
* 转换字符串的编码
*/
public class ChangeCharset {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final Strin
其实这个没啥技术含量,大湿们不要操笑哦,只是做一个简单的记录,简单用了一下递归算法。
import java.io.File;
/**
* @author Perlin
* @date 2014-6-30
*/
public class PrintDirectory {
public static void printDirectory(File f
linux安装mysql出现libs报冲突解决
安装mysql出现
file /usr/share/mysql/ukrainian/errmsg.sys from install of MySQL-server-5.5.33-1.linux2.6.i386 conflicts with file from package mysql-libs-5.1.61-4.el6.i686
Dear,
I'm pleased to announce that ktap release v0.1, this is the first official
release of ktap project, it is expected that this release is not fully
functional or very stable and we welcome bu